微信小程序-微信支付签名验证

微信小程序-微信支付签名验证,第1张

在微信支付之后,小程序会主动向服务端发送支付状态.为了防止恶意篡改,必须生成签名发送给服务端进行验证.

签名生成官方文档: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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12383878.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存