Paypal 按钮返回“无法捕获订单”

Posted

技术标签:

【中文标题】Paypal 按钮返回“无法捕获订单”【英文标题】:Paypal Button returns 'Order could not be captured' 【发布时间】:2019-08-03 12:09:25 【问题描述】:

我正在使用贝宝按钮 SDK。激活按钮的代码是:-

        paypal.Buttons(
        createOrder: ( data, actions ) => 
            return actions.order.create(
                purchase_units: [
                    amount: 
                        value: this.amount.toFixed(2),
                        currency_code: "GBP",
                    
                ]
            )
        ,
        onApprove: ( data, actions ) => 
            return actions.order.capture().then(details => 
              console.log('details',details);
            )
        ,
        onError: ( error ) => 
            console.log('error',error);
        
    ).render('#paypal-button-container')

用户界面按预期运行,然后在返回错误之前有很长的暂停。脚本标签中使用的 client_id 用于沙盒帐户。我找不到描述错误可能原因的文档...

error Error: Order could not be captured

非常感谢任何建议。

贝宝..https://developer.paypal.com/docs/checkout/integrate/#1-get-paypal-rest-api-credentials

【问题讨论】:

【参考方案1】:

我在 onApprove 回调中的“actions.order.capture()”中遇到了同样的“无法捕获订单”错误。

就我而言,它在第一次运行时有效,但在随后的调用中无效。我发现我的订单总是有相同的 invoice_id。我删除了 invoice_id,Paypal 停止了投诉。

如果 invoice_id 总是唯一的就好了。

【讨论】:

【参考方案2】:

如果您在控制台中收到 Xss 消息,请尝试在私人导航中,断开与您的 paypal 买家帐户的连接。

【讨论】:

【参考方案3】:

按照评论中的建议,尝试使用此 URL 进行卷曲:

https://www.sandbox.paypal.com/smart/api/order/ODER_ID/capture

它回复了代码 401,并进行了一些研究,最终发现我使用了错误的帐户进行付款。

我刷新 PayPal 登录并使用正确的沙盒买家帐户登录并付款,它可以正常工作。

也许贝宝应该给出正确的错误信息。

【讨论】:

【参考方案4】:

与 Nuxt 相同的问题,结帐工作但捕获错误响应:错误 500 order-could-not-be-captured

<template>
  <no-s-s-r>
    <v-layout row wrap>  
      <div ref="paypal"></div>   
    </v-layout>
  </no-s-s-r>
</template>

脚本

mounted() 
    const script = document.createElement("script");
    script.src =
      "https://www.paypal.com/sdk/js?client-id=MyKeyID";
    script.addEventListener("load", this.setLoaded);
    document.body.appendChild(script);
  ,
  methods: 
    setLoaded: function() 
      this.loaded = true;
      window.paypal
        .Buttons(
          createOrder: (data, actions) => 
            return actions.order.create(
              purchase_units: [
                
                  description: "Test description",
                  amount: 
                    currency_code: "USD",
                    value: 1
                  
                
              ]
            );
          ,
          onApprove: async (data, actions) => 
            const order = await actions.order.capture();
            this.paidFor = true;
            console.log(order);
          ,
          onError: err => 
            console.log(err);
          
        )
        .render(this.$refs.paypal);
    

【讨论】:

您能否在答案中添加更多描述?或者这是另一个问题? 这是另一个问题吗?【参考方案5】:

您可以使用返回 Paypal 服务器的 CURL 检查吗? 这是一条评论,但我没有 50pkt S/O。抱歉。

【讨论】:

这是失败的贝宝服务器 POST... [链接] www.sandbox.paypal.com/smart/api/order/3J674917081315435/capture (网址有www。在前面,但由于某种原因,这没有出现在评论中) curl -v -X POST sandbox.paypal.com/smart/api/order/3J674917081315435/capture 也许 401 未经授权? 我很确定连接已获得授权,如果我将脚本标签中的 client_id 更改为废话,会话将无法启动( window.paypal 未定义)。在最后阶段(处理订单)之前还会发生一些互动。 > POST /smart/api/order/3J674917081315435/capture HTTP/1.1 > 主机:www.sandbox.paypal.com > 用户代理:curl/7.52.1 > 接受:/ > 如果我 curl -v -X POST www.sandbox.paypal.com/smart/api/order/3J674917081315435/capture 我得到的响应是 HTTP/1.0 302 Found ?

以上是关于Paypal 按钮返回“无法捕获订单”的主要内容,如果未能解决你的问题,请参考以下文章

PayPal 智能按钮返回 JSON 错误

PayPal(标准)订阅按钮返回 URL 中 Auth 的含义?

单击Paypal的“返回商家”按钮时出现代码问题

Paypal 没有覆盖返回 URL?

从 Paypal 客户端 REST 集成按钮返回客户信息

Paypal 退订返回网址