支付宝即时到帐功能接入--解决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
- 支付宝即时到帐功能接入--解决sign和mysign不等的坑爹旅程
- 支付宝sign 与 mysign 返回值不一致 的 bug
- PHP 接入支付宝即时到账功能
- 2. PHP接入支付宝 即时到帐接口
- PHP支付宝即时到账功能的实现
- 接入支付宝即时到账接口-java
- Payment:支付宝即时到账接口接入教程
- Payment:支付宝即时到账接口接入教程
- 支付宝中mysign与sign不一致问题(可能是乱码)
- 支付宝支付-即时到帐
- 支付宝即时到账接口开发 - 支付宝即时到账接口和TP框架的结合
- 支付宝即时到帐接口
- PHP实现支付宝即时到账功能
- mycncart 之支付宝即时到帐支付方式
- 支付宝即时到账
- SpringMVC支付宝支付即时到账
- 支付宝支付-即时到账
- 接入支付宝支付功能思路总结
- makefile笔记
- Navicat for Mysql外键创建失败
- iOS-AVFoundation自定义相机详解
- js函数回调错误
- c#图解教程笔记1
- 支付宝即时到帐功能接入--解决sign和mysign不等的坑爹旅程
- 分布式锁实现
- C#读取excel表格
- jmeter使用教程
- Android 网络属性详解
- HTML 表格中的行合并与列合并
- Linux文本处理:grep、awk、sed
- MY_iOS_Swift知识点
- 读取配置文件