这可能是用来开发微信支付APIv3的NodeJS SDK中最好的一个

微信支付 文章 2020-06-19 13:18 2142 0 全屏看文

AI助手支持GPT4.0

原文作者是微信官方推荐的php SDK(https://github.com/wechatpay-apiv3)作者。不得不说这货很闲,在成熟的思维基础上又推出了nodejs版。而且很荣幸,他是我同事。

如下是他对nodejs版本的介绍:

微信支付官方提供了两个包,一个是Java版的,另一个是PHP版的。继上一篇无侵入地向官方PHP版提供了媒体文件上传功能之后,我就在想,NodeJS都已经到14.4版本了,应该有一个流行的js版的开发包吧。搜了一圈儿,发现几乎没有,遂动手花了大约两周闲暇时间,完整实现了微信支付APIv3的几乎所有功能,特别地对账单下载及处理,也算是填补并加强了官方包暂未实现的功能之一吧。有了这些成熟开发包的覆盖,包括官方包在内,现在是时候全面切换至微信支付APIv3版了。

项目以MIT许可证开源,使用请保留许可证说明。

Axios拦截器项目构造函数

主要功能

1. 使用Node原生代码实现微信支付APIv3的AES加/解密功能(aes-256-gcm with aad)

2. 使用Node原生代码实现微信支付APIv3的RSA加/解密、签名、验签功能(sha256WithRSAEncryption with RSA_PKCS1_OAEP_PADDING)

3. 大部分微信支付APIv3的HTTP GET/POST应该能够正常工作,依赖 Axios

4. 支持微信支付APIv3的媒体文件上传(图片/视频)功能,可选依赖 form-data

5. 支持微信支付APIv3的应答证书下载功能,依赖 commander, 使用手册如下

6. 支持微信支付APIv3的帐单下载及解析功能

安装

$ npm install wechatpay-axios-plugin

系统要求

NodeJS的原生crypto模块,自v12.9.0在 publicEncrypt 及 privateDecrypt 增加了 oaepHash 入参选项,本项目显式声明入参,本人不确定其在v12.9.0以下是否正常工作。所以Node的最低版本要求应该是v12.9.0.

万里长征第一步

微信支付APIv3使用了许多成熟且牛逼的接口设计(RESTful API with JSON over HTTP),数据交换使用非对称(RSA)加/解密方案,对上行数据要求(RSA)签名,对下行数据要求(RSA)验签。API上行所需的商户RSA私钥证书,可以由商户的超级管理员微信支付商户平台生成并获取到,然而,API下行所需的平台RSA公共证书只能从 /v3/certificates 接口获取(应答证书还经过了AES对称加密,得用 APIv3密钥才能解密)。本项目也提供了命令行下载工具,使用手册如下:

$ ./bin/certificateDownloader -h

命令行工具帮助文档

注:像其他通用命令行工具一样,-h --help 均会打印出帮助手册,说明档里的 指 必选参数,类型是字符串; [string] 指 可选字符串参数,默认值是 /temp(系统默认临时目录)

$ ./bin/certificateDownloader -m NUMERICAL -s HEXADECIAL -f apiclient_key.pem -k YOURAPIV3SECRETKEY -o .

命令行工具执行结果

注:提供必选参数且运行后,屏幕即打印出如上信息,提示证书序列号起、止格林威治(GMT)时间以及证书下载保存位置。

接口通讯要用 商户RSA私钥证书 签名及平台RSA公共证书验签,只有获取到了平台RSA公共证书,后续的其他接口才能正常应答验签,所谓“万里长征第一步”就在这里。本下载工具也无例外对应答内容,做了验签处理,技法“剑(qí)走(zhāo)偏(yín)锋(jì)“而已,即:用Axios的拦截器把下载的证书(AES解密)处理完后,立即用于验签。

得到证书之后,开发者需要把所得serial及wechatpay_HEXADECIALHEXADECIALHEXADECIAL.pem(文件流或者文本内容)组成 对,key为证书序列号,value为证书内容,传入项目构造函数的certs字段里。 其他接口使用就基本上没有啥问题了。

文档及示例在github及npm上README都有,也都是基本用法,没啥花活儿,祝开心。

最后附上文章地址:https://page.om.qq.com/page/OjTk-GbMjnXjBb3cKEeGqV4A0?source=omapp


-EOF-

AI助手支持GPT4.0


国内超级便宜服务器

摸鱼人热门新闻聚合

钻级赞助商 我要加入

开发者在线工具

第三方支付技术请加QQ群

相关文章
服务商模式下微信支付后关注服务商公众号功能取消了吗?还是暂时调整?
小程序接入微信支付显示已申请是什么回事?
button中使用了loading,当做子组件使用,父组件中出现了异常情况?
在主域里使用了async 库,使用微信开放数据域子域后,打包报错。
为什么有的服务商给商户开支付账户时,商家收款300以下免手续费呢?
随便看看
微信公众号免300认证教程 4955
小程序已经上线,作为管理员无法在小程序数据助手查看数据? 4072
小程序广告组件通过审核,但是小程序内没有显示广告? 4153
企业微信通讯录账号被管理员误/恶意删除,怎么办? 8018
问题? 7254
如何快速搭建抽奖助手小程序(无需代码知识) 5038
许涛 大哥在吗, 要解冻小程序的时候提示信息主体不一致, 能帮忙看下吗? 5993
小程序搜一搜全称搜索不显示 麻烦解决一下!谢谢 5511
我的小程序广告收款主体是个体工商户,每个月邮寄两次发票很是麻烦,我年底的时候打包邮寄一次可以么? 5206
如何解决渲染层网络错误Failed to load media? 16561