返回
Node.js微信支付之扫码支付指南
前端
2023-09-19 21:46:58
前言
微信支付是微信推出的一项支付功能,用户可以在微信客户端上快速完成支付。微信支付非常方便快捷,深受广大用户的喜爱。在Node.js项目中集成微信支付非常简单,只需按照本文中的步骤操作即可。
创建订单
在用户发起支付请求之前,我们需要先创建一个订单。订单包含了商品的名称、价格、数量等信息。我们可以通过调用微信支付的统一下单接口来创建订单。
const { WechatPay } = require('wechat-pay');
// 初始化微信支付
const wechatPay = new WechatPay({
appId: 'YOUR_APP_ID',
mchId: 'YOUR_MCH_ID',
apiKey: 'YOUR_API_KEY',
secret: 'YOUR_SECRET',
});
// 创建订单
const order = {
body: '商品名称',
out_trade_no: '订单号',
total_fee: 100, // 单位为分
spbill_create_ip: '用户的IP地址',
trade_type: 'NATIVE', // 支付类型为扫码支付
};
wechatPay.createUnifiedOrder(order, (err, result) => {
if (err) {
console.error('创建订单失败:', err);
return;
}
// 获取二维码链接
const qrcodeUrl = result.code_url;
// 将二维码链接返回给前端,前端展示二维码给用户扫码支付
});
生成二维码
创建订单成功后,我们会得到一个二维码链接。这个二维码链接可以展示给用户,用户扫码后即可完成支付。
// 将二维码链接返回给前端,前端展示二维码给用户扫码支付
res.json({
qrcodeUrl: qrcodeUrl,
});
查询订单状态
在用户扫码支付后,我们需要定时查询订单状态,以便在用户支付成功后及时通知用户。我们可以通过调用微信支付的查询订单接口来查询订单状态。
// 定时查询订单状态
setInterval(() => {
wechatPay.queryOrder({
out_trade_no: '订单号',
}, (err, result) => {
if (err) {
console.error('查询订单状态失败:', err);
return;
}
// 订单状态为已支付
if (result.trade_state === 'SUCCESS') {
// 通知用户支付成功
res.json({
success: true,
message: '支付成功',
});
}
});
}, 1000); // 每隔1秒查询一次订单状态
处理支付成功后的通知
在用户支付成功后,微信支付会向我们的服务器发送一个支付成功通知。我们需要在服务器上处理这个通知,并做出相应的处理,例如将订单状态标记为已支付。
// 处理支付成功后的通知
app.post('/notify', (req, res) => {
const xml = req.rawBody;
// 解析XML数据
const parsedXml = xml2js.parseString(xml, { trim: true, explicitArray: false });
// 验证通知的合法性
if (!wechatPay.verifyNotify(parsedXml)) {
res.status(400).send('Invalid notify');
return;
}
// 订单号
const out_trade_no = parsedXml.out_trade_no;
// 将订单状态标记为已支付
Order.findOneAndUpdate({ out_trade_no }, { status: '已支付' }, (err, order) => {
if (err) {
console.error('将订单状态标记为已支付失败:', err);
return;
}
res.send('OK');
});
});
总结
本文详细讲解了如何在Node.js项目中集成微信支付的扫码支付功能。通过本文的讲解,读者可以轻松地在自己的项目中实现微信支付功能。