贝宝沙盒执行呼叫,返回错误400错误请求

时间:2018-10-28 21:49:38

标签: c# paypal paypal-sandbox

在实现服务器Paypal集成时,POST创建调用可以正确进行https://api.sandbox.paypal.com/v1/payments/payment,并且响应对象与API中找到的匹配。服务器成功将结果返回给客户端,并且paypal.request.post的.then(res)函数的res.id为:PAY-76T970067E989851JLPLCMKA

用户授权付款后,客户端将请求发送到服务器的执行端点,其有效载荷为:

{
    "paymentID" : "PAY-76T970067E989851JLPLCMKA",
    "payerID" : "3LSD3Q8J7T3ZL"
}

然后,服务器将查询的有效负载重塑为Paypal的POST Execute端点,如下所示:

标题:

Content-Type = "application/json"
Authorization = "Bearer " + accessToken // checked not expired

和有效载荷为:

{"payer_id" : "3LSD3Q8J7T3ZL"}

帖子发到:

https://api.sandbox.paypal.com/v1/payments/payment/PAY-76T970067E989851JLPLCMKA/execute

这时,贝宝服务器响应:远程服务器返回错误:(400)错误的请求。

按照我所看到的形式,它符合此处概述的API要求:https://developer.paypal.com/docs/api/payments/v1/#payment_execute

作为旁注,我在自己的服务器上设置了一个端点,以检查提交给Paypal执行端点的标头和JSON有效负载。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

已解决:尽管在调用Paypal的Execute端点时返回了错误,但问题实际上出在“创建”有效内容上。 提交到“创建”端点的soft_descriptor属性必须是唯一的,就像invoice_number属性一样。这两个值都可以在Transaction对象中找到,如下所示:

https://developer.paypal.com/docs/api/payments/v1/#definition-transaction

确实,应该在创建付款时而不是在执行付款时捕获该错误,但是希望可以对其他人有所帮助。

贝宝(Paypal)注意:API中的更多信息会省去很多麻烦。

相关问题