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实现小型站点广告管理(修正版)
Oct 09 PHP
如何在PHP中使用Oracle数据库(6)
Oct 09 PHP
php设计模式 Singleton(单例模式)
Jun 26 PHP
几个有用的php字符串过滤,转换函数代码
May 01 PHP
Zend的Registry机制的使用说明
May 02 PHP
php cli模式学习(PHP命令行模式)
Jun 03 PHP
php常用Output和ptions/Info函数集介绍
Jun 19 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
Jun 10 PHP
php实现将Session写入数据库
Jul 26 PHP
CodeIgniter读写分离实现方法详解
Jan 20 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
js贪吃蛇网页版游戏特效代码分享(挑战十关)
2015/08/24 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
python的id()函数解密过程
2012/12/25 Python
python中常用的九种预处理方法分享
2016/09/11 Python
利用Python爬虫给孩子起个好名字
2017/02/14 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
在python中求分布函数相关的包实例
2020/04/15 Python
Python selenium自动化测试模型图解
2020/04/15 Python
Python中logger日志模块详解
2020/08/04 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
教师求职推荐信范文
2013/11/20 职场文书
婚礼秀策划方案
2014/05/19 职场文书
2015年人力资源工作总结
2015/04/08 职场文书