一、引言
随着电子支付的快速发展,微信支付已成为线上线下交易的重要支付手段。为了提供更加安全、高效、便捷的支付体验,微信官方在2020年12月25日正式推出了微信支付v3版本。相较于旧版本v2,v3在接口设计、数据交互格式、加密算法等方面均进行了全面升级。由于官方文档主要支持Java和PHP,本文将介绍如何在Node.js和TypeScript中封装微信支付v3的API,并分享一些实践中的经验和心得。
二、微信支付v3版本概述
前言
微信官方在2020-12-25正式开放了v3版本的接口,相比较旧版本v2有了不少改变,例如:
-
遵循统一的Restful的设计风格
-
使用JSON作为数据交互的格式,不再使用XML
-
使用基于非对称密钥的SHA256-RSA的数字签名算法,不再使用MD5或HMAC-SHA256
-
不再要求HTTPS客户端证书
-
使用AES-256-GCM,对回调中的关键信息进行加密保护
由于官方文档只支持java和php,所以我在这里使用ts简单的封装了一个版本,支持在js或者ts中使用,后续会更加完善这个npm包,谢谢。
使用
yarn add wechatpay-node-v3@2.1.8
(也可以用npm,请加上版本号,使用正式版本)
import WxPay from 'wechatpay-node-v3'; // 支持使用require
import fs from 'fs';
import request from 'superagent';
const pay = new WxPay({
appid: '直连商户申请的公众号或移动应用appid',
mchid: '商户号',
publicKey: fs.readFileSync('./apiclient_cert.pem'), // 公钥
privateKey: fs.readFileSync('./apiclient_key.pem'), // 秘钥
});
# 这里以h5支付为例
try {
# 参数介绍请看h5支付文档 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_1.shtml
const params = {
appid: '直连商户申请的公众号或移动应用appid',
mchid: '商户号',
description: '测试',<