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

支付宝即时到帐功能接入–解决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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值