支付宝即时到帐功能接入--解决sign和mysign不等的坑爹旅程

来源:互联网 发布:mysql表结构导出word 编辑:程序博客网 时间:2024/05/21 21:33

支付宝即时到帐功能接入–解决sign和mysign不等的坑爹旅程

项目背景:

  • php项目

  • php版本:5.3

  • 服务器类型:IIS 7

  • 支付宝即时到帐create_direct_pay_by_user-PHP-GBK(2016)


先说出结论:

原项目源码中,对GET和POST变量进行的转码,也就是使用了一堆函数将上述两个变量进行大变身(比如html_entity_decode)等。
把这段代码注释后,支付宝接入成功。
考虑到原框架之所以要转码,是要检测数据的安全性,以保证之后修改数据库的正确性。

旅程回顾

Day 1.
项目原有的支付宝接口,支付成功后,sign和mysign对比结果返回为false。凭借着以往的经验和脑残的智商,我把所有变量都log了一遍进行对比。一天下来,啥都没有。
第一天,扑街…

Day 2.
百度了一下,网上的答案基本有三种:
1)网站编码问题,服务器编码问题导致传回的参数出现乱码
2)支付成功后会以$_GET形式返回参数,框架会自动增加参数,需要过滤掉该参数。
3)由于官方提供的paraFilter方法bug问题导致sign和mysign不等
我花了一天的时间排除了以上三种可能。
① IIS设置网站编码的方法如下:
打开IIS并选中网站
在ASP.NET出选择.NET全球化
这里写图片描述
② 使用logResult输出日志,可以观察到没有多余的参数
③ 使用logResult输出日志,可以观察到没有错误
将函数修改如下:

function paraFilter($para) {    $para_filter = array();    foreach ($para as $key => $val) {        if($key == "sign" || $key == "sign_type" || $val == "")continue;        else    $para_filter[$key] = $para[$key];    }    return $para_filter;}

第二天,继续扑街…

Day 3.
到了第三天,将项目原有的支付宝接口推倒,重新接入2016版本的支付宝demo接口。
由于过于信任原有的框架,我居然想都没想,就直接套过去使用。
该引入文件的都引入了。然后又重蹈第二天的覆辙。
第三天上午,扑街…
第三天下午,终于发现了引入的文件中有这样一段代码(当时老子就该TMD一刀把显示器劈开)
于是,一切顺利……个屁
远程获取支付宝ATN结果,返回了301。
sign和mysign对比返回为true。
第三天,没事,我继续躺在地上

Day 4.
一大早,我就测试到支付成功,功能实现完整。
至此,旅程结束。

在结束之前,不得不提一下支付宝的开发客服。服务还是挺到位的,除了有时候塞了一堆已经看过的文档给你,还有叫你自己百度一下之外…还是挺到位的。

旅程总结:

  • 1.
    总算是提高了自己debug的能力(其实根本没有);

  • 2.
    提高了搜索答案的能力(你知道我解决编码问题解决了多久?TMD);

  • 3.
    我遇到的问题,应该算是编码问题,之所以一直没察觉到,是log出来的结果都一样,肉眼看真的没区别,notepad搜索也搜索一样,坑爹。由于客户已经知道了支付成功,我没办法进行进一步的测试,所以暂时也不知道具体的差别在哪里,即转码前后的具体差别。

  • 4.
    对于网上现有的答案,这次的个例也算是一个解决思路。总的思路大概是:获取合作ID和KEY——执行DEMO——若有错误,即可断定错误是DEMO本身所导致的还是业务代码导致的——再移植原有的业务代码。

  • 5.
    Debug乐趣无限,但是就像高考之后,虽想尽欢,但感无力。希望一下代码能帮到大家。

  • 6.
    2017-06-09下午更新,查找出原因了,原来框架会截取前80个字符。其中notify_id=(字符串)这里刚好82个字符,所以获取到的notify_id并不完整,因而导致sign和mysign不等。此贴终结。

////                            _ooOoo_//                           o8888888o//                           88" . "88//                           (| -_- |)//                           O\  =  /O//                        ____/`---'\____//                      .'  \\|     |//  `.//                     /  \\|||  :  |||//  \//                    /  _||||| -:- |||||-  \//                    |   | \\\  -  /// |   |//                    | \_|  ''\---/''  |   |//                    \  .-\__  `-`  ___/-. ///                  ___`. .'  /--.--\  `. . __//               ."" '<  `.___\_<|>_/___.'  >'"".//              | | :  `- \`.;`\ _ /`;.`/ - ` : | |//              \  \ `-.   \_ __\ /__ _/   .-` /  ///         ======`-.____`-.___\_____/___.-`____.-'======//                            `=---='//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//                      Buddha Bless, No Bug !////                       .::::.//                     .::::::::.//                    ::::::::::://                 ..:::::::::::'//              '::::::::::::'//                .:::::::::://           '::::::::::::::..//                ..::::::::::::.//              ``:::::::::::::::://               ::::``:::::::::'        .:::.//              ::::'   ':::::'       .::::::::.//            .::::'      ::::     .:::::::'::::.//           .:::'       :::::  .:::::::::' ':::::.//          .::'        :::::.:::::::::'      ':::::.//         .::'         ::::::::::::::'         ``::::.//     ...:::           ::::::::::::'              ``::.//    ```` ':.          ':::::::::'                  ::::..//                       '.:::::'                    ':'````..//////      ┏┛ ┻━━━━━┛ ┻┓//      ┃       ┃//      ┃   ━   ┃//      ┃ ┳┛   ┗┳ ┃//      ┃       ┃//      ┃   ┻   ┃//      ┃       ┃//      ┗━┓   ┏━━━┛//        ┃   ┃   神兽保佑//        ┃   ┃   代码无BUG!//        ┃   ┗━━━━━━━━━┓//        ┃           ┣┓//        ┃             ┏┛//        ┗━┓ ┓ ┏━━━┳ ┓ ┏━┛//          ┃ ┫ ┫   ┃ ┫ ┫// 

文末附件

1.支付宝即时到帐功能接入DEMO官方版
http://download.csdn.net/detail/ymyqs/9865485