└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # node-wxpay 2 | 微信支付 for node.js 3 | 4 | 5 | ## Installation 6 | ``` 7 | npm install node-wxpay 8 | ``` 9 | 10 | ## Usage 11 | 12 | 创建统一支付订单 13 | ```js 14 | 15 | var WXPay = require('node-wxpay'); 16 | 17 | var wxpay = WXPay({ 18 | appid: 'xxxxxxxx', 19 | mch_id: '1234567890', 20 | partner_key: 'xxxxxxxxxxxxxxxxx', 21 | pfx: fs.readFileSync('./wxpay_cert.p12'), 22 | }); 23 | 24 | //原生 扫码支付 25 | wxpay.createUnifiedOrder({ 26 | body: '扫码支付测试', 27 | out_trade_no: '20140703'+Math.random().toString().substr(2, 10), 28 | total_fee: 1, 29 | spbill_create_ip: '192.168.2.210', 30 | notify_url: 'http://wxpay_notify_url', 31 | trade_type: 'NATIVE', 32 | product_id: '1234567890' 33 | }, function(err, result){ 34 | console.log(result); 35 | }); 36 | 37 | 38 | ``` 39 | 40 | 查询订单 41 | ```js 42 | 43 | // 通过微信订单号查 44 | wxpay.queryOrder({ transaction_id:"xxxxxx" }, function(err, order){ 45 | console.log(order); 46 | }); 47 | 48 | // 通过商户订单号查 49 | wxpay.queryOrder({ out_trade_no:"xxxxxx" }, function(err, order){ 50 | console.log(order); 51 | }); 52 | ``` 53 | 54 | 关闭订单 55 | ```js 56 | wxpay.closeOrder({ out_trade_no:"xxxxxx"}, function(err, result){ 57 | console.log(result); 58 | }); 59 | ``` 60 | 61 | ### 原生支付 (NATIVE) 62 | **模式一**:提供一个生成支付二维码链接的函数,把url生成二维码给用户扫。 63 | ```js 64 | var url = wxpay.createMerchantPrepayUrl({ product_id: '123456' }); 65 | ``` 66 | 67 | 商户后台收到微信的回调之后,调用 createUnifiedOrder() 生成预支付交易单,将结果的XML数据返回给微信。 68 | 69 | [什么是模式一?](http://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4) 70 | 71 | **模式二**:直接调用 createUnifiedOrder() 函数生成预支付交易单,将结果中的 code_url 生成二维码给用户扫。 72 | 73 | [什么是模式二?]() 74 | 75 | ### 公众号支付 (JS API) 76 | 77 | 生成JS API支付参数,发给页面 78 | ```js 79 | 80 | wxpay.getBrandWCPayRequestParams({ 81 | openid: '微信用户 openid', 82 | body: '公众号支付测试', 83 | detail: '公众号支付测试', 84 | out_trade_no: '20150331'+Math.random().toString().substr(2, 10), 85 | total_fee: 1, 86 | spbill_create_ip: '192.168.2.210', 87 | notify_url: 'http://wxpay_notify_url' 88 | }, function(err, result){ 89 | // in express 90 | res.render('wxpay/jsapi', { payargs:result }) 91 | }); 92 | ``` 93 | 94 | 网页调用参数(以ejs为例) 95 | ```js 96 | WeixinJSBridge.invoke( 97 | "getBrandWCPayRequest", <%-JSON.stringify(payargs)%>, function(res){ 98 | if(res.err_msg == "get_brand_wcpay_request:ok" ) { 99 | // success 100 | } 101 | }); 102 | ``` 103 | 104 | ### 企业付款给用户 105 | 106 | ```js 107 | 108 | wxpay.createEnterprisePay({ 109 | openid: openid, 110 | desc: desc, 111 | partner_trade_no: '' + y + m + d +Math.random().toString().substr(2, 10), 112 | amount: amount * 100, 113 | spbill_create_ip: '180.76.133.56' 114 | }, function(err, result){ 115 | 116 | console.log('------企业付款-----'+JSON.stringify(result)); 117 | }); 118 | 119 | ``` 120 | ### 中间件 121 | 122 | 商户服务端处理微信的回调(express为例) 123 | 124 | ```js 125 | 126 | 127 | // 原生支付回调 128 | app.use('/wxpay/native/callback', wxpay.useWXCallback(function(msg, req, res, next){ 129 | // msg: 微信回调发送的数据 130 | })); 131 | 132 | // 支付结果异步通知 133 | app.use('/wxpay/notify', wxpay.useWXCallback(function(msg, req, res, next){ 134 | // 处理商户业务逻辑 135 | 136 | // res.success() 向微信返回处理成功信息,res.fail()返回失败信息。 137 | res.success(); 138 | })); 139 | 140 | ``` 141 | --------------------------------------------------------------------------------