前几天在帮人做ECMall的易宝接口集成,第一次接触ECMall不熟悉支付插件的模式,也没时间去研究,而且这次集成的方式也不方便使用插件的模式,一时偷懒,直接在支付方式选择那写死了,支付结果返回验证也写在了同个app里,结果不知道为什么支付成功返回后老是会退出登陆,关键的问题来了,重新登陆后跳转回支付结果页面显示支付参数被篡改,仔细对比了一下支付成功返回的URL与登陆后的URL发现其中的参数原来有大写字母的,登陆成功后跳转回去的URL里的英文字母全部被转换成小写字母了,PHP变量名对大小写敏感,所以以RUL参数形式传递的数据就获取不到了,导致支付结果验证失败。
解析登陆过程代码,发现在文件app/frontend.base.php的login方法里有这么几行代码:
PHP代码
- /* 防止登陆成功后跳转到登陆、退出的页面 */
- $ret_url = strtolower($ret_url);
- if (str_replace(array('act=login', 'act=logout',), '', $ret_url) != $ret_url)
- {
- $ret_url = SITE_URL . '/index.php';
- }
变量$ret_url是保存与传递登陆前的URL,用来登陆成功后跳转回登陆前的URL,在这里被小写化了。
将这几行代码改成这样:
PHP代码
- /* 防止登陆成功后跳转到登陆、退出的页面 */
- if (str_replace(array('act=login', 'act=logout',), '', strtolower($ret_url)) != strtolower($ret_url)) {
- $ret_url = SITE_URL . '/index.php';
- }
这样一来就不会被转换成小写了。