Reactjs PayPal的回复是“不”;不能“混用”货币;当采购单位货币发生变化时
我正在出售一件商品,它的价格和货币因送货地址而异 如果用户有两个地址,一个在美国,另一个在英国,他们可以通过PayPal更改送货地址。当用户将地区从美国更改为英国时,PayPal会通知我的网站该地区发生了变化,它会用新的货币和价格进行回复,从345美元更改为305英镑 当PayPal收到此更新时,PayPal会向客户显示一个错误。在“网络”选项卡中有更多的细节,您可以找到以下错误:Reactjs PayPal的回复是“不”;不能“混用”货币;当采购单位货币发生变化时,reactjs,paypal,paypal-sandbox,paypal-rest-sdk,Reactjs,Paypal,Paypal Sandbox,Paypal Rest Sdk,我正在出售一件商品,它的价格和货币因送货地址而异 如果用户有两个地址,一个在美国,另一个在英国,他们可以通过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¤cy=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上更改他们的地址(从而更改支付货币),因此之前无法整理此详细信息。我可以将对预选区域之外地址的更改标记为无效,但如果可能,我希望允许用户进行更改。为什么地址更改需要货币更改?无论如何,在显示按钮之前必须知道货币。谢谢,我想这节省了我几个小时的时间