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 相关文章推荐
使用无限生命期Session的方法
Oct 09 PHP
php使用GeoIP库实例
Jun 27 PHP
PHP生成RSS文件类实例
Dec 05 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 PHP
使用phpstorm和xdebug实现远程调试的方法
Dec 29 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
Feb 26 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
PHP超全局变量实现原理及代码解析
Sep 01 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项目的方法
2006/10/09 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
PHP单例模式详细介绍
2015/07/01 PHP
orm获取关联表里的属性值
2016/04/17 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
Python中标准模块importlib详解
2017/04/16 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
Python3.7下安装pyqt5的方法步骤(图文)
2020/05/12 Python
英国电子专家:maplin
2019/09/04 全球购物
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
安全生产目标管理责任书
2014/07/25 职场文书
企业贷款委托书格式
2014/09/12 职场文书
学校食品安全责任书
2015/01/29 职场文书
中学生社区服务活动报告
2015/02/05 职场文书