- 调整
node
最低版本要求至12
,不再支持node10
; - 调整依赖
@thenorthmemory/multipart
及fast-xml-parser
; - 调整依赖
axios
版本到^1.8.2
; - 废弃并删除
Aes.encrypt
、Aes.decrypt
方法; - 废弃并删除其他标记
@deprecated
的方法及属性; - 调整
Aes.AesGcm.encrypt
、Aes.AesGcm.decrypt
参数顺序,遵循里式代换原则
; - 调整
APIv2
上已知请求无nonce_str
及返回无sign
内置化判断,优化return_code
及/或result_code
非SUCCESS
时无需验签; - 调整
APIv2
及APIv3
接口请求返回异常时,Promise.reject
从AssertError
改成标准AxiosError
,便于调试追踪问题; - 调整
new Wechatpay()
从单例到实例,并显式露出async [get|post|put|patch|delete]
方法,便于多商户实例应用使用; - 新增
wxpay.chain()
实例方法,便于源URI
末尾是delete
单词的另类链构型; - 新增
Hash.isKeyObject
、Hash.keyObjectFrom
、Rsa.isKeyObject
、Rsa.from[Pkcs8|Pkcs1|Spki]
静态方法; - 新增
Rsa.from('file://', 'private'|'public')
方式加载本地RSA公/私文件; - 优化
AxiosConfig<'secret'|privateKey'|'certs'>
在实例后类型从BinaryLike
调整成KeyObject
,增强安全性;
针对APIv2的主要优化内容
APIv2
的返回值验签与传输的载荷(XML
)无关,本次优化:
- 内置了「忽略无签(
sign
)可验」逻辑 - 「加强判断状态码(
return_code
)/业务结果(result_code
)非SUCCESS
情形」,当数据校核异常时,载荷数据均以解析后的对象形式抛送AxiosError
针对APIv3的主要优化内容
APIv3
的返回值验签与传输的载荷(JSON
/binary
)强相关,本次优化:
- 内置「按所请求的
URL
,自动忽略下载行为(binary
)的验签」逻辑,交由应用端自行验签,微信支付官方强烈建议商户对下载的数据进行验签 - 对于
HTTP状态码 20X
区间时的客户端异常AxiosError.response.data
标注为原始传输的载荷,有可能是JSON
字符串,也可能是空
字符串 - 对于
HTTP状态码 4XX/5XX
时的异常AxiosError.response.data
类型,其有可能是JSON
解析后的对象,也可能是html
字符串
注意:破坏性更新
从0.8
几乎无需过多调整代码即可升级到0.9
,仅在以下几个点上不兼容:
-
OpenAPI
chainable
链末尾的大写GET
/POST
/PUT
/PATCH
/DELETE
方法均已删除,请使用小写; -
标记为
@deprecated
的方法及属性均已删除,请参照之前的废弃提示用同等原值
代替; -
AesGcm
加解密,参数顺序进行了调整,微信支付官方的webhook
通知解密时需要格外注意,例如:
- AesGcm.decrypt(nonce, secret, ciphertext, aad);
+ AesGcm.decrypt(ciphertext, secret, nonce, aad);
- 单例模式注册转换器打印日志方式,调整为实例方式,并且
.client
Getter仅在根级实例有效,例如:
- Wechatpay.client.v2.defaults.transformRequest.push(data => (console.log(data), data))
+ wxpay.client.v2.defaults.transformRequest.push(data => (console.log(data), data))