直接上代码
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版权协议,转载请附上原文出处链接和本声明。