上一扒讲到的,从设计初是按照URL.pathname
切分出实体entity做属性树扩展,map服务端服务接口;重构完后,再写测试用例的时候,竟然发现了有如下“变态”用法,这不得不也得分享出来,以供絮叨。
再提一次树
以目标函数 [Function: /v2/pay/micropay]
为例,这里有一种更简洁的构建方式,即Object.property
方式构建,可以把层叠树平展展成类似一层key/value
结构,树构建代码如下:
// 实例化不表了,这里直接以wxpay代指实例化handler
wxpay['v3/pay/transactions/native']
wxpay['v3/pay/transactions/id/{transaction_id}']
wxpay['v3/pay/transactions/out-trade-no/{out_trade_no}']
wxpay['v3/pay/partner/transactions/native']
wxpay['v3/marketing/busifavor/users/{openid}/coupons/{coupon_code}/appids/{appid}']
wxpay['v3/marketing/favor/stocks/{stock_id}/use-flow']
wxpay['v3/marketing/partnerships/build']
wxpay['v3/marketing/favor/media/image-upload']
wxpay['v2/pay/micropay']
wxpay['v2/risk/getpublickey']
wxpay['v2/secapi/pay/refund']
wxpay['v2/mmpaymkttransfers/promotion/transfers']
wxpay['v2/mmpaymkttransfers/promotion/paywwsptrans2pocket']
wxpay['v2/mmpaymkttransfers/sendworkwxredpack']
// ...
;console.info(wxpay)
打印出的结构如下:
[Function (anonymous)] {
'v3/pay/transactions/native': [Function: /v3/pay/transactions/native],
'v3/pay/transactions/id/{transaction_id}': [Function: /v3/pay/transactions/id/{transaction_id}],
'v3/pay/transactions/out-trade-no/{out_trade_no}': [Function: /v3/pay/transactions/out-trade-no/{out_trade_no}],
'v3/pay/partner/transactions/native': [Function: /v3/pay/partner/transactions/native],
'v3/marketing/busifavor/users/{openid}/coupons/{coupon_code}/appids/{appid}': [Function: /v3/marketing/busifavor/users/{openid}/coupons/{coupon_code}/appids/{appid}],
'v3/marketing/favor/stocks/{stock_id}/use-flow': [Function: /v3/marketing/favor/stocks/{stock_id}/use-flow],
'v3/marketing/partnerships/build': [Function: /v3/marketing/partnerships/build],
'v3/marketing/favor/media/image-upload': [Function: /v3/marketing/favor/media/image-upload],
'v3/bill/tradebill': [Function: /v3/bill/tradebill],
'v3/billdownload/file': [Function: /v3/billdownload/file],
'v2/pay/micropay': [Function: /v2/pay/micropay],
'v2/risk/getpublickey': [Function: /v2/risk/getpublickey],
'v2/secapi/pay/refund': [Function: /v2/secapi/pay/refund],
'v2/mmpaymkttransfers/promotion/transfers': [Function: /v2/mmpaymkttransfers/promotion/transfers],
'v2/mmpaymkttransfers/promotion/paywwsptrans2pocket': [Function: /v2/mmpaymkttransfers/promotion/paywwsptrans2pocket],
'v2/mmpaymkttransfers/sendworkwxredpack': [Function: /v2/mmpaymkttransfers/sendworkwxredpack]
}
毫无疑问,这种方式结构看起来相对更简洁一些,相应地,编程语法糖,可以这么写了~
APIv3 Native下单
wxpay['v3/pay/transactions/native']({
/*文档参数放这里就好*/
})
.then(({data: {code_url}}) => console.info(code_url))
.catch(console.error)
APIv3 查询订单
wxpay['v3/pay/transactions/id/{transaction_id}'].get({
params: {mchid: '1230000109'},
transaction_id: '1217752501201407033233368018'
})
.then(({data}) => console.info(data))
.catch(console.error)
APIv3 关单
wxpay['v3/pay/transactions/out-trade-no/{out_trade_no}']({
mchid: '1230000109'
}, {
out_trade_no: '1217752501201407033233368018'
}
)
.then(({status, statusText}) => console.info(status, statusText))
.catch(console.error)
APIv3 对账单下载及解析
const assert = require('assert')
const {Hash: {sha1}} = require('wechatpay-axios-plugin')
wxpay['v3/bill/tradebill'].get({
params: {
bill_date: '2021-02-12',
bill_type: 'ALL',
}
}).then(({data: {download_url, hash_value}}) => wxpay['v3/billdownload/file'].get({
params: (new URL(download_url)).searchParams,
signed: hash_value,
responseType: 'arraybuffer',
})).then(res => {
assert(sha1(res.data.toString()) === res.config.signed, 'verify the SHA1 digest failed.')
console.info(Formatter.castCsvBill(res.data))
}).catch(console.error)
APIv2 付款码(刷卡)支付
wxpay['v2/pay/micropay']({
appid: 'wx8888888888888888',
mch_id: '1900000109',
nonce_str: Formatter.nonce(),
sign_type: 'HMAC-SHA256',
body: 'image形象店-深圳腾大-QQ公仔',
out_trade_no: '1217752501201407033233368018',
total_fee: 888,
fee_type: 'CNY',
spbill_create_ip: '8.8.8.8',
auth_code: '120061098828009406',
})
.then(res => console.info(res.data))
.catch(console.error)
现金红包
wxpay['v2/mmpaymkttransfers/sendredpack']({
nonce_str: Formatter.nonce(),
mch_billno: '10000098201411111234567890',
mch_id: '10000098',
wxappid: 'wx8888888888888888',
send_name: '鹅企支付',
re_openid: 'oxTWIuGaIt6gTKsQRLau2M0yL16E',
total_amount: 1000,
total_num: 1,
wishing: 'HAPPY BIRTHDAY',
client_ip: '192.168.0.1',
act_name: '回馈活动',
remark: '会员回馈活动',
scene_id: 'PRODUCT_4',
})
.then(res => console.info(res.data))
.catch(console.error)
企业付款到零钱
wxpay['v2/mmpaymkttransfers/promotion/transfers']({
appid: 'wx8888888888888888',
mch_id: '1900000109',
partner_trade_no: '10000098201411111234567890',
openid: 'oxTWIuGaIt6gTKsQRLau2M0yL16E',
check_name: 'FORCE_CHECK',
re_user_name: '王小王',
amount: 10099,
desc: '理赔',
spbill_create_ip: '192.168.0.1',
nonce_str: Formatter.nonce(),
})
.then(res => console.info(res.data))
.catch(console.error)
企业付款到银行卡-获取RSA公钥
这个用法,是测试用例发掘出来的,注意请求带了第二个参数 {baseURL:'https://fraud.mch.weixin.qq.com'}
wxpay['v2/risk/getpublickey']({
mch_id: '1900000109',
sign_type: 'MD5',
nonce_str: Formatter.nonce(),
}, {
baseURL: 'https://fraud.mch.weixin.qq.com'
})
.then(res => console.info(res.data))
.catch(console.error)
发放企业红包
wxpay['v2/mmpaymkttransfers/sendworkwxredpack']({
mch_billno: '123456',
wxappid: 'wx8888888888888888',
sender_name: 'XX活动',
sender_header_media_id: '1G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu9V5w7o8K0',
re_openid: 'oxTWIuGaIt6gTKsQRLau2M0yL16E',
total_amount: 1000,
wishing: '感谢您参加猜灯谜活动,祝您元宵节快乐!',
act_name: '猜灯谜抢红包活动',
remark: '猜越多得越多,快来抢!',
mch_id: '1900000109',
nonce_str: Formatter.nonce(),
})
.then(res => console.info(res.data))
.catch(console.error)
这么搞下去。。。还愁啥对接啊!一致开发体验,尽在: https://github.com/TheNorthMemory/wechatpay-axios-plugin
https://github.com/TheNorthMemory/wechatpay-axios-plugin
请问使用您这个插件,怎样创建微信小程序订单?