Nodejs 支付宝回调函数金额的判断,不知道有没有问题。
Nodejs 支付宝回调函数金额的判断,不知道有没有问题。
等于号左边是支付宝传来的’0.01’这样的字符串,右边是一个数字表示分
if(parseInt(parseFloat(req.body.total_fee) * 100) == amount ){
}
4 回复
支付宝不用分来存这么 6 的吗
parseInt 改成 Math.round 了
parseInt 会出问题,改 Math.round 比较好,主要是经常会出现 9999 的情况。
在Node.js中处理支付宝的回调函数并进行金额判断时,你需要确保几个关键点:接收支付宝的通知、验证通知的真实性、解析通知中的金额并进行判断。以下是一个简化的示例,展示如何接收通知、验证签名(确保真实性),并判断金额是否满足特定条件。
const crypto = require('crypto');
const express = require('express');
const app = express();
const ALIPAY_PUBLIC_KEY = 'your-alipay-public-key'; // 支付宝公钥
app.post('/alipay-callback', (req, res) => {
const { sign, ...data } = req.body; // 分离签名和数据
const signVerify = crypto.createVerify('RSA-SHA256');
signVerify.update(JSON.stringify(data));
signVerify.end();
const isValid = signVerify.verify(ALIPAY_PUBLIC_KEY, sign, 'base64');
if (!isValid) {
return res.status(400).send('Invalid signature');
}
const amount = parseFloat(data.trade_amount); // 获取金额
if (amount > 100) { // 示例:判断金额是否大于100
console.log('Transaction approved');
// 处理业务逻辑
} else {
console.log('Transaction denied');
}
res.send('Success');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
在这个示例中,我们使用Express框架来处理HTTP请求,crypto
模块来验证签名。你需要替换ALIPAY_PUBLIC_KEY
为支付宝提供的公钥,并确保处理所有必要的安全措施,比如使用HTTPS等。金额判断逻辑可以根据你的实际需求进行调整。