PayPal Orders v2 在传递金额折扣时创建返回 422(无法处理的实体)
Posted
技术标签:
【中文标题】PayPal Orders v2 在传递金额折扣时创建返回 422(无法处理的实体)【英文标题】:PayPal Orders v2 create returning 422 (Unprocessable Entity) when passing amount discount 【发布时间】:2021-01-26 05:39:33 【问题描述】:我正在使用 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'
我检查了,这似乎是有效的?
我在这里做错了吗?
【问题讨论】:
偶然发现 this 可能会有所帮助 - 您似乎需要指定:"breakdown": "item_total":
和 "discount":
@jibsteroos 是的,我注意到了,但我认为它不是必需的,因为它声明“如果请求包含 purchase_units[].items[].unit_amount 则为必需” - 我没有包括在内,但无论如何我都会试一试:)
【参考方案1】:
它有助于从 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
,您需要告诉贝宝在应用这样的“折扣”之前加起来是75
(!) 的东西是什么。否则这个“折扣”值本身是没有意义的,PayPal 不知道如何处理它,随后会出现 422 Unprocessable 错误以消除对这种情况的任何歧义。
旁注...
您在这里没有使用“REST SDK”,因为它特定于服务器端。客户端代码是 JavaScript SDK。如果您确实想使用兼容的 REST API 进行服务器端集成(推荐),请在您的服务器上实现两条路由,一条用于“设置事务”,一条用于“捕获事务”,记录在此:https://developer.paypal.com/docs/checkout/reference/server-integration/
然后将您的 JavaScript 代码更改为服务器演示的:https://developer.paypal.com/demo/checkout/#/pattern/server,链接到您的这两条路由
【讨论】:
啊,谢谢。是的,我没有在控制台中看到 JSON,但你是对的,它在网络选项卡中。关于 REST 也有好处,它都只是捆绑在 REST 部分下,所以请原谅这个错误。以上是关于PayPal Orders v2 在传递金额折扣时创建返回 422(无法处理的实体)的主要内容,如果未能解决你的问题,请参考以下文章
Rails:Paypal 端点 /v2/checkout/orders 返回 http 401
我在哪里使用其余 API 设置 PayPal 付款的折扣值?