版权声明:本文为博主原创文章,未经博主许可不得转载。节点后台生成二维码,支付成功回调生成二维码。微信服务器成功返回code_url等信息后,我们需要进一步将code_url生成成二维码;相对来说,后台生成二维码更安全,微信官方文档也推荐后台生成。为了方便,我们仍然在wxpayRouter.js/中实现这部分代码***所需依赖,请参考【节点微信扫码支付(一)】(https://segmentfault.com/a/1190000011540768)**/wxPayRouter.get("/create_qrcode",function(req,res,next){varqrcode_url=req.query.code_url;/****这里建议添加用户身份信息验证,然后返回二维码代码避免多人同时发送请求,造成二维码混乱**/varqrcode=qr.image(code_url,{size:100});res.type('png');qrcode.pipe(res);})以上是后台生成二维码。这里我们使用qr-image包。当然还有其他的包,但是phtyon之类的环境配置还是比较麻烦的。这里我做了两条获取code_url和创建二维码的路由。当然嫌麻烦的话可以做成路由。如果是前端,需要在前端请求下单接口后得到的code_url后在img/****中调用该接口;**/至此,用户已经可以扫码完成支付,将钱打入商家账户。支付成功后返回的信息统一排序。notify_url字段填写的地址是我们支付成功后回调的地址。小伙伴们注意了,这里有个大坑。收到支付成功的消息后,如果微信没有回复,微信会一直轮询回调我们的接口;我们仍然在wxpayRouter.js中完成这个接口wxPayRouter.post('/orderpay',function(req,res,next){varbody=req.body;varpayInfo=body.xml;varattach=payInfo.attach;//这里是我们的attachinfo,console.log(payInfo);async.auto({/****in这里建议从业务的角度处理微信的轮询回调;如果存入仓库,避免数据重复存储等****/},function(err,result){/****数据处理完成后,会发消息给微信,告诉微信支付成功的消息已收到**/varresxml={return_code:'SUCCESS',return_msg:'OK'}varbody=jsontoxml(resxml);body=''+body+'';res.end(身体);});});这里会有一个坑,微信返回的信息是数据流的形式,微信返回的消息是express接收不到的,所以需要在app.js中配置;varbodyParser=require("body-parser");require("body-parser-xml")(bodyParser);app.use(bodyParser.xml({limit:"2MB",xmlParseOptions:{正常ize:true,normalizeTags:true,explicitArray:false},验证:function(req,res,buf,encoding){if(buf&&buf.length){req.rawBody=buf.toString(encoding||"utf8");}}}));至此,微信支付从获取code_url,到生成二维码,处理微信支付成功结果的全过程已经完成,微信支付告一段落