微信扫码支付是一种便捷的在线支付方式,用户通过扫描商户提供的二维码来完成支付。以下是实现微信扫码支付的基本概念和相关代码示例。
以下是一个简单的JavaScript示例,展示如何调用微信支付的统一下单接口并生成支付二维码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>微信扫码支付</title>
</head>
<body>
<button id="payButton">立即支付</button>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
document.getElementById('payButton').addEventListener('click', function() {
axios.post('/api/createPayOrder', { amount: 100 })
.then(response => {
const qrCodeUrl = response.data.qrCodeUrl;
// 这里可以使用第三方库生成二维码,例如qrcode.js
console.log('支付二维码URL:', qrCodeUrl);
})
.catch(error => {
console.error('创建订单失败:', error);
});
});
</script>
</body>
</html>
const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());
app.post('/api/createPayOrder', async (req, res) => {
const { amount } = req.body;
try {
// 调用微信支付统一下单接口
const response = await axios.post('https://api.weixin.qq.com/pay/unifiedorder', {
appid: 'YOUR_APP_ID',
mch_id: 'YOUR_MERCHANT_ID',
nonce_str: generateNonceStr(),
body: 'Test Payment',
out_trade_no: generateOutTradeNo(),
total_fee: amount,
spbill_create_ip: '127.0.0.1',
notify_url: 'YOUR_NOTIFY_URL',
trade_type: 'NATIVE'
}, {
headers: {
'Content-Type': 'application/xml'
}
});
const prepayId = parseResponseXml(response.data).prepay_id;
const qrCodeUrl = `weixin://wxpay/bizpayurl?pr=${prepayId}`;
res.json({ qrCodeUrl });
} catch (error) {
res.status(500).json({ error: '创建订单失败' });
}
});
function generateNonceStr() {
return Math.random().toString(36).substr(2, 15);
}
function generateOutTradeNo() {
return Date.now().toString() + Math.floor(Math.random() * 1000).toString();
}
function parseResponseXml(xml) {
// 解析XML响应的逻辑
// 这里可以使用第三方库如xml2js
return { prepay_id: '123456789' }; // 示例返回
}
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
希望这些信息对你有所帮助!如果有更多具体问题,欢迎继续咨询。
领取专属 10元无门槛券
手把手带您无忧上云