anger-wechat
Version:
236 lines (201 loc) • 6.37 kB
Markdown
# 微信支付文档
## 配置
```js
var AngerWechat = require('anger-wechat')
var weixinApi = new AngerWechat({
appId: '[your appId]', // appId
appSecret: '[your appSecret]', // appSecret
authUrl: 'http://www.test.cc/get-weixin-code.html', // 微信auth2.0授权公共页面
payment: { // 可选 如果需要支付模块的话
mchId: '123456',
partnerKey: '456789',
pfx: path.join(__dirname, 'apiclient_cert.p12'), //【可选】证书路径,不传大多接口掉不了
notifyUrl: '' // 【可选】微信支付接受到结果
}
})
// 支付挂载在 weixinApi.angerPay ...
```
## api列表
* `angerPay.scanCodePayment` <a href="#scancodepayment">刷卡支付</a>
* `angerPay.orderQuery` <a href="#orderQuery">查询订单</a>
* `angerPay.brandPay` <a href="#brandPay">付钱</a>
* `angerPay.refund` <a href="#refund">退款</a>
* `angerPay.sendRedPacket` <a href="#sendRedPacket">发红包</a>
* `angerPay.redPacketQuery` <a href="#redPacketQuery">查询红包状态</a>
* `angerPay.transfers` <a href="#transfers">企业付款</a>
* `angerPay.downloadBill` <a href="#downloadBill">查询历史订单</a>
### scanCodePayment
刷卡支付 <a href="https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10&index=1">官方文档地址</a>

```js
let callback = await weixinApi.angerPay.scanCodePayment({
body: '商品描述',//【必传】商品描述
out_trade_no: 'lol1217752501201407033233368020', //【必传】商户订单号
total_fee: 1, //【必传】收款价格,单位(分)
spbill_create_ip: '127.0.0.1',//【必传】终端IP
auth_code: '100000000000',//【必传】付款码
device_info: '',//【选传】设备号
sign_type: '',//【选传】签名类型
detail: '',//【选传】商品详情
attach: '',//【选传】附加数据
fee_type: '',//【选传】货币类型
goods_tag: '',//【选传】订单优惠标记
limit_pay: '',//【选传】指定支付方式
time_start: '',//【选传】交易起始时间
time_expire: '',//【选传】交易结束时间
scene_info: '',//【选传】场景信息
})
```
<br>
<br>
### orderQuery
查询订单 <a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2">官方文档地址</a>
```js
let callback = await weixinApi.angerPay.orderQuery({
out_trade_no: 'lol1217752501201407033233368020',//【必传】订单号
})
```
<br>
<br>
<hr>
> ❤注:以下方法和文档均继承自 <a href="https://github.com/supersheep/wechat-pay">wechat-pay</a> 后续时间会继续完善。
<hr>
### brandPay
付钱
```js
let callback = await weixinApi.angerPay.brandPay({
body: '吮指原味鸡 * 1',
attach: '{"部位":"三角"}',
out_trade_no: 'kfc' + (+new Date),
total_fee: 10 * 100,
spbill_create_ip: req.ip,
openid: req.user.openid,
trade_type: 'JSAPI'
})
```
注:
1. 页面的路径需要位于`支付授权目录`下
2. 由于每次呼出支付界面,无论用户是否支付成功,out_trade_no 都会失效(OUT_TRADE_NO_USED),所以这里使用timestamp保证每次的id不同。业务逻辑中应该自行维护之
<br>
<br>
前端通过
```javascript
WeixinJSBridge.invoke('getBrandWCPayRequest', payargs, function(res){
if(res.err_msg == "get_brand_wcpay_request:ok"){
alert("支付成功");
// 这里可以跳转到订单完成页面向用户展示
}else{
alert("支付失败,请重试");
}
});
```
来呼出微信的支付界面
### 接收微信付款确认请求
```javascript
app.use('<notifyUrl>', weixinApi.angerPay.middleware(initConfig).getNotify().done(function(message, req, res, next) {
var openid = message.openid;
var order_id = message.out_trade_no;
var attach = {};
try{
attach = JSON.parse(message.attach);
}catch(e){}
/**
* 查询订单,在自己系统里把订单标为已处理
* 如果订单之前已经处理过了直接返回成功
*/
res.reply('success');
/**
* 有错误返回错误,不然微信会在一段时间里以一定频次请求你
* res.reply(new Error('...'))
*/
}));
```
<br>
<br>
### refund
退款
```js
let callback = await weixinApi.angerPay.refund({
out_trade_no: "kfc001",
out_refund_no: 'kfc001_refund',
total_fee: 10 * 100,
refund_fee: 10 * 100
})
```
<br>
<br>
### 接收退款确认请求
```javascript
app.use('<notifyUrl>', weixinApi.angerPay.middleware(initConfig).getRefundNotify().done(function(message, req, res, next) {
var openid = message.openid;
var refund_order_id = message.out_refund_no;
var order_id = message.out_trade_no;
var attach = {};
try{
attach = JSON.parse(message.attach);
}catch(e){}
/**
* 查询订单,在自己系统里把订单标为已处理
* 如果订单之前已经处理过了直接返回成功
*/
res.reply('success');
/**
* 有错误返回错误,不然微信会在一段时间里以一定频次请求你
* res.reply(new Error('...'))
*/
}));
```
<br>
<br>
### sendRedPacket
发红包
```js
let callback = await weixinApi.angerPay.sendRedPacket({
mch_billno: 'kfc002',
send_name: '肯德基',
re_openid: '',
total_amount: 10 * 100,
total_num: 1,
wishing: '祝多多吃鸡',
client_ip: '',
act_name: '吃鸡大奖赛',
remark: '记得吐骨头',
scene_id: 'PRODUCT_1'
})
```
<br>
<br>
### redPacketQuery
查询红包状态
```js
let callback = await weixinApi.angerPay.redPacketQuery({
mch_billno: 'kfc002'
})
```
<br>
<br>
### transfers
企业付款
```js
let callback = await weixinApi.angerPay.transfers({
partner_trade_no: 'kfc003',
openid: '',
check_name: 'NO_CHECK',
amount: 10 * 100,
desc: '',
spbill_create_ip: ''
})
```
根据微信文档,当返回错误码为“SYSTEMERROR”时,一定要使用原单号重试,否则可能造成重复支付等资金风险。
<br>
<br>
### downloadBill
查询历史订单
```js
let callback = await weixinApi.angerPay.downloadBill({
bill_date: "20140913",
bill_type: "ALL"
})
```
<br>
<br>