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等。金额判断逻辑可以根据你的实际需求进行调整。

回到顶部