VS2019下使用.net core调试PP支付Checkout集成SmartPaymentButtons一直报错问题分析

  PP的PayPal Checkout with Smart Payment Buttons集成方案参考:https://developer.paypal.com/docs/checkout/

  在PP的智能按钮继承方案中,你经常会看到的一个错误是:No ack for postMessage zoid_delegate_paypal_checkout in https://www.sandbox.paypal.com in 10000ms

 

  1-在使用前台JS创建订单时,PP推荐写法(这个写法PP提供的JS-sdk封装好的,自然没有问题,不会产生等待问题):

<script>
  paypal.Buttons({
    createOrder: function(data, actions) {
      // This function sets up the details of the transaction, including the amount and line item details.
      return actions.order.create({
        purchase_units: [{
          amount: {
            value: '0.01'
          }
        }]
      });
    }
  }).render('#paypal-button-container');
</script>

  2-使用后台创建订单时,由于用到请求,这里就可能会产生等不带结果或者返回空orderid,PP就会抛出异常,一般请求采用jquery-ajax,但是这里PP不推荐的,PP推荐的是支持异步等待的fetch写法,fetch默认返回Promise,支持等待:

createOrder: function() {
  return fetch('/my-server/create-paypal-transaction', {
    method: 'post',
    headers: {
      'content-type': 'application/json'
    }
  }).then(function(res) {
    return res.json();
  }).then(function(data) {
    return data.id; // Use the key sent by your server's response, ex. 'id' or 'token'
  });
}

但是别忘了PP给的一行关键提示:注意: PayPal 建议您不要使用 jQuery 的ajax()函数,因为 PayPal 会期望您的createOrder函数返回 Promise,而 jQuery 的ajax()函数不会返回 Promise。使用fetch()以执行Ajax请求

VS2019下使用.net core调试PP支付Checkout集成SmartPaymentButtons一直报错问题分析

 

 

  3-当然除了上述两点问题,还有一个是你意想不到的坑,就是我之前博文里有提到VS支持JS调试的文档,但是在调试PPDemo的时候,打开VS的设置情况下:

VS2019下使用.net core调试PP支付Checkout集成SmartPaymentButtons一直报错问题分析

 

无论你怎么写,怎么按照标准的写法写都会报超时未返回orderid的问题,只有偶尔情况下是好的;但是假如我们把调试地址放到一个单独的浏览器窗口访问,是完全OK的,那么问题一定处在调试时做了某些设置导致的,最好发现了上面图中的3项设置,关闭选项后,重启调试功能,完全OK的。真是没谁了!

 

上一篇:马斯克震撼演讲:世界上最可怕的事,是孩子没有内驱力


下一篇:[连载型] Neutron 系列 (18): Neutron 分布式虚拟路由【下】