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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
php实现mysql同步的实现方法
Oct 21 PHP
php 函数中使用static的说明
Jun 01 PHP
PHP中常用的转义函数
Feb 28 PHP
你可能不知道PHP get_meta_tags()函数
May 12 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
php支付宝接口用法分析
Jan 04 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
Jan 07 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
PHP常量define和const的区别详解
May 18 PHP
thinkphp5.1框架容器与依赖注入实例分析
Jul 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
无线电广播的开始
2002/01/30 无线电
PHP大神的十大优良习惯
2016/09/14 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
Vue实现简易计算器
2020/02/25 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
Python正则表达式匹配HTML页面编码
2015/04/08 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
如何基于python生成list的所有的子集
2019/11/11 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
工程造价专业大学生自荐信
2013/10/01 职场文书
医学毕业生自我鉴定
2013/10/30 职场文书
期末总结的个人自我评价
2013/11/02 职场文书
大学生毕业自我鉴定
2013/11/06 职场文书
2014年国庆标语
2014/06/30 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
中秋客户感谢信
2015/01/22 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android