链式动态参数化的微信支付APIv2&v3' Smart Develop Kit
好久没有写博客了,这两天刚把 wechatpay-axios-plugin 做了一遍更新,记录一下“暴力”重构过程。
上一版本的SDK,集合了XML交换介质的APIv2接口,对v2的接口调用,存在诸多不便,一直想优化来着,懒病缠身。。。一直没啥动力;近期有小伙伴给提了个 #10 在进行订单查询的时候,订单号不能更新 问题,为了解决这个链式调用动态参数赋值污染问题,顺手就给把APIv2也给完美地链了:
目标接口pathname
映射成资源树如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
v2 ├── mmpaymkttransfers │ └── sendredpack ├── pay │ ├── micropay │ └── refundquery ├── secapi │ ├── mch │ │ └── querysubdevconfig │ └── pay │ └── refund v3 ├── certificates ├── bill │ └── tradebill ├── ecommerce │ ├── fund │ │ └── withdraw │ └── profitsharing │ └── orders └── marketing └── busifavor └── users └── {openid} └── coupons └── {coupon_code} └── appids └── {appid} |
比较上一版的SDK,这一版本去除了 entities
及 withEntities
对象,直接使用 Functon.name
作为存贮并延展资源树节点的上下级标识,这个Function
同时默认为HTTP POST
方法对象,并且隐式绑定了HTTP DELETE/GET/POST/PUT/PATCH
方法,使实例化的资源树结构更简洁(洁癖),去除调试信息上的 [Function: ]
label 之后,几乎就和上述资源树一模一样了!
console.info(wxpay)
|
|
编码书写方式有如下约定:
- 请求
URI
作为级联对象,可以轻松构建请求对象,例如/v3/pay/transactions/native
即自然翻译成v3.pay.transactions.native
; - 每个
URI
所支持的HTTP METHOD
,即作为 请求对象的末尾执行方法,例如:v3.pay.transactions.native.post({})
; - 每个
URI
有中线(dash)分隔符的,可以使用驼峰camelCase
风格书写,例如:merchant-service
可写成merchantService
,或者属性风格,例如v3['merchant-service']
; - 每个
URI
.pathname 中,若有动态参数,例如business_code/{business_code}
可写成business_code.$business_code$
或者属性风格书写,例如business_code['{business_code}']
,抑或直接按属性风格,直接写参数值也可以,例如business_code['2000001234567890']
; - 建议
URI
按照PascalCase
风格书写,TS Definition
已在路上(还有若干问题没解决),将是这种风格,代码提示将会很自然; - SDK内置的
/v2
对象,其特殊标识为APIv2级联对象,之后串接切分后的pathname
,如/v2/pay/micropay
即以XML形式请求远端接口; - 每个级联对象默认为HTTP
POST
函数,其同时隐式内置GET/POST/PUT/PATCH/DELETE
操作方法链,支持全大写及全小写(未来有可能会删除)两种编码方式,说明见变更历史
;
初始化
|
|
付款码(刷卡)支付
|
|
关单API
|
|
核心构造类去掉注释,也就几十行代码如下:
|
|
好吧,这可能是我所写的最“暴力”的代码了。。。打个记号~嘿嘿~
文章作者 James
上次更新 2021-02-28