使用带有nodejs的Paypal转账未成功



我正在尝试在nodejs中实现Paypal网关方法。我成功地从我的nodejs重定向到贝宝,当我点击支付时;错误":"响应状态:400〃;,付款失败。

下面详细介绍了我的API及其响应。

paypal.configure({
'mode': 'sandbox', //sandbox or live
'client_id': 'ATXsRtel_YoAQHVIwP4Z_bmX3VkL1n1N_fJ6FH2os0GynozBJo-Oler8wFVvXzoPpNwbfCAYFvCL76Ke',
'client_secret': 'EAwUmjDRpC-fqz_Fcs262MKrdMDltXJnWiA- 
N6gURWcJq1N9IpwzISfcCMLNHzXFJ_38YLQXG3jtUK8a'
});

发布req.body的Api并获取返回的url

Router.post('/Pay',(req,res)=>{
const create_payment_json = {
"intent": "sale",
"payer": {
"payment_method": "paypal"
},
"redirect_urls": {
"return_url": "http://localhost:7070/PayPal/PaymentSuccess",
"cancel_url": "http://localhost:7070/PayPal/PaymentCancel"
},
"transactions": [{
"item_list": {
"items": [{
"name": "ball",
"sku": "001",
"price": "25.00",
"currency": "USD",
"quantity": 1
}]
},
"amount": {
"currency": "USD",
"total": "25.00"
},
"description": "Testing Product"
}]
};
paypal.payment.create(create_payment_json, function (error, payment) {
if (error) {
res.json({
Message:'Un Approved',
Error:error.message
})
} else {
payment.links.map(_AllLinks=>{
if(_AllLinks.rel === 'approval_url'){
res.json({
Message:'Approved',
Url:_AllLinks.href
})
}
})
}
});
})

获取payerID 的例程

Router.get('/PaymentSuccess',(req,res)=>{
let payerId = req.query.PayerID;
let paymentId = req.query.paymentId;
console.log({
payerId:payerId,
paymentId:paymentId
});
let execute_payment_json = {
"payer_id" : payerId,
"transaction" : [{
"amount":{
"currency":"USD",
"total":"25.00"
}
}]
}
paypal.payment.execute(paymentId,execute_payment_json, function(error,payment){
if(error){
res.json({
Error:error.message,
Message:error
})
}else {
res.json({
Result:payment
})
}
})

})

Router.get('/PaymentCancel',(req,res)=>{
res.json({
Result:'Cancelled'
})
})

我收到的回复和付款都没有成功。

// 20210504063330
// http://localhost:7070/PayPal/PaymentSuccess?paymentId=PAYID-MCIKIRQ60G27157PA787072M&token=EC- 
9EU01414K39004833&PayerID=GFYGLAXW36YPW
{
"Error": "Response Status : 400",
"Message": {
"response": {
"name": "VALIDATION_ERROR",
"message": "Invalid request - see details",
"debug_id": "cfeb4eab621c7",
"details": [
{
"field": "/transaction",
"location": "body",
"issue": "MALFORMED_REQUEST_JSON"
}
],
"links": [

],
"httpStatusCode": 400
},
"httpStatusCode": 400
}
}

v1/支付REST API已弃用。请改用当前的v2/结账/订单API。

最好的集成不使用重定向,并通过上下文中的批准在后台加载您的网站。


在您的服务器上创建两条路线,一条用于"创建订单",另一个用于"捕获订单",记录在此处。这些路由应该只返回JSON数据(不返回HTML或文本(。后一个在返回(特别是purchase_units[0].payments.captures[0].id,PayPal交易ID(之前,应该(一旦成功(将付款详细信息存储在您的数据库中

将这两条路线与以下审批流配对:https://developer.paypal.com/demo/checkout/#/pattern/server

最新更新