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查询域名状态whois的类
Nov 25 PHP
php面向对象全攻略 (七) 继承性
Sep 30 PHP
PHP 巧用数组降低程序的时间复杂度
Jan 01 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
浅谈PHP中JSON数据操作
Jul 01 PHP
浅谈PHP中的
Apr 23 PHP
Yii实现文章列表置顶功能示例
Oct 18 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
Oct 29 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP实现随机数字、字母的验证码功能
Aug 01 PHP
php策略模式简单示例分析【区别于工厂模式】
Sep 25 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
Oct 24 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
浅谈discuz密码加密的方式
2014/05/22 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
Hadoop中的Python框架的使用指南
2015/04/22 Python
Python回调函数用法实例详解
2015/07/02 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
Django  ORM 练习题及答案
2019/07/19 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
大专计算机个人求职的自我评价
2013/10/21 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
就业协议书怎么填
2014/04/11 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
党员检讨书
2014/10/13 职场文书
办公室岗位职责范本
2015/04/11 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
检讨书格式
2019/04/25 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
Python包argparse模块常用方法
2021/06/04 Python
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python