nodejs实现支付宝app支付-异步通知结果验签

直接上代码

    var crypto = require("crypto");
//1. 提前获取参数中的sign与sign_type,然后删除原来json中的这两个参数
    let sign = response.sign;
    let sign_type = response.sign_type;//RSA2
    delete response.sign;
    delete response.sign_type;
 //2. 字典排序,并对一级value可进行url_encoding
    let keys = Object.keys(response).sort();
    let params = [];
    for (let i = 0; i < keys.length; i++) {
        let v = keys[i];
        params.push(v+"="+decodeURIComponent(response[v]));
    }
    let str = params.join("&");
    //3. 获取支付宝支付公钥,并拼上开头与结尾
    let public_key="-----BEGIN PUBLIC KEY-----"+"\r\n"
    +"【支付宝公钥】"  //此非应用公钥
    +"\r\n"+"-----END PUBLIC KEY-----";
    //4. 根据sign_type 判断验签方式
    let rsatype = "";
    if (sign_type==="RSA") {
        rsatype = "RSA-SHA1";
    }else if(sign_type==="RSA2"){
        rsatype = "RSA-SHA256";
    }else{
        throw new Error('未知的签名方式' + sign_type);
    }
    //5. 执行验签
    let verify = crypto.createVerify(rsatype);
    verify.update(str);
    let result = verify.verify(public_key,sign,"base64");
    console.log("验签结果"+result);

版权声明:本文为weixin_43639981原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。