Skip to content

Latest commit

 

History

History
235 lines (201 loc) · 5.99 KB

pay.MD

File metadata and controls

235 lines (201 loc) · 5.99 KB

微信支付文档

配置

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列表

scanCodePayment

刷卡支付 官方文档地址

刷卡支付

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: '',//【选传】场景信息
})


orderQuery

查询订单 官方文档地址

let callback = await weixinApi.angerPay.orderQuery({
    out_trade_no: 'lol1217752501201407033233368020',//【必传】订单号
})



> ❤注:以下方法和文档均继承自 wechat-pay 后续时间会继续完善。

brandPay

付钱

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不同。业务逻辑中应该自行维护之


前端通过

WeixinJSBridge.invoke('getBrandWCPayRequest', payargs, function(res){
  if(res.err_msg == "get_brand_wcpay_request:ok"){
    alert("支付成功");
    // 这里可以跳转到订单完成页面向用户展示
  }else{
    alert("支付失败,请重试");
  }
});

来呼出微信的支付界面

接收微信付款确认请求

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('...'))
   */
}));


refund

退款

let callback = await weixinApi.angerPay.refund({
  out_trade_no: "kfc001",
  out_refund_no: 'kfc001_refund',
  total_fee: 10 * 100,
  refund_fee: 10 * 100
})


接收退款确认请求

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('...'))
   */
}));


sendRedPacket

发红包

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'
})


redPacketQuery

查询红包状态

let callback = await weixinApi.angerPay.redPacketQuery({
  mch_billno: 'kfc002'
})


transfers

企业付款

let callback = await weixinApi.angerPay.transfers({
  partner_trade_no: 'kfc003',
  openid: '',
  check_name: 'NO_CHECK',
  amount: 10 * 100,
  desc: '',
  spbill_create_ip: ''
})

根据微信文档,当返回错误码为“SYSTEMERROR”时,一定要使用原单号重试,否则可能造成重复支付等资金风险。

downloadBill

查询历史订单

let callback = await weixinApi.angerPay.downloadBill({
  bill_date: "20140913",
  bill_type: "ALL"
})