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 相关文章推荐
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
php中$_GET与$_POST过滤sql注入的方法
Nov 03 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
php调整服务器时间的方法
Apr 03 PHP
PHP邮箱验证示例教程
Jun 01 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
ThinkPHP实现简单登陆功能
Apr 28 PHP
PHP编程实现csv文件导入mysql数据库的方法
Apr 29 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
Laravel核心解读之异常处理的实践过程
Feb 24 PHP
YII框架实现自定义第三方扩展操作示例
Apr 26 PHP
laravel中的fillable和guarded属性详解
Oct 23 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运行模式汇总
2016/11/06 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
浅析js封装和作用域
2013/07/09 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
个人评语大全
2014/05/04 职场文书
家长会标语
2014/06/24 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis