首页 > 解决方案 > 无法重定向到 django paypal 中的成功页面

问题描述

我有一个使用 Paypal 付款的 Django 商店网站

但在我views.py的 Django 中,除了转到我选择的定向页面之外,其他所有操作都是我的views.py

def capture(request,id):
    do some stuff
    return redirect(reverse("shop:success")) 
这是JavaScript

<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>

标签: javascriptdjangopaypaldjango-views

解决方案


不要使用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 解决方案)


推荐阅读