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