我正在开发一个需要使用Paypal付款的系统,但当我返回成功付款的url时,收到订单的所有数据以将付款状态更新为Approved时,它会在我的成功付款代码Controller(Route(下方生成一个错误
`
let data = request.all()
let payerId = data.paymentId
let paymentId = data.paymentId
paypal.configure({
'mode': 'sandbox', //sandbox or live
'client_id': "",
'client_secret':''
});
let finished = {
"payer_id": payerId,
"transactions": [{
"amount": {
"currency": "BRL", // BRL
"total": "1.00"
}
}]
}
paypal.payment.execute(paymentId, finished,(error,payment)=>{
if(error){
console.log(error)
}else{
console.log(JSON.stringify(payment))
}
})
`
错误:
response: {
name: 'VALIDATION_ERROR',
details: [ [Object] ],
message: 'Invalid request - see details',
information_link: 'https://developer.paypal.com/docs/api/payments/v1/#error-VALIDATION_ERROR',
debug_id: '7c5d3e9690beb',
httpStatusCode: 400
},
httpStatusCode: 400
}
let payerId = data.paymentId
payerId不是paymentId,但此错误不会成为当前API的问题。
您似乎正在使用不推荐使用的代码,例如不推荐使用PayPal-node-SDK,该代码使用不推荐的v1/支付API。不要这样做。
相反,请按照当前的"集成结账"指南,在服务器上创建两条路线,一条用于"创建订单",一条为"捕获订单"(请参阅"添加和修改代码"中的可选步骤5(。您可以选择在服务器上使用@paypal/checkout服务器sdk。这两个路由都应该只返回JSON数据(没有HTML或文本(。在第二条路线中,当捕获API成功时,您应将其结果支付详细信息存储在数据库中(特别是purchase_units[0].payments.captures[0].id
,即PayPal交易ID(,并在将返回的JSON转发给前端呼叫者之前立即执行任何必要的业务逻辑(如发送确认电子邮件或预订产品(。
将这2条路线与前端审批流配对:https://developer.paypal.com/demo/checkout/#/pattern/server
不要使用任何重定向,重定向是为旧网站。