08
2016
04

关于支付宝异步通知的sign与mysign不等的解决方案

项目概述:

  1. android客户端与php服务端对接的;

  2. android端支付都OK,支付宝也通知到了接口上;

  3. 但是$isSign = false。


到网上一搜也有相关的说明,支付宝官方提供的说明如下:

原标题:通知返回时sign与mysign为什么不相等

通知返回时,支付宝返回给商家网站众多信息中,包含一个签名结果(sign),商家对其他所有信息进行加密签名后会得到一个签名结果(mysign),如果要验证接口其有效性,需要把sign与mysign做比较,在MD5加密中,是做相等校验。

而出现不等的原因是:
安全校验码没有填写或填写不正确、请求时的参数格式不正确(如:有带自定义参数等)、编码格式混乱等。

解决方法:
1、检查安全校验码(参数key)是否有填写,且没有空格,是否是32位字符串
2、检查请求参数show_url、return_url、notify_url是否有带自定义参数,去掉自定义参数,
http://www.xxx.com/alipay/return_url.asp?id=123
?id=123,“?”以后带的参数都是自定义参数
3、 编码格式乱码。检查乱码的方法,可用写日志函数(log_result)来记录中文部分的数据是否乱码。如果乱码则确定是编码格式设置不一致,导致乱码。具体请检查编码格式参数input_charset、页面属性编码、网站项目整体编码等,确保传递数据时没有乱码。

没错按照上面的,我一条一条都检查过了,还是不行,最后没有办法了,联系支付宝在线客服。

进入此链接就可以在线咨询技术问题了b.alipay.com/support/helperApply.htm?action=supportHome,点击页面右边“有问题点我”。

我大概的描述了一下项目情况,技术员告诉我:验签和支付宝公钥,验签字符串有关,支付宝公钥alipay_public_key.pem不用修改,用自带的demo就行

我测试了一下,果然OK了,原来是我一直都在用自己生成的公钥。郁闷了好长时间。

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。