Paypal Checkout.js 未调用 onAuthorize()

Posted

技术标签:

【中文标题】Paypal Checkout.js 未调用 onAuthorize()【英文标题】:Paypal Checkout.js not calling onAuthorize() 【发布时间】:2017-11-06 08:48:55 【问题描述】:

我有来自https://developer.paypal.com/demo/checkout/#/pattern/confirm的以下代码

代码在 Paypal 结帐页面显示,我可以输入我的所有信息。我遇到的问题是 onAuthorize() 根本没有被调用。即使我完成了一个事务,唯一被调用的是 onCancel() 函数。

注意:我正在使用这里的测试信用卡https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm

        paypal.Button.render(
          // Set your environment
          env: 'sandbox', // sandbox | production
          // Create a PayPal app: https://developer.paypal.com/developer/applications/create
          client: 
            sandbox:    'AY2UxZoOkoWQ0-******',
            production: '' // This is not set
          ,
          commit: true, // Set to 'Pay Now'
          payment: function()  // Wait for the PayPal button to be clicked
            // Make a client-side call to the REST api to create the payment
            return paypal.rest.payment.create(this.props.env, this.props.client, 
              transactions: [
                
                  amount:  total: '10.00', currency: 'USD' 
                
              ]
            );
          ,
          // Wait for the payment to be authorized by the customer
          onAuthorize: function(data, actions) 
            console.log('onAuthorize');
          ,
          onCancel: function(data, actions) 
            console.log('onCancel');
            console.log(data);
          
        , '#paypal-button-container');

当我从 onCancel() 打印数据对象时的响应如下:


    cancelUrl: "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&xo_node_fallback=true&force_sa=true&fallback=1&token=EC-90M952801L841090P",
    intent: "sale",
    paymentToken: "EC-90M952801L841090P"

【问题讨论】:

在演示站点上直接使用按钮时看到相同的结果吗? @bluepnume 是的,完全一样。一旦添加,只有 onCancel() 会被调用。看看是否有帮助。 但是如果你不添加 onCancel 是否有效?或者什么都没发生 @bluepnume 然后它根本不会做任何事情。仍然不会进入 onAuthorize() @bluepnume 不确定是否有区别,但我正在使用这里的测试信用卡paypalobjects.com/en_US/vhelp/paypalmanager_help/… 【参考方案1】:

我现在正在处理这个问题。 我在测试期间意识到并感谢@zee(我读到“只有 onCancel() 才会被调用一次添加..”这让我想到)只有在 SANBOX checkout.js 中才会调用 onCancel() 总是(或至少,总是为我和我所有的测试)。 我(10 分钟前)想在 onCancel() 中实现一个可怕的“IF”来处理响应并调用我的服务器,就像我想在 onAutorize() 内部做的那样(在付款执行等之后......)。 在此之前,我用生产密钥尝试过一次,然后......它奏效了! onAutorize() 被调用并且一切都按预期运行。 直到昨天我都在这个问题上并且正在燃烧,我希望这会对某人有所帮助。

西蒙娜

【讨论】:

以上是关于Paypal Checkout.js 未调用 onAuthorize()的主要内容,如果未能解决你的问题,请参考以下文章

Paypal API - checkout.js - 解析响应错误

无法让 PayPal checkout.js 创建成功的交易

paypal checkout.js 检查错误交易

卡住了 Paypal Express Checkout 的集成(基本集成 checkout.js 版本 4.0.0)

Paypal Express Checkout.js - 填充产品详细信息

PayPal Express Checkout.js - 发送自定义参数