简介
wxpay-server 是一款 Node.js 的 npm 包,用于实现微信支付的服务器端功能。它提供了以下功能:
- 微信支付 API 的封装,可用于创建订单、查询订单等功能;
- 支付结果回调接口的处理,包括请求支付结果、验证签名等功能。
使用 wxpay-server 可以方便地实现微信支付功能,不需要编写繁琐的支付接口和支付结果处理代码。本文将详细介绍如何使用 wxpay-server 实现微信支付。
准备工作
使用 wxpay-server 前需要准备以下内容:
- 微信支付 API 的密钥(key)和商户号(mch_id),可在微信支付商户平台获取;
- Node.js 环境,在命令行窗口输入
node --version
确认已安装; - IDE 或文本编辑器,本文以 Visual Studio Code 为例,可前往 https://code.visualstudio.com/ 下载。
安装 wxpay-server
安装了 Node.js 环境后,可以使用 npm 包管理工具安装 wxpay-server。在命令行窗口输入如下命令:
npm install wxpay-server
安装完成后,即可在项目中引入并使用 wxpay-server。
创建订单
使用 wxpay-server 创建订单的步骤如下:
- 创建 wxpay 实例:
const wxpay = require('wxpay-server')({ app_id: '小程序/公众号 appid', // 必填,小程序或公众号 appid mch_id: '商户号', // 必填,微信支付商户号 key: 'API 密钥', // 必填,微信支付 API 密钥 notify_url: '回调地址' // 必填,支付结果回调接口地址 });
- 调用 createOrder 方法创建订单:
const result = await wxpay.createOrder({ body: '商品描述', // 选填,商品描述 out_trade_no: '商户订单号', // 必填,商户订单号 total_fee: '订单总金额', // 必填,订单总金额,单位为分 openid: '用户 openid' // 必填,用户 openid });
createOrder 方法的返回值 result 包含以下属性:
- prepay_id:预支付交易会话标识,用于后续调用支付 API;
- timestamp:时间戳;
- nonce_str:随机字符串。
- 使用 prepay_id 调用微信支付 API 完成支付。
查询订单
使用 wxpay-server 查询订单的步骤如下:
创建 wxpay 实例,同创建订单。
调用 queryOrder 方法查询订单:
const result = await wxpay.queryOrder('商户订单号');
queryOrder 方法返回的 result 包含订单的详细信息,如下:
- return_code:通信标识,表示通信状态;
- result_code:业务结果标识,表示业务状态;
- trade_state:交易状态;
- transaction_id:微信支付订单号;
- total_fee:订单总金额;
- openid:用户 openid。
支付结果回调处理
使用 wxpay-server 处理支付结果回调的步骤如下:
创建 wxpay 实例,同创建订单。
在 notify_url 上监听 POST 请求:
const http = require('http'); const server = http.createServer(async (request, response) => { const body = await wxpay.notify(request, response); console.log(body); // 处理支付结果回调 }); server.listen(3000);
- 在请求处理函数中处理支付结果回调,例如处理订单状态:
async function handleOrderStatus(body) { const { out_trade_no, transaction_id, result_code } = body; // 根据 out_trade_no 更新订单状态 console.log(`订单 ${out_trade_no} 已支付,微信支付订单号为 ${transaction_id}`); }
以上是使用 wxpay-server 处理微信支付的基本流程,具体的使用方法可参考 API 文档。本文的示例代码可在 GitHub 上获取 https://github.com/example/wxpay-server-demo。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600572c981e8991b448e8f5f