要从PayU支付网关获取支付成功后的响应,你需要在发起支付请求时设置一个回调URL(也称为webhook URL或回传URL)
以下是如何设置回调URL以及处理支付成功响应的步骤:
httpPOST /rest/v1/transactions HTTP/1.1
Host: api.payu.com
Content-Type: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
{
"merchantPosId": "YOUR_MERCHANT_POS_ID",
"description": "Payment for order 123",
"currencyCode": "USD",
"amount": 19.99,
"buyer": {
"email": "buyer@example.com",
"firstName": "John",
"lastName": "Doe"
},
"callbackUrl": "https://yourserver.com/payu_callback",
"continueUrl": "https://yourserver.com/continue_after_payment",
...
}
以下是一个处理PayU回调通知的Node.js(Express)示例:
javascriptconst express = require('express');
const bodyParser = require('body-parser');
const crypto = require('crypto');
const app = express();
app.use(bodyParser.json());
app.post('/payu_callback', (req, res) => {
// 获取PayU发送的数据
const payuData = req.body;
// 验证签名
const signature = payuData.signature;
delete payuData.signature;
const stringifiedData = Object.keys(payuData)
.sort()
.map((key) => `${key}=${payuData[key]}`)
.join('|');
// 使用你在PayU平台获取的API密钥生成签名
const yourApiKey = 'YOUR_API_KEY';
const expectedSignature = crypto
.createHash('sha256')
.update(stringifiedData + yourApiKey)
.digest('hex');
if (signature === expectedSignature) {
// 签名有效,处理支付成功逻辑
console.log('Payment succeeded:', payuData);
// 发送响应,告诉PayU你已经处理了回调
res.status(200).send('OK');
} else {
// 签名无效,可能是欺诈请求
console.log('Invalid signature:', signature);
// 发送错误响应
res.status(400).send('Bad Request');
}
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
注意:确保你的回调URL是安全且可靠的,以防止欺诈行为。在处理回调通知时,始终验证签名并检查请求中的所有数据。
没有搜到相关的文章