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 相关文章推荐
php5 and xml示例
Nov 22 PHP
php skymvc 一款轻量、简单的php
Jun 28 PHP
如何使用FireFox插件FirePHP调试PHP
Jul 23 PHP
php数组编码转换示例详解
Mar 11 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 PHP
CI框架(CodeIgniter)操作redis的方法详解
Jan 25 PHP
php的RSA加密解密算法原理与用法分析
Jan 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配置心得包含MYSQL5乱码解决
2006/11/20 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
PHP 万年历实现代码
2012/10/18 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
Python2与Python3的区别点整理
2019/12/12 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
面包店的创业计划书范文
2014/01/16 职场文书
优秀信贷员先进事迹
2014/01/31 职场文书
工地标语大全
2014/06/18 职场文书
感恩父母主题班会
2015/08/12 职场文书