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 相关文章推荐
web方式ftp
Oct 09 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 PHP
PHP中include和require的区别实例分析
May 07 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
Nov 07 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
php DES加密算法实例分析
Sep 18 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+MySql编写聊天室
2006/10/09 PHP
PHP中的类-什么叫类
2006/11/20 PHP
php函数的常用方法及注意之处小结
2011/07/10 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
php数组键名技巧小结
2015/02/17 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
PHP面向对象详解(三)
2015/12/07 PHP
js 替换
2008/02/19 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
python实现简易云音乐播放器
2018/01/04 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
在Python中使用filter去除列表中值为假及空字符串的例子
2019/11/18 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
大学生简历中个人的自我评价
2013/10/06 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
房产转让协议书
2014/04/11 职场文书
公司股权转让协议书
2014/04/12 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL