付款成功后,如何使用Paypal API正确获取TransactionId

时间:2019-07-06 01:15:45

标签: javascript curl paypal axios

我正在网站上开发一个支付门户,我可以正确放置按钮并将我从api响应中获得的paymentId和PayerId存储在数据库中。但是我无法获取transactionId,这是我需要的那个。

因为这是我第一次这样做,所以我不知道我必须使用与api不同的服务来执行付款才能获得交易ID(https://api.paypal.com/v1/payments/payment/PAYID-XXXXXX/execute),所以现在我需要生成带有付款信息的csv,为了使其正确无误,我尝试为我存储在数据库中的每笔付款调用服务,最后显示transactionID。我真的不知道这是否是解决此问题的正确方法,但这是我在贝宝页面中找到的。

我首先尝试使用curl:

curl -v -X POST https://api.paypal.com/v1/payments/payment/PAYID-XXXXXXX/execute \
-H "Content-Type: application/json" \
-H "Authorization: Bearer XXXXXXXXXXXX" \
-d '{
  "payer_id": "XXXXXXXXXXX"
}'

具有正确的信息(我生成了我的不记名授权,所以这不是问题),PAYID和payerID是我数据库中的信息,我相信它们是正确的。因此,我第一次正确使用此方法时,它实际上是成功的,然后在Axios的我的react应用程序中实现,如下所示:

axios({
    method:'POST',
    url:"https://api.paypal.com/v1/payments/payment/" + list[index].pago.paymentId + "/execute",
    responseType:'json',
    headers: {
        "Content-Type" : "application/json",
        "Authorization" : "Bearer XXXXXXXXXXXXXXXXXXXXX"
    },
    data : {
        payer_id : list[index].pago.payerId
    }
}).then((response) => {
    console.log(response)
})

*请注意,“列表”是我的付款清单,我在pago中拥有所有信息。我已经检查了信息是否正确。

但是我收到以下错误:

{
    "name":"INVALID_RESOURCE_ID",
    "message":"The requested resource ID was not found",
    "information_link":"https://developer.paypal.com/docs/api/payments/#errors",
    "debug_id":"5614cdf9e45ca"
}

所以我认为这可能是与我的开发环境有关的问题,因此尝试使用Postman,但出现此错误:

{
    "name": "MALFORMED_REQUEST",
    "message": "The request JSON is not well formed.",
    "information_link": "https://developer.paypal.com/webapps/developer/docs/api/#MALFORMED_REQUEST",
    "debug_id": "62277ab8964fd"
}

但是我认为这是因为我无法正确提出请求。我将payerId放在“正文”中。

因此,在那之后,我再次尝试使用curl只是为了检查请求是否正常...现在我也遇到了与Axios相同的错误。

我有一种感觉,就是我在第一次获得成功之后就搞砸了,现在我不知道如何使它重新工作。

这种方法错误吗?执行服务是否只能使用一次?还有其他更好的方法吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

付款批准后,您应立即准确地致电执行服务1次。最好使用付款创建过程中返回的execute_url,而不是自己创建url。

响应是用来向付款人显示成功或失败消息的信息。响应中将包含一个带有交易ID的相关资源销售对象,您可以将其存储在数据库中以进行会计处理,因为这是一个持久ID。 (PAYID仅用于批准,不能永久保存。)

如果以后需要获取PAYID的详细信息,可以通过一个简单的GET(不是POST)请求来完成:https://developer.paypal.com/docs/api/payments/v1/#payment_get-但是,假设您存储了第一次执行的结果调用,对于大多数集成来说,这不是必需的,除非您有充分的理由这样做,否则我建议跳过此步骤。