可能的原因有两个:
一、传给微信sdk的参数中时间戳的格式错误。
iOS中时间戳的格式要求是32位的int类型
image.png
一般服务器返回的是字符串需要强制转换成32位int类型的值
二、服务器的签名方式错误
微信支付:服务器(Java)统一下单获取prepay_id成功,iOS调用微信sdk提示支付验证签名失败。
原因如下:
微信支付:服务器统一下单获取prepay_id成功,前端公众号里调用jsapi提示支付验证签名失败(签名工具测试签名正确)
先说出问题原因:统一下单使用的微信支付官方下载的demo的Java版,https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
这个demo里统一下单使用的签名方式是HMAC-SHA256,而页面签名方式用的https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
这里默认的是签名方式是MD5,前后两个签名方式不一至导致的“支付验证签名失败”。
解决方法:前后两个签名方式调成一致,同时用MD5或同时用HMAC-SHA256。
注意事项:回调的时候也用一致的签名方法!!
我的项目出现的微信“支付验证签名失败”原因就是后端服务器用的demo的加密方式和后面的md5的方式不是一种导致给我参数,我再去调微信sdk的时候出现签名失败。
后来java的后端服务器改成一样的就好了,就可以成功调起微信支付。
稍后会补上我的微信支付测试demo的github地址
网友评论