ThinkPHP中url隐藏入口文件后接收alipay传值的方法


Posted in PHP onDecember 09, 2014

本文实例讲述了ThinkPHP中url隐藏入口文件后接收alipay传值的方法。分享给大家供大家参考。具体方法如下:

现在公司项目的需求变化多端,项目使用的是Thinkphp2.0,而conf.php中设置的URL_MODEL=2,为了兼容.htaccess和隐藏index.php,但在使用一些第三方接口时(例如支付宝或MSN开放平台),他们返回的参数往往含有一个?号,而URL_MODEL=2时,TP会自动将含有?的URL进行转换.

转换前:http://www.xxx.com/index.php/alipay/callback/?is_success/T/sign_type/MD5/notify_id/RqPnCoPT3K9/vwbh3I

转换后:http://www.xxx.com/alipay/callback/is_success/T/sign_type/MD5/notify_id/RqPnCoPT3K9/vwbh3I

转换后的网址将无法访问,而转换前的网址是可以访问的,这时需要临时针对alipay这个控制器,URL_MODEL=1,但在该控制器里C('URL_MODEL',1)是没有用的,因为TP会在入口文件App::run()时直接404了.

想了很多方法,先是修改它的配置文件Conf.php,结果发现会生成缓存文件~app.php,所以必须根据情况删除这个缓存文件,于是我对index.php入口文件进行了修改(事实上,放在任何App::run()之前都可以,你可以自行封装).

PHP实例代码:

<?php  

// 定义ThinkPHP框架路径  

define('THINK_PATH', '不告诉你我的TP文件夹名/');  

//如果网址中存在这样的形式就删除缓存配置文件,并创建一个标识  

if(strstr($_SERVER['REQUEST_URI'],'alipay/callback/')||strstr($_SERVER['REQUEST_URI'],'order.return_pay')){  

    unlink('./home/Runtime/~app.php');  

    //创建一个缓存文件做为标识  

    $fn= fopen('./home/Runtime/re_url_model.php','wb');  

    fclose($fn);  

}elseif(file_exists('./home/Runtime/re_url_model.php')){  

    unlink('./home/Runtime/re_url_model.php');  

    unlink('./home/Runtime/~app.php');  

}  

  

//定义项目名称和路径  

define('APP_NAME', 'home');  

  

define('APP_PATH', 'home');  

  

// 加载框架入口文件  

  

require(THINK_PATH."ThinkPHP.php");  

  

//实例化一个网站应用实例  

App::run();  

?>

项目的配置文件Conf.php根据你自己的情况做一个判断即可.

PHP实例源码:

//兼容支付宝快捷登录的?请求  

if(strstr($_SERVER['REQUEST_URI'],'alipay/callback/')||strstr($_SERVER['REQUEST_URI'],'order.return_pay')){  

    $my_array['URL_MODEL'] = 1;  

}  

return $my_array;

这样,访问www.xxx.com或www.xxx.com/shipin/等任何非alipay控制器的页面时,网站依然是使用url_model = 2来隐藏index.php,使得URL友好.

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
ADODB类使用
Nov 25 PHP
PHP中常用数组处理方法实例分析
Aug 30 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
php实现网站留言板功能
Nov 04 PHP
Zend Framework动作助手Json用法实例分析
Mar 05 PHP
php中二分法查找算法实例分析
Sep 22 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
php校验公钥是否可用的实例方法
Sep 17 PHP
php上传后台无法收到数据解决方法
Oct 28 PHP
php生成shtml类用法实例
Dec 09 #PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 #PHP
php中adodbzip类实例
Dec 08 #PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 #PHP
PHP内存缓存Memcached类实例
Dec 08 #PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 #PHP
PHP模块memcached使用指南
Dec 08 #PHP
You might like
在PHP中使用模板的方法
2008/05/24 PHP
基于PHP常用函数的用法详解
2013/05/10 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
Python计算斗牛游戏概率算法实例分析
2017/09/26 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
python 定时修改数据库的示例代码
2018/04/08 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
python接口自动化框架实战
2020/12/23 Python
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
放飞蜻蜓反思
2014/02/05 职场文书
中等生评语大全
2014/05/04 职场文书
安装工程师岗位职责
2015/02/13 职场文书
MySQL kill不掉线程的原因
2021/05/07 MySQL
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
SQL Server实现分页方法介绍
2022/03/16 SQL Server