UNPKG

cn-pay

Version:

a alipay wechat pay lib

314 lines (279 loc) 11.1 kB
## 微信 ### 初始化实例 ```javascript const Pay = require('cn-pay') const config = { app_id: 'app_id', // 公众号appid appid: 'appid', // app的appid miniapp_id: 'miniapp_id', // 小程序的appid mch_id: 'mch_id', // 商户Id key: 'key', // 商户密钥 notify_url: 'notify_url', // 通知地址 return_url: 'return_url', // 跳转地址 pfx: fs.readFileSync('<location-of-your-apiclient-cert.p12>') // 可选, 退款等情况时需要用到 } const wechat = Pay.wechat(config) ``` ### 支付订单 #### 一、公众号网页支付 ##### 例子 ```javascript const order = { out_trade_no: '0000001', body: 'subject-测试', total_fee: 1, // 直接以元为单位 openid: 'onkVf1FjWS5SBxxxxxxxx', // openid spbill_create_ip: 'spbill_create_ip' // 客户端ip } const result = await wechat.mp(order) // 此方法返回Promise ``` ##### 成功返回 成功后`result`的值为类似以下结果: ```javascript { appId: 'wx1c198f2cad228bee', package: 'prepay_id=wx20180115094744ab552e649c0025010603', timeStamp: '1515980861', nonceStr: 'sqax2vmws3', signType: 'MD5', paySign: 'D79BD1F0E4B12D1DFBA010E5DAE77DFE' } ``` ##### 订单配置参数 **所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,`trade_type`, `appid`, `sign` 等参数。** 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1),查看「请求参数」一栏。 ------------------------- #### 二、手机网页(h5)支付 ##### 例子 ```javascript const order = { out_trade_no: '0000001', body: 'subject-测试', total_fee: 1, // 直接以元为单位 spbill_create_ip: 'spbill_create_ip' // 客户端ip } const result = await wechat.wap(order) // 此方法返回Promise ``` ##### 成功返回 成功后`result`的值为类似以下结果: ```javascript { return_code: 'SUCCESS', return_msg: 'OK', appid: 'wx2421b1c4370ec43b', mch_id: '10000100', nonce_str: 'IITRi8Iabbblz1Jc', sign: '7921E432F65EB8ED0CE9755F0E86D72F', result_code: 'SUCCESS', prepay_id: 'wx201411101639507cbf6ffd8b0779950874', trade_type: 'MWEB', mweb_url: 'https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2016121516420242444321ca0631331346&package=1405458241&redirect_url=return_url' } ``` ##### 订单配置参数 **所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,`trade_type`, `appid`, `sign` 等参数。** 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1),查看「请求参数」一栏。 -------------------- #### 三、App支付 ##### 例子 ```javascript const order = { out_trade_no: '0000001', body: 'subject-测试', total_fee: 1, // 直接以元为单位 spbill_create_ip: 'spbill_create_ip' // 客户端ip } const result = await wechat.app(order) // 此方法返回Promise ``` ##### 成功返回 成功后`result`的值为类似以下结果: ```javascript { appid: 'wx1c198g4ad228bee', partnerid: '1460444802', prepayid: 'wx20180115100912c407d7dbf70493145721', package: 'Sign=WXPay', noncestr: 'kuo1z1qmy3m', timestamp: '1515982149', sign: '5C6BE57C28EE8B3BA950BF6E799A443F' } ``` ##### 订单配置参数 **所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,`trade_type`, `appid`, `sign` 等参数。** 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1),查看「请求参数」一栏。 -------------------- #### 四、小程序支付(未实现) ##### 例子 ```javascript const order = { out_trade_no: '0000001', body: 'subject-测试', total_fee: 1, // 直接以元为单位 openid: 'onkVf1FjWS5SBxxxxxxxx', // openid spbill_create_ip: 'spbill_create_ip' // 客户端ip } const result = await wechat.miniapp(order) // 此方法返回Promise ``` ##### 成功返回 成功后`result`的值为类似以下结果: ```javascript // 未实现 ``` ##### 订单配置参数 **所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,`trade_type`, `appid`, `sign` 等参数。** 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1),查看「请求参数」一栏。 -------------------- #### 五、刷卡/条码支付 ##### 例子 ```javascript const order = { out_trade_no: '0000001', body: 'subject-测试', total_fee: 1, // 直接以元为单位 auth_code: '1354804793001231564897', spbill_create_ip: 'spbill_create_ip' // 客户端ip } const result = await wechat.pos(order) // 此方法返回Promise ``` ##### 成功返回 成功后`result`的值为类似以下结果: 请根据`err_code` = `USERPAYING`,做定时查询,以确保真正支付成功 ```javascript { return_code: 'SUCCESS', return_msg: 'OK', appid: 'wx1c298f2cfg928bee', mch_id: '1483272902', nonce_str: 'F05AC0JnYL9QYX50', sign: 'F0B7082E9E57BFB590D58CE7C0B3E25A', result_code: 'FAIL', err_code: 'USERPAYING', err_code_des: '需要用户输入支付密码' } ``` ##### 订单配置参数 **所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,`trade_type`, `appid`, `sign` 等参数。** 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10&index=1),查看「请求参数」一栏。 -------------------- #### 六、扫码支付 ##### 例子 ```javascript const order = { out_trade_no: '0000001', body: 'subject-测试', total_fee: 1, // 直接以元为单位 spbill_create_ip: 'spbill_create_ip' // 客户端ip } const result = await wechat.scan(order) // 此方法返回Promise ``` ##### 成功返回 成功后`result`的值为类似以下结果: ```javascript { return_code: 'SUCCESS', return_msg: 'OK', appid: 'wx1c298f2cfg928bee', mch_id: '1483272902', nonce_str: 'zqdbp8QhMA7lSpfP', result_code: 'SUCCESS', prepay_id: 'wx20180116101212517d3471fa0624769084', trade_type: 'NATIVE', code_url: 'weixin://wxpay/bizpayurl?pr=JxsXSLO' } ``` ##### 订单配置参数 **所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,`trade_type`, `appid`, `sign` 等参数。** 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1),查看「请求参数」一栏。 -------------------- #### 七、账户转账/企业付款(未实现) ##### 例子 ```javascript const order = { partner_trade_no: '0000001', // 商户订单号 openid: 'openid', // 收款人openid check_name: 'NO_CHECK', // NO_CHECK:不校验真实姓名\FORCE_CHECK:强校验真实姓名 amount: 1, // 直接以元为单位 desc: '账户提现', // 付款说明 spbill_create_ip: 'spbill_create_ip' // 客户端ip } const result = await wechat.transfer(order) // 此方法返回Promise ``` ##### 成功返回 成功后`result`的值为类似以下结果: ```javascript // 未实现 ``` ##### 订单配置参数 **所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,`trade_type`, `appid`, `sign` 等参数。** 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2),查看「请求参数」一栏。 -------------------- ### 订单退款(未实现) #### 例子 ```javascript const order = { out_trade_no: '1514027114', out_refund_no: '1516000270202', total_fee: 1, // 单位元 refund_fee: 1, // 单位元 refund_desc: '退款测试' } const result = await wechat.refund(order) // 此方法返回Promise // APP/小程序退款 // 如果您需要退款 APP/小程序 的订单,请传入第二个字符串参数APP 或 MINIAPP const result = await wechat.refund(order, 'APP') // APP订单 此方法返回Promise const result = await wechat.refund(order, 'MINIAPP') // 小程序订单 此方法返回Promise ``` #### 订单配置参数 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4),查看「请求参数」一栏。 ---------------- ### 查询订单 #### 例子 ```javascript const order = { out_trade_no: '1514027114' } // 或者直接传递字符串 // const order = '1514027114' const result = await wechat.find(order) // 此方法返回Promise // APP/小程序查询 // 如果您需要查询 APP/小程序 的订单,请传入第二个字符串参数APP 或 MINIAPP const result = await wechat.find(order, 'APP') // APP订单 此方法返回Promise const result = await wechat.find(order, 'MINIAPP') // 小程序订单 此方法返回Promise ``` #### 订单配置参数 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2),查看「请求参数」一栏。 ------------------- ### 取消订单 **微信官方无此 `API`,请调用 `close` 关闭订单。** ### 关闭订单 #### 例子 ```javascript const order = { out_trade_no: '1514027114' } // 或者直接传递字符串 // const order = '1514027114' const result = await wechat.close(order) // 此方法返回Promise // APP/小程序关闭 // 如果您需要关闭 APP/小程序 的订单,请传入第二个字符串参数APP 或 MINIAPP const result = await wechat.close(order, 'APP') // APP订单 此方法返回Promise const result = await wechat.close(order, 'MINIAPP') // 小程序订单 此方法返回Promise ``` #### 订单配置参数 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_3),查看「请求参数」一栏。 -------------------- ### 异步通知的验签 #### 例子 ```javascript app.post('/notify', (req, res) => { if (wechat.verify(req.body)) { // 一句话验签,就这么简单 console.log('微信支付异步验签成功:') // 业务逻辑 res.send(wechat.success()) // 可以调用success或fail方法 返回结果 } else { console.log('微信支付异步验签失败:') res.send(wechat.fail('验签失败')) } }) ``` --------------------