我爱编程

Node.js微信支付V3开发

2016-11-22  本文已影响0人  飞翔008

最近由于需要用Node.js开发微信支付模块,顺便写一下微信支付的过程。首先要安装Node.js,npm, Express,模板引擎用EJS或者Pug(Jade),我选择简洁风格的EJS,个人不喜欢Pug(Jade)的语法。用express-generator生成完工程以后就可以开始了。微信支付接口文档可以在微信商户平台开发者文档找到。npm上的weixin-pay或者node-weixin-pay可以支持微信支付。

一:介绍

微信支付流程可以参考微信商户平台开发者文档,一共有四种支付方式刷卡支付公众号支付扫码支付App支付,我们要用的是公众号支付和扫码支付。先来实现扫码支付。

二:扫码支付

商户支付回掉URL,生成二维码规则形式为

weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX

其中XXXXX为商户需要填写的内容,可以参考官方的生成二维码规则

1: 调用函数

function onBridgeReady() {
  WeixinJSBridge.invoke('getBrandWCPayRequest', {
    "appId":  "wx2421b1c4370ec43b", // 公众号名称,由商户传入
    "timeStamp": " 1395712654", // 时间戳,自1970年以来的秒数
    "nonceStr":  "e61463f8efa94090b1f366cccfbbb444", // 随机串
    "package":  "prepay_id=u802345jgfjsdfgsdg888",
    "signType":  "MD5", // 微信签名方式
    "paySign":  "70EA570631E4BB79628FBCA90534C63FF7FADD89" // 微信签名
    },
    function(res) {
      // 使用以上方式判断前端返回,微信团队郑重提示: 
      // res.err_msg将在用户支付成功后返回
      // ok,但并不保证它绝对可靠。
      if (res.err_msg == "get_brand_wcpay_request: ok" ) {
        ;
      }
    });
  }

  if (typeof WeixinJSBridge == "undefined") {
    if (document.addEventListener) {
       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
    } else if (document.attachEvent) {
      document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
      document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
    }
  } else {
    onBridgeReady();
  }

2: 返回JSON

{
  "appId": "wx2421b1c4370ec43b", // 公众号名称,由商户传入     
  "timeStamp":" 1395712654", // 时间戳,自1970年以来的秒数     
  "nonceStr": "e61463f8efa94090b1f366cccfbbb444", // 随机串     
  "package": "prepay_id=u802345jgfjsdfgsdg888",     
  "signType": "MD5", // 微信签名方式:
  "paySign": "70EA570631E4BB79628FBCA90534C63FF7FADD89" // 微信签名
}

3: 输入XML

<xml>
  <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
  <attach><![CDATA[支付测试]]></attach>
  <bank_type><![CDATA[CFT]]></bank_type>
  <fee_type><![CDATA[CNY]]></fee_type>
  <is_subscribe><![CDATA[Y]]></is_subscribe>
  <mch_id><![CDATA[10000100]]></mch_id>
  <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
  <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
  <out_trade_no><![CDATA[1409811653]]></out_trade_no>
  <result_code><![CDATA[SUCCESS]]></result_code>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
  <sub_mch_id><![CDATA[10000100]]></sub_mch_id>
  <time_end><![CDATA[20140903131540]]></time_end>
  <total_fee>1</total_fee>
  <trade_type><![CDATA[JSAPI]]></trade_type>
  <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
</xml>

4: 支付成功

上一篇下一篇

猜你喜欢

热点阅读