1, 我在服务端用python都wechatpy,pay.order.create()生成支付订单成功
2,我用下面代码,在服务端签名,然后把相关信息都发送到app
params = {
"appId": my_env.WX_APP_ID,
"timeStamp": str(int(time.time())),
"nonceStr": str(uuid.uuid4()).replace("-", ""),
"prepayId": order['prepay_id'],
}
sign_str = f"{params['appId']}\n{params['timeStamp']}\n{params['nonceStr']}\n{params['prepayId']}\n"
digest = SHA256.new(sign_str.encode('utf-8'))
with open(str(my_env.WX_MCH_KEY), 'r') as ifile: # my_env.WX_MCH_KEY是我的私钥路径
pkey = RSA.importKey(ifile.read())
signer = pkcs1_15.new(pkey)
sign_v = base64.b64encode(signer.sign(digest)).decode('utf-8')
3,我用签名工具,验证了签名是正确的
4,app端,在用下面的代码调起微信支付的时候,我核对了每一个参数,都是对的
val request = PayReq()
request.appId = appId
request.partnerId = partnerId
request.prepayId= prepayId
request.packageValue = "Sign=WXPay"
request.nonceStr = nonceStr
request.timeStamp= timeStamp
request.sign= sign
api.sendReq(request);
5,最后吊起了微信支付,但是提示签名验证失败。
备注: 我的app吊起微信登陆是OK的。
请帮忙看看是什么原因?
你好 请问问题是否已解决?若仍未解决 辛苦打印下调起参数用签名工具验下签名。调起时提示“支付签名验证失败”,是调起的签名有问题导致的。
可以把调起的参数按文档参数规则以jsapi支付为例:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6,放到在线验签工具https://pay.weixin.qq.com/doc/v3/merchant/4012365352进行验签。验签通过的话,可以参数固定写死去前端调起。
如果参数传递一致的话仍无法调起,检查下下单和调起的商户号对应apiclient_key.pem是否准确对应(如果是服务商模式调接口的话需要用服务商商户号的私钥apiclient_key.pem,不能用子商户的)
多谢回复!
请问:你如何判断“调起支付参数和计算签名参数不一致”的?我的确是核对了这些参数值,是一致的。
“调起参数大小写和格式要求”,大小写,我也认真核对了。另外,如果大小写不对,编译会报错把。
格式问题,除了packageValue = "Sign=WXPay",其他的都是具体值,有什么特殊格式要求吗?
麻烦给些更详细的帮助,谢谢!
调起支付参数和计算签名参数不一致
注意调起参数大小写和格式要求
请问:你如何判断“调起支付参数和计算签名参数不一致”的?我的确是核对了这些参数值,是一致的。
“调起参数大小写和格式要求”,大小写,我也认真核对了。另外,如果大小写不对,编译会报错把。
格式问题,除了packageValue = "Sign=WXPay",其他的都是具体值,有什么特殊格式要求吗?
麻烦给些更详细的帮助,谢谢!
如果全都对,也就不会报错了。。。最简单的验证方式就是前端写死参数去验证