微信公众平台支付 一直提示签名认证失败,签名对比正确,却提示签名不正确,关于prepay_id造成签名验证不正确的问题

关于微信公众平台支付的问题,耗时整整24小时,一直在纠结,几乎是一个字母一个字母的查看参数是否正确。是的,我已经在开始怀疑人生了。直到在无数篇文章中看见了http://blog.csdn.net/triplestudio/article/details/77930105。

开发语言   java   使用官方下载的sdk

关于支付调取失败的问题有很多,授权目录,签名时参数名称区分大小写(签名参数都是使用托分规则),甚至考虑是不是你once_str也需要使用回调的,各种猜想,各种尝试。。。。微信官方给出的签名工具生成的签名和我的一样,理应排除签名错误。可是没办法,同样报错,签名不正确。

无意间,我看见过这样一句话,如果生成的签名和官方工具相同,但是还是提示签名不正确,那么你得考虑是不是你的参数不正确。

prepay_id是我排除的第一个参数,这是调用接口生成的,我想应该不会错。接下来,我反复修改了商户支付平台的秘钥,也就是签名需要的key值,得到的结果任然是签名错误,我又把随机字符串nonceStr改成后台传过来的,答案还是这样。我排除了两个参数,key和nonceStr,我又对appId反复确认,timeStamp一位一位的数,看是不是十位,我都快不相信电脑的复制功能了,我怀疑会复制不正确。最后我排除所有的字段,应该都是正确的,但是我任然不能调起支付。同样的提示,签名验证失败。

最后,我在上面的文章中看见了一个对prepay_id不正确的肯定,我仿佛看见希望之光。对,没错了,排除了所有可能,最后一个就一定是答案,prepay_id有问题。http://blog.csdn.net/triplestudio/article/details/77930105文章指出,由于最新sdk调用统一下单的时候sign_type是置为 HMAC-SHA256 而不是使用默认的 MD5。我去仔细看了源码,原因在于,默认不适用沙箱环境,沙箱环境下使用的签名方式是MD5,而非沙箱环境下,使用的是HMAC-SHA256.

 
  

上面代码修改为


无论什么环境,都是用MD5加密方式,ok,成功唤醒支付。可以碎觉了

你可能感兴趣的:(java)