javascript - Paypal Checkout 集成 - onShippingChange 不适用于新的 SDK

标签 javascript paypal

我跟着教程 https://developer.paypal.com/docs/checkout/integrate/ 并且还想根据运送国家/地区更改运费,如此处所示 https://developer.paypal.com/docs/checkout/integration-features/shipping-callback/

我的“Paypal-Button”代码如下所示

<!DOCTYPE html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script src="https://www.paypal.com/sdk/js?client-id=XXXXXXXXXX&currency=EUR">
</script>
</head>
<body>

<h2>Checkout</h2>

<div id="paypal-button-container"></div>
<script>
  const baseOrderAmount = '15.00';
  const addFloats = (...floats) => floats.reduce((v, t) => parseFloat(t) + parseFloat(v), 0).toFixed(2);

  paypal.Buttons({

    createOrder: function(data, actions) {
      // Set up the transaction
      return actions.order.create({
        purchase_units: [{
          amount: {
            value: baseOrderAmount
          }
        }]
      });
    },

    onApprove: function(data, actions) {
      // Capture the funds from the transaction
      return actions.order.capture().then(function(details) {
        // Show a success message to your buyer
        alert('Transaction completed by ' + details.payer.name.given_name);
        // Call your server to save the transaction
        return fetch('/paypal-transaction-complete.php', {
          method: 'post',
          body: JSON.stringify({
            orderID: data.orderID
          })
        });
      });
    },

    onShippingChange: function(data, actions) {

        // Reject all others
        if ((data.shipping_address.country !== 'DE') || (data.shipping_address.country !== 'AT') || (data.shipping_address.country !== 'CH')) {
            return actions.reject();
        }

        // Patch the shipping amount
        var shippingAmount = 10.0;
        if (data.shipping_address.country == 'AT') {
            shippingAmount = 20.0;
        }
        if (data.shipping_address.country == 'CH') {
            shippingAmount = 30.0;
        }

        return actions.order.patch([
        {
            op: 'replace',
            path: "/purchase_units/@reference_id=='default'/amount",
            value: {
                currency_code: 'EUR',
                value: addFloats(baseOrderAmount, shippingAmount),
                breakdown: {
                    item_total: {
                        currency_code: 'EUR',
                        value: baseOrderAmount
                    },
                    shipping: {
                        currency_code: 'EUR',
                        value: shippingAmount
                    }
                }
            }
        }]);
    }
  }).render('#paypal-button-container');
</script>
</body>
</html>

其他一切正常,但是当我包含 onShippingChange() 时,我总是从 paypal 收到消息,“卖家不在这个国家发货,使用不同的地址......”(但我使用德国地址)。

最佳答案

更改以下行:

data.shipping_address.country

收件人:

data.shipping_address.country_code

最好的问候, 托马斯

关于javascript - Paypal Checkout 集成 - onShippingChange 不适用于新的 SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54890408/

相关文章:

Javascript:如何根据法国惯例格式化日期

javascript - 极其奇怪的行为 : IE11 seems to create an invisible tab when scripts are blocked and then allowed - how to fix it?

android - Paypal 可以使用版本 15 吗?

.net - paypal 与 .net 应用程序的集成可能是 Web 服务而不是网站

从沙盒到生产的 Paypal 标准结帐

paypal - PayPal 在 subscr_signup 期间发送的自定义变量是否与 subscr_cancel 期间发送的自定义变量匹配?

javascript - Jquery追加一个div并删除一个div

javascript - 在 Watson Assistant 中添加和编辑 JSON 数组

javascript - 如果使用 iPad,请删除指向 javascript 的链接

php - sizeof() : Parameter must be an array or an object that implements Countable