签名生成官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3
签名验证分为如下几步:
1.与服务端确认上传的签名内容(即上传参数key=value)以及加密方式.并且要到商户平台设置的密钥key.
2.生成随机字符串nonceStr.
3.将消野明要上拿告传的参数,对参数按照key=value的格式,并按照参数名ASCII字典序排序,比如:
假设传送的参数如下:
appid: wxd930ea5d5a258f4f
mch_id: 10000100
device_info: 1000
body: test
nonce_str: ibuaiVcKdpRxkhJA
则:stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA"
4.拼接API密钥,例脊皮如:stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d" //注:key为商户平台设置的密钥key
5.对拼接秘钥后的字符串进行加密并且转换为大写.(加密方式自定)
6.将参数以及加密得到的sign一起上传给服务端进行验证.
7.查看服务端返回结果.
谢谢大家~
1.下单的签名方式使用MD5方式
2.利用下单获取到的prepay_id,来进行调起支付阶段的paySign的签名
3.如果提示签名验证失败:
①首先检查你的5个参数是否完整:timeStamp,nonceStr,package,signType,paySign
②signType 必须是MD5,官方demo不是MD5,改为MD5,这也是大坑,当然我自己用python 写的时候直接用的MD5
③在做paySign签名的时候,需要6个参数,上述5个参数去掉paySign(不参改禅与签名),加上appId(注意是大写I,这是个大坑,这个错滚歼桐了那签名必然失败)和key
④如果上述步骤没问题还是失败,那么去https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1验证以下你的签名是否通过
⑤还有一点签名的时候必须把所有英文全部转为大写
4.欢迎评论,多多交流大坦
npm install wxapp_rsa
var RSA = require('/wxapp_rsa.js')
// RSA加签
var sign_rsa = new RSA.RSAKey()
//privateKey_pkcs1需要是-----BEGIN PRIVATE KEY-----开头的私钥
sign_rsa = RSA.KEYUTIL.getKey(privateKey_pkcs1)
console.log('签名RSA:')
console.log(sign_rsa)
var hashAlg = 'MD5withRSA'
var hSig = sign_rsa.signString("12345678901234567890", hashAlg)
hSig = RSA.hex2b64(hSig)// hex 转 b64
console.log("签名结果:" + hSig)
// RSA 验签
var verify_rsa = new RSA.RSAKey()
verify_rsa = RSA.KEYUTIL.getKey(publicKey_pkcs1)
console.log('粗宏答验签RSA:')
console.log(verify_rsa)
hSig = RSA.b64tohex(hSig)
var ver = verify_rsa.verifyString("12345678901234567890", hSig)
console.log('验签结果:' + ver)
// RSA加密 【加密字段长度不大绝岁于117】
var encrypt_rsa = new RSA.RSAKey()
encrypt_rsa = RSA.KEYUTIL.getKey(rsa_public_key)
console.log('加密RSA:')
console.log(encrypt_rsa)
var encStr = encrypt_rsa.encrypt('1234567890')
console.log(encStr)
encStr = RSA.hex2b64(encStr)
console.log("加密结果:" + encStr)
// RSA 解密
var decrypt_rsa = new RSA.RSAKey()
decrypt_rsa = RSA.KEYUTIL.getKey(rsa_public_key_private)
console.log('解密RSA:')
console.log(decrypt_rsa)
encStr = RSA.b64tohex(encStr)
岩慧 var decStr = decrypt_rsa.decrypt(encStr)
console.log("解密结果:" + decStr)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)