async function verifySignature(signature, body, nonce, timestamp) {
// 构建响应体中待签名数据
let buildSignMessage = timestamp
.concat('\n')
.concat(nonce)
.concat('\n')
.concat(body)
.concat('\n')
console.log('---buildSignMessage:',buildSignMessage)
return crypto.createVerify('RSA-SHA256')
.update(Buffer.from(buildSignMessage),'utf8')
.verify(public_key, Buffer.from(signature, 'base64'))
// .verify(public_key, signature, 'base64')
}
1,麻烦给一下你验证签名的详细步骤和数据。
2,参考https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/qian-ming-sheng-cheng进行逐步排查。
1、通过postman验证 public_key肯定是对的
2、想手动用openssl验证,但是把wechatpay-signature用base64解码出来是0字节
看官方的文档
$ openssl base64 -d -A <<< \ 'CtcbzwtQjN8rnOXItEBJ5aQFSnIXESeV28Pr2YEmf9wsDQ8Nx25ytW6FXBCAFdrr0mgqngX3AD9gNzjnNHzSGTPBSsaEkIfhPF4b8YRRTpny88tNLyprXA0GU5ID3DkZHpjFkX1hAp/D0fva2GKjGRLtvYbtUk/OLYqFuzbjt3yOBzJSKQqJsvbXILffgAmX4pKql+Ln+6UPvSCeKwznvtPaEx+9nMBmKu7Wpbqm/+2ksc0XwjD+xlvlECkCxfD/OJ4gN3IurE0fpjxIkvHDiinQmk51BI7zQD8k1znU7r/spPqB+vZjc5ep6DC5wZUpFu5vJ8MoNKjCu8wnzyCFdA=='> signature.txt
这个指令得到的signature.txt是0字节,
换成我自己的数据也是0字节,
虽然是base64解码出来是不可见字符,但也不应该是0字节啊