【问题标题】:paypal API v2 how to reload after transaction completedpaypal API v2如何在交易完成后重新加载
【发布时间】:2020-11-28 02:38:15
【问题描述】:

这个问题是关于如何在交易完成后重新加载页面的 paypal v2 API。

使用我的实际代码,我可以执行交易并成功保存在我的数据库中。

唯一的部分是如何在完全执行后重新加载?

这是我的代码

paypal.Buttons({
            createOrder: function(data, actions) {
              return actions.order.create({
                purchase_units: [{
                  amount: {
                    value:\''.$amount.'\',
                  }
                }]
              });
            },
            onApprove: function(data, actions) {
              return actions.order.capture().then(function(details) {
                
                return fetch("/__path_to_save_db.php", {
                  method: "post",
                  headers: {
                    "content-type": "application/json"
                  },
                  body: JSON.stringify({
                    orderID: data.orderID,
                    paymentID: data.paymentID,
                    payerID: data.payerID,
                  })
                });
              });
            }
          }).render("#paypal-button-container");

我尝试添加一个 javascript 重新加载,但它在执行结束之前重新加载:(

这里

 return actions.order.capture().then(function(details) {
                    location.reload();
                    return fetch("/__path_to_save_db.php", {

似乎 location.reload() 触发得太快了....如何使其仅在 paypal 答案完全加载后才执行?

【问题讨论】:

    标签: javascript php paypal


    【解决方案1】:

    您不应该在客户端捕获付款,然后依赖客户端将此信息发送到服务器。

    将此更改为适当的客户端服务器支付集成。创建两条路由,一条用于“Set Up Transaction”,一条用于“Capture Transaction”,documented here.

    将您的两条路线与以下批准流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server

    显示成功消息的代码——或者执行页面“重新加载”或重定向,如果你觉得自己像一个老式的 web 2.0 设计者——应该在服务器返回成功时处理的情况下使用捕获。

    【讨论】:

    • 但是使用这段代码:在 PHP 端我会回显“某事”,但它没有显示在页面 html 的任何地方:(我如何添加一个 taget div 来返回“回声” PHP 的?
    • 上面的服务器端代码没有输出到网页,所以说目标div没有意义。用于异步请求,会输出 JSON。
    【解决方案2】:

    我找到了适合我的解决方案

     return actions.order.capture().then(function(details) {
                        if(confirm("transaction completed")){ setTimeout(function(){ location.reload(); }, 1000);}
                        return fetch("/__path_to_save_db.php", {
    

    延迟 1 秒后的“确认”会显示一个对话框,点击后会重新加载

    【讨论】:

      猜你喜欢
      • 2019-12-21
      • 2014-10-05
      • 2023-03-21
      • 2015-02-13
      • 2020-10-01
      • 1970-01-01
      • 2021-02-10
      • 2014-03-11
      • 2020-08-06
      相关资源
      最近更新 更多