diff --git a/README.md b/README.md index 5d43628..5490fda 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,21 @@ wxpay.closeOrder({ out_trade_no:"xxxxxx"}, function(err, result){ console.log(result); }); ``` +退款接口 +```js +let params = { + appid: 'xxxxxxxx', + mch_id: '1234567890', + op_user_id: '商户号即可', + out_refund_no: '20140703'+Math.random().toString().substr(2, 10), + total_fee: '1', //原支付金额 + refund_fee: '1', //退款金额 + transaction_id: '微信订单号' } + +wxpay.refund(params, function(err, result){ + console.log('refund', arguments); +}); +``` ### 原生支付 (NATIVE) @@ -107,7 +122,14 @@ WeixinJSBridge.invoke( 商户服务端处理微信的回调(express为例) ```js var router = express.Router(); -var wxpay = require('weixin-pay'); +var WXPay = require('weixin-pay'); + +var wxpay = WXPay({ + appid: 'xxxxxxxx', + mch_id: '1234567890', + partner_key: 'xxxxxxxxxxxxxxxxx', //微信商户平台API密钥 + pfx: fs.readFileSync('./wxpay_cert.p12'), //微信商户平台证书 +}); // 原生支付回调 router.use('/wxpay/native/callback', wxpay.useWXCallback(function(msg, req, res, next){ diff --git a/lib/wxpay.js b/lib/wxpay.js index d0a49ed..969ac13 100644 --- a/lib/wxpay.js +++ b/lib/wxpay.js @@ -165,4 +165,28 @@ WXPay.mix('closeOrder', function(order, fn){ }, function(err, res, body){ util.parseXML(body, fn); }); -}); \ No newline at end of file +}); + + +WXPay.mix('refund',function(order, fn){ + if (!(order.transaction_id || order.out_refund_no)) { + fn(null, { return_code: 'FAIL', return_msg:'缺少参数' }); + } + + order.nonce_str = order.nonce_str || util.generateNonceString(); + util.mix(order, this.wxpayID); + order.sign = this.sign(order); + + request({ + url: "https://api.mch.weixin.qq.com/secapi/pay/refund", + method: "POST", + body: util.buildXML({xml: order}), + agentOptions: { + pfx: this.options.pfx, + passphrase: this.options.mch_id + } + }, function(err, response, body){ + util.parseXML(body, fn); + }); +}); +