多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 公众号支付(JSAPI) ## out_trade_no生成 ~~~ function _get_date_string () { var date = moment().format('YYYY MM DD HH mm ss'); return date.split(' ').join('_'); } function _get_out_trade_no () { return _get_date_string () + "" + Math.random().toString().substr(2, 10); } ~~~ 测试方法 ~~~ function pay_h5(){ var ordor_id = _get_out_trade_no (); alert(ordor_id) $.get('/wechats/pay_h5?id=o12hcuKXjejDFUwxMgToaGtjtqf4&order_id=' + ordor_id + '&body=1111&detail=222222&fee=1&cb_url=/wechats/pay_calllback/'+ ordor_id, function(data){ var r = data.data; WeixinJSBridge.invoke('getBrandWCPayRequest', r, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok"){ alert("支付成功"); // 这里可以跳转到订单完成页面向用户展示 }else{ alert("支付失败,请重试"); } }); }); } ~~~ ## 限制频率 ~~~ npm i -S moa-middleware-rate-cache ~~~ way 1: ~~~ var rate_cache = require('moa-middleware-rate-cache'); var r = new rate_cache(redis, 'xxxxx_key', 40); ~~~ 参数 * redis, 传入redis对象 * 'xxxxx_key', 在redis里缓存的key * 40(秒)缓存时间 way 2: ~~~ var rate_cache = require('moa-middleware-rate-cache'); var r = new rate_cache(redis, 'xxxxx_key2222'); ~~~ 参数 * redis, 传入redis对象 * 'xxxxx_key', 在redis里缓存的key * 默认缓存时间是30秒 - ## 对账单接口 ### 支付成功的回调 ~~~ wxpay.createUnifiedOrder({ body: '扫码支付测试', out_trade_no: '20140703'+Math.random().toString().substr(2, 10), total_fee: 1, spbill_create_ip: '192.168.2.210', notify_url: 'http://wxpay_notify_url', trade_type: 'NATIVE', product_id: '1234567890' }, function(err, result){ console.log(result); }); ~~~ #### 支付结果异步通知 ~~~ 商户服务端处理微信的回调(express为例) // 原生支付回调 router.use('/wxpay/native/callback', wxpay.useWXCallback(function(msg, req, res, next){ // msg: 微信回调发送的数据 })); // 支付结果异步通知 router.use('/wxpay/notify', wxpay.useWXCallback(function(msg, req, res, next){ // 处理商户业务逻辑 // res.success() 向微信返回处理成功信息,res.fail()返回失败信息。 res.success(); })); ~~~ #### 手动对账单 查询订单 ~~~ // 通过微信订单号查 wxpay.queryOrder({ transaction_id:"xxxxxx" }, function(err, order){ console.log(order); }); // 通过商户订单号查 wxpay.queryOrder({ out_trade_no:"xxxxxx" }, function(err, order){ console.log(order); }); ~~~