node 微信扫码支付(二)

版权声明:本文为博主原创文章,未经博主容许不得转载。javascript

node 后台生成二维码和支付成功的回调

生成二维码

在微信服务器成功返回code_url等信息以后,咱们须要进一步将code_url生成二维码;固然后在前端用一些第三方的插件也能生成,单是相对来讲,不如在后台生成二维码更加安全,微信的官方文档也是推荐在后台生成。
为了方便,咱们仍是在wxpayRouter.js中实现该部分代码前端

/**
*须要的依赖请参考[node微信扫码支付(一)](https://segmentfault.com/a/1190000011540768)
**/
wxPayRouter.get("/create_qrcode",function(req, res ,next) {
    var qrcode_url = req.query.code_url;
    /**
    ** 在这里建议加上用户的身份信息验证,而后再返回二维码,避免多人同时发出请求,形成二维码错乱
    **/
    var qrcode = qr.image(code_url,{size:100});
    res.type('png');
    qrcode.pipe(res);
})

以上是后端生成二维码,这里咱们采用qr-image这个包,固然还有其余的包,可是须要配置phtyon等环境,至关麻烦,在这里我将获取code_url和create qrcode作成了两个路由,固然若是嫌麻烦,能够作成一个路由。
在前端的话须要在img中调用该接口java

/**
** 前端请求order接口以后得到的code_url以后;
**/
<img src="/wxpay/create_qrcode?code_url=(请求order接口以后得到的code_url)">

到此为止,用户已经能够扫码完成支付,将钱充进商户的帐户中了。node

处理支付成功后返回的信息

在统一下单中,notify_url 这个字段填写的地址,就是咱们支付成功后微信回调的地址,小伙伴们注意啦,这里有一个大坑,在收到支付成功的消息后,若是没有给微信回复相应的消息后,微信就会不停的轮询,回调咱们的接口;咱们仍是在wxpayRouter.js完成这个接口express

wxPayRouter.post('/orderpay', function (req, res, next) {
    var body = req.body;
    var payInfo = body.xml;
    var attach  = payInfo.attach; // 这里是咱们的附加信息,

    console.log(payInfo);
    async.auto({

        /**
        **在这里建议从业务上也处理一下微信的这个轮询回调;入库的话,避免数据重复入库等
        **
        **/
       
    }, function (err, result) {
         /**
         **处理完数据以后,就能够给微信发送消息了,告诉微信,支付成功的消息已经收到
         **/
        var resxml = {
            return_code: 'SUCCESS',
            return_msg: 'OK'
        }
        var body = jsontoxml(resxml);
        body = '<xml>' + body + '</xml>';
        res.end(body);
    });
});

在这里还会有一个坑,微信是数据流的形式返回信息,用express接收不到微信返回的消息,因此咱们须要在app.js中配置一下;json

var bodyParser = require("body-parser");
require("body-parser-xml")(bodyParser);
app.use(bodyParser.xml({
  limit: "2MB",   
  xmlParseOptions: {
    normalize: true,     
    normalizeTags: true,
    explicitArray: false 
  },
  verify: function(req, res, buf, encoding) {
    if(buf && buf.length) {
      req.rawBody = buf.toString(encoding || "utf8");
    }
  }
}));

到这里,微信支付从获取code_url,到生成二维码,处理微信的支付成功结果,整个流程都已跑通,微信支付到此告一段落了。segmentfault

相关文章
相关标签/搜索