【问题标题】:PayPal SDK causing "Order could not be captured" error after completing payment完成付款后,PayPal SDK 导致“无法捕获订单”错误
【发布时间】:2020-06-25 15:16:20
【问题描述】:

我的天啊,这个 PayPal 系统让我大吃一惊!我有以下代码:

<script src="https://www.paypal.com/sdk/js?client-id=MY_CODE_HERE&vault=true"></script>

然后这个脚本:

paypal.Buttons({

  createOrder: function(data, actions) {

    return actions.order.create({
        purchase_units: [{
            amount: {
                value:    parseFloat( window.my_config.amount ),
                currency: 'USD',
            },
            description: window.my_config.description,
            invoice_id: invoice_id
        }]
      });
  },

  onApprove: function(data, actions) {

    return actions.order.capture().then(function(details) {

        console.log({ details: details });

        // do something here

      });

    $('#AJAXloadingWrapper').show();
  },
   onError: function (err) {
        // Show an error page here, when an error occurs
        console.log("ERROR")
        console.dir(err);
    }


}).render('#paypalWrapper');

它进入这个位很好:

onApprove: function(data, actions) {

但是当它运行时:

return actions.order.capture().then(function(details) {

我收到一个错误,但它失败了:(不收钱)

Error
​
code: undefined
​
columnNumber: 55441
​
fileName: "https://www.paypal.com/sdk/js?client-id=xxxx&vault=true"
​
lineNumber: 2
​
message: "Order could not be captured"

这到底是什么意思?这是我传递给purchase_units 的示例:

我差一点就叫它退出并说“我们正在删除贝宝”。

更新:在我的搜索中,我不断有人告诉我,问题可能来自 PayPal,我使用了重复的 invoice_id。我知道不是这样,但也许我传错了?

return actions.order.create({
    purchase_units: [{
        amount: {
            value:    parseFloat( window.my_config.amount ),
            currency: 'USD',
        },
        description: window.my_config.description,
        invoice_id: invoice_id
    }]
  });

},

【问题讨论】:

  • 如果您删除 invoice_id 变量,您是否会收到相同的错误?你有传递 Vault=true 的理由吗?您是否有任何错误记录来自 PayPal 的实际错误,带有更具描述性的错误或 PayPal-Debug-Id?检查网络选项卡或其他放置在开发工具控制台中
  • @PrestonPHX 感谢您的回复。如果我删除 invoice_id 我会遇到同样的问题(这就是我首先添加它的原因)。 vault=true 刚刚添加,因为它在示例代码中给出。不需要吗?在失败之前我看到的最后一个 XHR 请求是 9e473911c35c9。我不确定你在哪里看的?今天早上我确实想到这可能是由于开发站点位于 IP 块后面 - 但鉴于该请求甚至不需要进行服务器调用,这似乎并不合理。作为测试,我已经删除了 IP 块,但问题仍然存在
  • @PrestonPHX FWIW 我也删除了vault=true,但也没有任何区别(我只是查看了它启用的功能,我认为我们不需要它)
  • @PrestonPHX 顺便说一句,我还测试了用另一个帐户付款。两者都是有效的工作帐户,我一直使用它们来购买。
  • 是的,但专门创建一个新应用并使用该新应用

标签: paypal paypal-rest-sdk


【解决方案1】:

好的,所以我真的希望我的痛苦将来可以帮助其他人。我自己花了几个小时研究这个问题,然后用 PayPal 支持技术研究了更多时间。最终的解决方案是清除我的浏览器缓存。有点极端,但它似乎已经排序了。我希望我以前也想过!

【讨论】:

  • 知道了,有时在沙盒和实时测试中,cookie 会失控。以后您可以在 cookie 中搜索“paypal.com”,然后只清除这些域,而不是整个浏览器 cookie
  • 同样作为一般的网络开发规则,当此类错误持续存在时,您应该尝试在多个浏览器(例如 Firefox 和 Chrome)中重现,以帮助确定是服务器端问题还是客户端问题。
  • @PrestonPHX 是的,我在踢自己,因为我没有尝试过。我想我对这一切感到压力很大,以至于我的大脑无法正常工作! (我做了 20 年的开发人员,所以在正常情况下,我会采取正确的路线在其他浏览器中进行测试,清除缓存、cookie 等)
猜你喜欢
  • 2021-08-31
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2013-02-22
  • 2014-07-30
  • 2013-06-10
相关资源
最近更新 更多