简介
随着移动支付的发展,微信支付已经成为许多移动端商业应用中的重要支付方式。而作为前端工程师,我们通常需要和后端工程师一起协作,实现微信支付的整个流程。而 npm 包 wxpay-sdk 就是一款方便快捷地实现微信支付流程的工具。
wxpay-sdk 是 Node.js 的微信支付 SDK。通过它,你可以快速地完成微信支付流程并接收支付结果,实现前端与后端的交互。
本篇教程将详细介绍 wxpay-sdk 的使用方法,帮助你快速了解微信支付的流程,实现自己的支付功能。
准备工作
在使用 wxpay-sdk 前,你需要先准备好以下工作:
- 注册微信支付商户账号并完成微信支付商户认证。
- 安装 Node.js 环境。
安装 wxpay-sdk
在项目根目录下执行以下命令安装 wxpay-sdk:
npm install wxpay-sdk
使用 wxpay-sdk
下面我们将通过一个小示例来展示如何使用 wxpay-sdk。
创建支付订单
我们首先要创建一个支付订单,然后将订单信息发送至后台,由后台生成预支付订单并返回预支付订单信息,最后前端使用预支付订单信息调起微信支付。
// www.javascriptcn.com code example
const WXPay = require('wxpay-sdk');
// 初始化 WXPay 实例
const wxpay = new WXPay({
appid: 'your appid',
mch_id: 'your mch_id',
key: 'your key',
pfx: fs.readFileSync('path/to/your/pfx'),
notify_url: 'your notify_url'
});
// 订单信息
const order = {
body: 'test',
out_trade_no: '123456',
total_fee: 1,
spbill_create_ip: '127.0.0.1',
trade_type: 'JSAPI',
openid: 'your openid'
};
// 统一下单,生成预支付订单信息
wxpay.createUnifiedOrder(order, (err, result) => {
if (err) {
console.error(err);
return;
}
// 发送预支付订单信息至后台
// ...
});其中,appid、mch_id、key 分别为商户的微信公众号 appid、商户号和商户支付密钥。pfx 为商户的证书。notify_url 为接收微信支付结果的回调地址。
order 为订单信息,包括订单名称、订单号、订单金额、客户端 IP 地址、支付方式等等。其中,openid 指的是用户的 openid,将用于调起微信支付界面。
使用 wxpay.createUnifiedOrder 方法生成预支付订单信息。wxpay.createUnifiedOrder 方法接收订单信息和回调函数,回调函数则会返回预支付订单信息,包括预支付订单号、预支付交易会话标识等等。
调起微信支付
我们将预支付订单信息发送至后台并成功获取到预支付订单信息后,就可以使用该信息调起微信支付了。在这里,我们使用微信 JSAPI 支付,通过前端 JSAPI 调起微信支付界面,让用户完成支付。
// www.javascriptcn.com code example
// 调起微信支付
wx.chooseWXPay({
timestamp: result.timeStamp,
nonceStr: result.nonceStr,
package: 'prepay_id=' + result.prepay_id,
signType: 'MD5',
paySign: result.sign,
success: (res) => {
// 支付成功
},
fail: (res) => {
// 支付失败
}
});在这段代码中,我们通过 wx.chooseWXPay 方法调起微信支付界面,其中 result 为预支付订单信息。timestamp、nonceStr、package、signType 和 paySign 分别为预支付订单信息中的时间戳、随机字符串、预支付订单号、签名类型和签名信息。
当用户完成支付后,可以通过 success 回调函数获取支付成功的信息;当支付失败时,则通过 fail 回调函数获取支付失败的信息。
总结
通过本篇教程,我们了解了如何使用 npm 包 wxpay-sdk 实现微信支付的功能,并通过示例代码展示了具体的实现方法。如果你有需要实现微信支付的需求,可以尝试使用 wxpay-sdk 来完成你的功能开发。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/600671188dd3466f61ffe722