关于通知接口的坑
3.37里并没有告诉 用那些参数进行验证sign 鹅厂的文档向来写的不好
npm上的一些包也没有验证 这个会存在安全隐患 我自己写了个方法 仅供大家吐槽
var md5 = require('MD5'); function notify_url(body) { if (body.xml) { var sign = body.xml.sign[0]; var sign1=body.xml; delete sign1.sign; var url= _toQueryString(sign1)+"&key="+config.wxpayconfig.partnerKey// 微信支付秘钥 ; var ret =md5(url).toUpperCase();//tool.getMd5(url).toUpperCase(); if (ret == sign) { return true; } else { return false; } } else { return false; } } function _toQueryString(object) { return Object.keys(object).filter(function (key) { return object[key] !== undefined && object[key] !== ''; }).sort().map(function (key) { return key + "=" + object[key]; }).join("&"); }
其中body 是post 过来的xml文件 以上便是验证方法
下面我说说处理逻辑
function weixinindex(req, res) { // var body = req.body; if(body.xml.return_code=="SUCCESS") { var total_fee = body.xml.total_fee[0]; var transaction_id = body.xml.transaction_id[0]; var ret =wxbank.notify_url(body); var out_trade_no =body.xml.out_trade_no[0]; console.log(out_trade_no,out_trade_no.split('_')[0]); var openid = body.xml.openid[0]; if (ret == true) //验证通过 操作数据库 { //处理自己的逻辑 if(支付成功) { //支付成功 res.send('success'); } else{ //失败 res.send('fail'); } } } }
至此 可以正常的适用了 也排除了安全隐患
你打算打赏多少钱呢?
(微信扫一扫)