Skip to content

快速开始

安装

$ npm install wechatpay-axios-plugin

下载平台公钥

NOTE

2024年Q3,微信支付官方开启了「平台公钥」平替「平台证书」方案,初始化所需的参数仅需配置上 微信支付公钥ID微信支付公钥 即完全兼容支持,CLI/API下载 微信支付平台证书 已不是一个必要步骤,可略过。 微信支付公钥ID微信支付公钥 均可在 微信支付商户平台 -> 账户中心 -> API安全 查看及/或下载。

下载平台证书

下载命令行需额外安装依赖 $ npm install --no-save yargs,然后执行如下命令:

bash
$ ./node_modules/.bin/wxpay crt \
-m merchantId \
-s merchantCertificateSerial \
-f /path/to/merchant/apiclient_key.pem \
-k APIv3KeyString \
-o .

提供正确的商户号商户API证书序列号商户API私钥文件地址APIv3密钥,执行后,屏幕输出样例:

The WeChatPay Platform Certificate#0
  serial=7132d72a03e93cddf8c03bbd1f37eedf********
  notBefore=Wed, 22 Apr 2020 01:43:19 GMT
  notAfter=Mon, 21 Apr 2025 01:43:19 GMT
  Saved to: ./wechatpay_7132d72a03e93cddf8c03bbd1f37eedf********.pem
You may confirm the above infos again even if this library already did(by Rsa.verify):
	openssl x509 -in ./wechatpay_7132d72a03e93cddf8c03bbd1f37eedf********.pem -noout -serial -dates

./wechatpay_7132d72a03e93cddf8c03bbd1f37eedf********.pem 即为 微信支付平台证书 文件。

重要提示

当下载证书后,屏显有几条证书信息,就在应用中配置certs几条,尤其是在新旧平台证书交替灰度时,需要把新旧证书都配上,应用才不会出现事故。

应用代码

初始化

js
const { 
Wechatpay
} =
require
('wechatpay-axios-plugin');
const {
readFileSync
} =
require
('fs');
// 商户号,支持「普通商户/特约商户」或「服务商商户」 const
merchantId
= '190000****';
// 「商户API证书」的「证书序列号」 const
merchantCertificateSerial
= '3775B6A45ACD588826D15E583A95F5DD********';
// 从本地文件中加载「商户API私钥」,用于生成请求的签名 const
merchantPrivateKeyFilePath
= '/path/to/merchant/apiclient_key.pem';
const
merchantPrivateKeyInstance
=
readFileSync
(
merchantPrivateKeyFilePath
);
// 「微信支付平台证书」的「平台证书序列号」 // 可以从「微信支付平台证书」文件解析,也可以在 商户平台 -> 账户中心 -> API安全 查询到 const
platformCertificateSerial
= '7132D72A03E93CDDF8C03BBD1F37EEDF********';
// 从本地文件中加载「微信支付平台证书」,可由内置的CLI工具下载到,用来验证微信支付应答的签名 const
platformCertificateFilePath
= '/path/to/wechatpay/certificate.pem';
const
onePlatformPublicKeyInstance
=
readFileSync
(
platformCertificateFilePath
);
// 从本地文件中加载「微信支付平台公钥」,用来验证微信支付应答的签名 const
platformPublicKeyFilePath
= '/path/to/wechatpay/publickey.pem';
const
twoPlatformPublicKeyInstance
=
readFileSync
(
platformPublicKeyFilePath
);
// 「微信支付平台公钥」的「平台公钥ID」 // 需要在 商户平台 -> 账户中心 -> API安全 查询 const
platformPublicKeyId
= 'PUB_KEY_ID_01142321349124100000000000********';
// 构造一个 APIv2 & APIv3 客户端实例 const
wxpay
= new
Wechatpay
({
mchid
:
merchantId
,
serial
:
merchantCertificateSerial
,
privateKey
:
merchantPrivateKeyInstance
,
certs
: {
[
platformCertificateSerial
]:
onePlatformPublicKeyInstance
,
[
platformPublicKeyId
]:
twoPlatformPublicKeyInstance
,
}, // 使用APIv2(密钥32字节)时,需要至少设置 `secret`字段
secret
: 'your_merchant_secret_key_string',
// // 接口不要求证书情形,例如仅收款merchant对象参数可选
merchant
: {
cert
:
readFileSync
('/path/to/merchant/apiclient_cert.pem'),
key
:
merchantPrivateKeyInstance
,
// 或者配置如下配置项 // passphrase: 'your_merchant_id', // pfx: readFileSync('/your/merchant/cert/apiclient_cert.p12'), }, });

Native下单

js
wxpay.v3.pay.transactions.native.post({})

详细见这里

查询订单

js
// _placeholder_ 语法糖会转换成 '{placeholder}' 格式
wxpay.v3.pay.transactions.id._transaction_id_.get({ 
transaction_id
})

详细见这里

关闭订单

js
// $placeholder$ 语法糖会转换成 '{placeholder}' 格式
wxpay.v3.pay.transactions.outTradeNo.$out_trade_no$.close.post({}, { 
out_trade_no
})

详细见这里

申请退款

js
wxpay.v3.refund.domestic.refunds.post({})

详细见这里

查询单笔退款

js
// _placeholder_ 语法糖会转换成 '{placeholder}' 格式
wxpay.v3.refund.domestic.refunds._out_refund_no_.get({ 
out_refund_no
})

详细见这里

Released under the MIT License. (SITEMAP)