javascript - 无法重定向到 django paypal 中的成功页面
问题描述
我有一个使用 Paypal 付款的 Django 商店网站
但在我views.py
的 Django 中,除了转到我选择的定向页面之外,其他所有操作都是我的views.py
def capture(request,id):
do some stuff
return redirect(reverse("shop:success"))
<script type="text/javascript">
function completeOrder(){
var url = "{% url 'shop:paypal' id=orders.id %}"
fetch(url, {
method:'POST',
headers:{
'Content-type':'application/json',
'X-CSRFToken':csrftoken,
},
body:JSON.stringify("{{orders.id}}")
})
}
// Render the PayPal button into #paypal-button-container
paypal.Buttons({
style: {
layout: 'horizontal',
color:"blue",
label:"checkout",
tagline:"false",
shape:"pill",
size:"small",
},
// Set up the transaction
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '{{orders.converter}}'
}
}]
});
},
// Finalize the transaction
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
// Show a success message to the buyer
completeOrder()
alert('Transaction completed by ' + details.payer.name.given_name + '!');
});
}
}).render('#paypal-button-container');
</script>
解决方案
不要使用actions.order.create() 和 actions.order.capture() 在客户端创建+捕获,然后在客户端捕获后调用服务器fetch
。使用服务器时,这是非常糟糕的设计。
相反,切换到适当的服务器端集成:在服务器上创建两条路由,一条用于“创建订单”,一条用于“捕获订单”,记录在这里;您可以使用 Checkout-Python-SDK。这两个路由应该只返回 JSON 数据(没有 HTML 或文本)。后者应该(成功时)在返回之前将付款详细信息存储在您的数据库中(特别purchase_units[0].payments.captures[0].id
是 PayPal 交易 ID)
将您的两条路线与以下批准流程配对:https ://developer.paypal.com/demo/checkout/#/pattern/server
在该流程的成功代码中,可以使用actions.redirect()
或简单地设置重定向window.location.href
(通用 JavaScript 解决方案)
推荐阅读
- asp.net-mvc - 解析 API 响应时遇到意外字符
- javascript - 反应原生 ListItem 图像 url 传递变量
- docker - 在树莓派上的 docker 容器中运行 firefox
- android - 创建无障碍服务以授予/撤销 android 手机上可用的其他应用程序的权限
- javascript - 如何向特定频道发送消息?
- javascript - 局部变量未将数据分配给全局变量 javascript
- android - 同时与不同的服务通信
- javascript - 宏伟的弹出窗口有两个关闭的 x
- android - 如何在 okhttp3 身份验证器中使用异步请求添加刷新令牌进行身份验证
- mongodb - 使用 Stitch Functions 写入 S3 存储桶