在实现服务器 Paypal 集成时,POST Create 调用可以正常工作到 https://api.sandbox.paypal.com/v1/payments/payment与 API 中找到的响应对象相匹配。服务器成功返回结果给Client,paypal.request.post的.then(res)函数的res.id为:PAY-76T970067E989851JLPLCMKA
用户授权付款后,客户端向我的服务器的执行端点发送请求,负载为:
{
"paymentID" : "PAY-76T970067E989851JLPLCMKA",
"payerID" : "3LSD3Q8J7T3ZL"
}
服务器然后将查询的有效负载重新建模到 paypal 的 POST 执行端点,如下所示:
标题:
Content-Type = "application/json"
Authorization = "Bearer " + accessToken // checked not expired
主体有效负载为:
{"payer_id" : "3LSD3Q8J7T3ZL"}
该帖子随后发送至:
https://api.sandbox.paypal.com/v1/payments/payment/PAY-76T970067E989851JLPLCMKA/execute
此时,PayPal 服务器响应:远程服务器返回错误:(400) 错误请求。
据我所知,这符合此处概述的 API 要求:https://developer.paypal.com/docs/api/payments/v1/#payment_execute
顺便说一句,我在自己的服务器上设置了一个端点,以检查提交到 Paypal 执行端点的 header 和 JSON 负载是否正确。
如有任何建议,我们将不胜感激。
最佳答案
已解决:虽然调用 Paypal 的执行端点时返回错误,但问题实际上存在于 Create 有效负载中。 提交到创建端点的 soft_descriptor 属性必须是唯一的,就像invoice_number 属性一样。这两个值都可以在 Transaction 对象中找到,如下所示:
https://developer.paypal.com/docs/api/payments/v1/#definition-transaction .
确实,错误应该在创建付款时捕获,而不是在执行付款时捕获,但是,希望这对其他人有帮助。
Paypal 注意:API 中提供更多信息可以避免很多麻烦。
关于c# - PayPal 沙盒执行调用返回错误 400 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53036396/