cn-pay
Version:
a alipay wechat pay lib
314 lines (279 loc) • 11.1 kB
Markdown
## 微信
### 初始化实例
```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('验签失败'))
}
})
```
--------------------