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 相关文章推荐
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
phpmyadmin3 安装配置图解教程
Mar 29 PHP
深入PHP异步执行的详解
Jun 03 PHP
PHP中判断变量为空的几种方法分享
Aug 26 PHP
php解决约瑟夫环示例
Apr 09 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
CI配置多数据库访问的方法
Mar 28 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 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
多文件上载系统完整版
2006/10/09 PHP
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
修改发贴的编辑功能
2007/03/07 Javascript
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
2018/02/14 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
Python实现高效求解素数代码实例
2015/06/30 Python
Python如何为图片添加水印
2016/11/25 Python
带你了解python装饰器
2017/06/15 Python
Python数据结构之单链表详解
2017/09/12 Python
Python实现的栈(Stack)
2018/01/26 Python
Python如何调用JS文件中的函数
2019/08/16 Python
python编写猜数字小游戏
2019/10/06 Python
python连接mongodb集群方法详解
2020/02/13 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
匡威荷兰官方网站:Converse荷兰
2018/10/24 全球购物
环境科学专业个人求职信
2013/12/15 职场文书
村委会贫困证明
2014/01/14 职场文书
绿色城市实施方案
2014/03/19 职场文书
师范学院毕业生求职信
2014/06/24 职场文书
员工手册董事长致辞
2015/07/29 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
HAM-2000摩机图
2021/04/22 无线电
Python基础之操作MySQL数据库
2021/05/06 Python
mysql 获取时间方式
2022/03/20 MySQL
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电