微信小程序开发-微信支付功能【WxMaService 获取openid,WxPayService建微信订单,接收微信支付异步通知回...
微信小程序开发-微信支付功能
前言
在微信小程序开发中,微信支付是必不可少的功能之一。通过微信支付,用户可以轻松地完成在线支付,提高了交易的流畅性和安全性。在本文中,我们将详细描述如何实现微信支付功能,包括获取openid、建微信订单、接收微信支付异步通知回调等。
前提
* 对小程序开发有一定的基础* 小程序已发布使用* 已开通微信支付,关联商户号1. 获取openid
首先,我们需要获取用户的openid。openid是微信为每个用户生成的一个唯一标识符,可以用于区分不同用户。
在小程序中,我们可以通过 `wx.login()` 接口来获取用户的openid。这个接口会返回一个包含openid和session_key的对象。
```javascriptwx.login({
success: function (res) {
if (res.code) {
// 获取openid var openid = res.code;
console.log('openid:', openid);
} else {
console.log('获取openid失败!');
}
},
fail: function () {
console.log('登录失败!');
}
});
```
2. 建微信订单
在用户点击支付按钮后,我们需要建一个微信订单。这个订单包含了交易的基本信息,如商品名称、价格等。
我们可以通过 `WxMaService` 的 `createOrder()` 方法来建微信订单。
```javascriptconst WxMaService = require('wx-ma-service');
const wxmaService = new WxMaService({
appId: 'your-app-id',
mchId: 'your-mch-id',
key: 'your-key'
});
// 建微信订单wxmaService.createOrder({
body: '测试商品',
totalFee:1,
tradeType: 'JSAPI',
spbillCreateIp: '127.0.0.1',
notifyUrl: ' => {
console.log('微信订单创建成功!');
const prepayId = res.prepay_id;
// 使用prepayId进行支付});
```
3. 接收微信支付异步通知回调
在用户完成支付后,微信会向我们的服务器发送一个异步通知回调。这个回调包含了交易的结果,如成功或失败等。
我们需要接收这个回调,并处理相应的逻辑。
```javascript// 接收微信支付异步通知回调app.use('/notify', (req, res) => {
const { signature, timestamp, nonce, paySign } = req.query;
// 验证签名 if (!verifySignature(signature, timestamp, nonce, paySign)) {
console.log('签名验证失败!');
return res.status(401).send('签名验证失败!');
}
const { tradeType, prepayId, transaction_id } = req.query;
// 处理交易结果 if (tradeType === 'JSAPI') {
// 使用prepayId进行支付 wxmaService.orderQuery({
transaction_id: transaction_id,
out_trade_no: prepayId }).then((res) => {
console.log('交易结果:', res);
// 处理交易结果 });
}
return res.status(200).send('OK!');
});
// 验证签名function verifySignature(signature, timestamp, nonce, paySign) {
const str = `${timestamp}&${nonce}&${paySign}`;
const sha1 = crypto.createHash('sha1');
sha1.update(str);
return signature === sha1.digest('hex');
}
```
总结
在本文中,我们详细描述了如何实现微信支付功能,包括获取openid、建微信订单、接收微信支付异步通知回调等。通过这些步骤,我们可以轻松地完成在线支付,并提高交易的流畅性和安全性。
参考
* 微信小程序开发文档: WxMaService: crypto: