Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs PayPal的回复是“不”;不能“混用”货币;当采购单位货币发生变化时_Reactjs_Paypal_Paypal Sandbox_Paypal Rest Sdk - Fatal编程技术网

Reactjs PayPal的回复是“不”;不能“混用”货币;当采购单位货币发生变化时

Reactjs PayPal的回复是“不”;不能“混用”货币;当采购单位货币发生变化时,reactjs,paypal,paypal-sandbox,paypal-rest-sdk,Reactjs,Paypal,Paypal Sandbox,Paypal Rest Sdk,我正在出售一件商品,它的价格和货币因送货地址而异 如果用户有两个地址,一个在美国,另一个在英国,他们可以通过PayPal更改送货地址。当用户将地区从美国更改为英国时,PayPal会通知我的网站该地区发生了变化,它会用新的货币和价格进行回复,从345美元更改为305英镑 当PayPal收到此更新时,PayPal会向客户显示一个错误。在“网络”选项卡中有更多的细节,您可以找到以下错误:无法混合货币。但是,项目价格和总价都转换为所需的货币,因此不存在“混合”货币。下面是生成错误的请求和相应的响应 请求

我正在出售一件商品,它的价格和货币因送货地址而异

如果用户有两个地址,一个在美国,另一个在英国,他们可以通过PayPal更改送货地址。当用户将地区从美国更改为英国时,PayPal会通知我的网站该地区发生了变化,它会用新的货币和价格进行回复,从345美元更改为305英镑

当PayPal收到此更新时,PayPal会向客户显示一个错误。在“网络”选项卡中有更多的细节,您可以找到以下错误:
无法混合货币
。但是,项目价格和总价都转换为所需的货币,因此不存在“混合”货币。下面是生成错误的请求和相应的响应

请求:补丁->

答复:

{
  "ack":"contingency",
  "contingency":"UNPROCESSABLE_ENTITY",
  "data": {
    "name":"UNPROCESSABLE_ENTITY",
    "details":[{ 
      "location":"body",
      "issue":"CANNOT_MIX_CURRENCIES",
      "description":"CANNOT_MIX_CURRENCIES"
    }],
    "message":"The requested action could not be performed, semantically incorrect, or failed business validation.",
    "debug_id":"xxx",
    "links":[{
      "href":"https://developer.paypal.com/docs/api/orders/v2/#error-CANNOT_MIX_CURRENCIES",
      "rel":"information_link",
      "method":"GET"
    }]
  },
  "meta":{"calc":"xxx","rlog":"xxx"},
  "server":"xxx"
}
{
    "id":"xxx",
    "status":"CREATED",
    "links":[
        {
            "href":"https://api.sandbox.paypal.com/v2/checkout/orders/xxx",
            "rel":"self",
            "method":"GET"
        },
        {
            "href":"https://www.sandbox.paypal.com/checkoutnow?token=xxx",
            "rel":"approve",
            "method":"GET"
        },
        {
            "href":"https://api.sandbox.paypal.com/v2/checkout/orders/xxx",
            "rel":"update",
            "method":"PATCH"
        },
        {
            "href":"https://api.sandbox.paypal.com/v2/checkout/orders/xxx/capture",
            "rel":"capture",
            "method":"POST"
        }
    ]
}
下面是创建上述采购单元的请求(和响应)

请求:POST->POST->

答复:

{
  "ack":"contingency",
  "contingency":"UNPROCESSABLE_ENTITY",
  "data": {
    "name":"UNPROCESSABLE_ENTITY",
    "details":[{ 
      "location":"body",
      "issue":"CANNOT_MIX_CURRENCIES",
      "description":"CANNOT_MIX_CURRENCIES"
    }],
    "message":"The requested action could not be performed, semantically incorrect, or failed business validation.",
    "debug_id":"xxx",
    "links":[{
      "href":"https://developer.paypal.com/docs/api/orders/v2/#error-CANNOT_MIX_CURRENCIES",
      "rel":"information_link",
      "method":"GET"
    }]
  },
  "meta":{"calc":"xxx","rlog":"xxx"},
  "server":"xxx"
}
{
    "id":"xxx",
    "status":"CREATED",
    "links":[
        {
            "href":"https://api.sandbox.paypal.com/v2/checkout/orders/xxx",
            "rel":"self",
            "method":"GET"
        },
        {
            "href":"https://www.sandbox.paypal.com/checkoutnow?token=xxx",
            "rel":"approve",
            "method":"GET"
        },
        {
            "href":"https://api.sandbox.paypal.com/v2/checkout/orders/xxx",
            "rel":"update",
            "method":"PATCH"
        },
        {
            "href":"https://api.sandbox.paypal.com/v2/checkout/orders/xxx/capture",
            "rel":"capture",
            "method":"POST"
        }
    ]
}
我正在通过npm包使用

“不能混合货币”的文档提到采购单位中的所有货币必须相同,但没有提到不可能更改采购单位货币。令人困惑的是,我只能在账单协议API v1中找到关于此错误的提及(“不能混合货币”)

不能混用货币

货币代码无效。所有货币代码都非常匹配。对所有金额对象使用相同的货币代码

在加载SDK的
行中,货币默认为USD,此SDK行货币很重要,因为它用于确定在调用orders v2对象之前可以显示哪些按钮

如果在页面加载后需要更改货币,可以异步重新加载SDK

function loadAsync(url, callback) {
    var s = document.createElement('script');
    s.setAttribute('src', url); s.onload = callback;
    document.head.insertBefore(s, document.head.firstElementChild);
}

// Usage:

loadAsync('https://www.paypal.com/sdk/js?client-id=sb&currency=USD', function() {
  paypal.Buttons({
    createOrder: function(data, actions) {
        //your code here
    },
    onApprove: function(data, actions) {
        //your code here
    }
  }).render('body');  // Replace with selector to render in
});

另外,如果您喜欢依赖项多于3行函数,还可以提供一个节点包:)

谢谢您的快速回复。唯一的问题是,每次货币变化时,与paypal的会话都会重新加载,这使得用户不得不在我们的网站上再次单击“支付”。在与PayPal的会话期间,货币正在发生变化。在将用户发送到PayPal之前,您应该整理好该详细信息。抱歉,之前的消息不太清楚。用户可以在PayPal上更改他们的地址(从而更改支付货币),因此之前无法整理此详细信息。我可以将对预选区域之外地址的更改标记为无效,但如果可能,我希望允许用户进行更改。为什么地址更改需要货币更改?无论如何,在显示按钮之前必须知道货币。谢谢,我想这节省了我几个小时的时间