公众号支付(JSAPI)

out_trade_no生成

  1. function _get_date_string () {
  2. var date = moment().format('YYYY MM DD HH mm ss');
  3. return date.split(' ').join('_');
  4. }
  5. function _get_out_trade_no () {
  6. return _get_date_string () + "" + Math.random().toString().substr(2, 10);
  7. }

测试方法

  1. function pay_h5(){
  2. var ordor_id = _get_out_trade_no ();
  3. alert(ordor_id)
  4. $.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){
  5. var r = data.data;
  6. WeixinJSBridge.invoke('getBrandWCPayRequest', r, function(res){
  7. if(res.err_msg == "get_brand_wcpay_request:ok"){
  8. alert("支付成功");
  9. // 这里可以跳转到订单完成页面向用户展示
  10. }else{
  11. alert("支付失败,请重试");
  12. }
  13. });
  14. });
  15. }

限制频率

  1. npm i -S moa-middleware-rate-cache

way 1:

  1. var rate_cache = require('moa-middleware-rate-cache');
  2. var r = new rate_cache(redis, 'xxxxx_key', 40);

参数

  • redis, 传入redis对象
  • ‘xxxxx_key’, 在redis里缓存的key
  • 40(秒)缓存时间

way 2:

  1. var rate_cache = require('moa-middleware-rate-cache');
  2. var r = new rate_cache(redis, 'xxxxx_key2222');

参数

  • redis, 传入redis对象
  • ‘xxxxx_key’, 在redis里缓存的key
  • 默认缓存时间是30秒
    -

对账单接口

支付成功的回调

  1. wxpay.createUnifiedOrder({
  2. body: '扫码支付测试',
  3. out_trade_no: '20140703'+Math.random().toString().substr(2, 10),
  4. total_fee: 1,
  5. spbill_create_ip: '192.168.2.210',
  6. notify_url: 'http://wxpay_notify_url',
  7. trade_type: 'NATIVE',
  8. product_id: '1234567890'
  9. }, function(err, result){
  10. console.log(result);
  11. });

支付结果异步通知

  1. 商户服务端处理微信的回调(express为例)
  2. // 原生支付回调
  3. router.use('/wxpay/native/callback', wxpay.useWXCallback(function(msg, req, res, next){
  4. // msg: 微信回调发送的数据
  5. }));
  6. // 支付结果异步通知
  7. router.use('/wxpay/notify', wxpay.useWXCallback(function(msg, req, res, next){
  8. // 处理商户业务逻辑
  9. // res.success() 向微信返回处理成功信息,res.fail()返回失败信息。
  10. res.success();
  11. }));

手动对账单

查询订单

  1. // 通过微信订单号查
  2. wxpay.queryOrder({ transaction_id:"xxxxxx" }, function(err, order){
  3. console.log(order);
  4. });
  5. // 通过商户订单号查
  6. wxpay.queryOrder({ out_trade_no:"xxxxxx" }, function(err, order){
  7. console.log(order);
  8. });