关于微信支付通知接口

2015-07-18 11:20:34

 关于通知接口的坑

  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');
            }
        }
    }
}


 至此 可以正常的适用了 也排除了安全隐患

你打算打赏多少钱呢?

打赏
(微信扫一扫)