问题描述
我正在使用PayPal REST SDK客户端JavaScript来create an order,并且具有以下代码:
paypal.Buttons({
style: {
size: 'responsive',layout: 'vertical'
},createOrder: function(data,actions) {
// This function sets up the details of the transaction,including the amount and line item details.
return actions.order.create({
intent: 'CAPTURE',purchase_units: [{
amount: {
currency_code: 'AUD',value: '70.00',breakdown: {
discount: {
currency_code: 'AUD',value: '5.00'
}
}
},description: 'xxxxxxxxxxx'
// custom_id: '',}]
});
},onApprove: function(data,actions) {
// This function captures the funds from the transaction.
return actions.order.capture().then(function(details) {
// This function shows a transaction success message to your buyer.
alert('Transaction completed by ' + details.payer.name.given_name);
});
}
}).render('.purchase-modal');
}
这将返回上述错误和状态代码422 (Unprocessable Entity)。
breakdown: {
discount: {
currency_code: 'AUD',value: '5.00'
}
}
我检查了,这似乎有效吗?
我在这里做错什么了吗?
解决方法
它有助于从JavaScript控制台或浏览器的“网络”标签中读取整个JSON响应错误消息。
{
"name":"UNPROCESSABLE_ENTITY","details":[
{
"field":"/purchase_units/0/amount/value","value":"70.00","issue":"AMOUNT_MISMATCH","description":"Should equal item_total + tax_total + shipping + handling + insurance - shipping_discount - discount."
}
],"message":"The requested action could not be performed,semantically incorrect,or failed business validation.","debug_id":"3c22979dc723a","links":[
{
"href":"https://developer.paypal.com/docs/api/orders/v2/#error-AMOUNT_MISMATCH","rel":"information_link","method":"GET"
}
]
}
请特别注意“说明”中的消息。
因此,您已经有了。如果指定的总值为70
,折扣为5
,则您需要告诉PayPal在发生“折扣”之前总计为75
(!)的东西应用。否则,此“折扣”值本身是没有意义的,PayPal不知道该如何处理,并且出现422无法处理的错误,从而消除了有关情况的任何歧义。
旁注...
您此处未使用“ REST SDK”,因为它专用于服务器端。客户端代码是JavaScript SDK。如果确实要使用兼容的REST API进行服务器端集成(推荐),请在服务器上实现两条路由,一条用于“设置事务”,一条用于“捕获事务”,在此处记录:https://developer.paypal.com/docs/checkout/reference/server-integration/
然后将您的JavaScript代码更改为服务器演示的https://developer.paypal.com/demo/checkout/#/pattern/server,并链接到您的这两个路由