微信开发Token验证失败或请求URL超时问题解决办法
1.Token验证失败
这个就是要检查配置文件了,最基本的就是
define("TOKEN", "weixin"); weixin 是你的微信开发后台的ID
2.请求URL超时
这个没什么办法多提交几次了,这个还有就是服务器安装了安全狗之类的软件把微信IP给拦截了,可以检查一下。
3.官方下载一个wechatCallbackapiTest类然后进行一下操作即可
代码如下 | 复制代码 |
define("TOKEN", "weixin"); |
wechatCallbackapiTest类就代码如下
代码如下 | 复制代码 |
class wechatCallbackapiTest private function checkSignature() $token = TOKEN; if( $tmpStr == $signature ){ public function responseMsg() if (!empty($postStr)){ |
验证配置
代码如下 | 复制代码 |
define("TOKEN", "xxx");//改成自己的TOKEN $wechatObj = new wechatCallbackapiTest(); if (isset($_GET['echostr'])) { |
class wechatCallbackapiTest{}
这个类就介绍了网上多了去了,大家可以自行搜索了下,我只介绍两个创建自定义菜单的函数
代码如下 | 复制代码 |
|
使用方法是
代码如下 | 复制代码 |
$access_token = $wechatObj->get_access_token();//获取access_token |
如果你网站空间的php.ini文件里的magic_quotes_gpc设成了off,那么PHP就不会在敏感字符前加上反斜杠(\\),由于表单提交的内容可能含有敏感字符,如单引号('),就导致了SQL injection的漏洞。在这种情况下,我们可以用addslashes()来解决问题,它会自动在敏感字符前添加反斜杠。
如何禁用 magic_quotes_gpc 和safe_mode
1,用 php.ini 配置文件全局禁用
magic_quotes_gpc = Off
safe_mode = Off
2,使用 .htaccess 文件禁用(对于虚拟主机)
php_flag magic_quotes_gpc Off
php_flag safe_mode Off
禁用了这两个东东后,安全问题就更加不能忽视了。在数据入库前一定要addslashes ,出库后要记得stripslashes 。
但是,上面的方法只适用于magic_quotes_gpc=Off的情况。作为一个开发者,你不知道每个用户的magic_quotes_gpc是On
还是Off,如果把全部的数据都用上addslashes(),那不是“滥杀无辜”了?假如magic_quotes_gpc=On,并且又用了addslashes()函数,那让我们来看看:
php
//如果从表单提交一个变量$_POST['message'],内容为 Tom's book
//这此加入连接MySQL数据库的代码,自己写吧
//在$_POST['message']的敏感字符前加上反斜杠
$_POST['message'] = addslashes($_POST['message']);
//由于magic_quotes_gpc=On,所以又一次在敏感字符前加反斜杠
$sql = "Insert INTO msg_table VALUE('$_POST[message]');";
//发送请求,把内容保存到数据库内
$query = mysql_query($sql);
//如果你再从数据库内提取这个记录并输出,就会看到 Tom\\'s book
?>
这样的话,在magic_quotes_gpc=On的环境里,所有输入的单引号(')都会变成(\\')……
其实我们可以用get_magic_quotes_gpc()函数轻易地解决这个问题。当magic_quotes_gpc=On时,该函数返回TRUE;当magic_quotes_gpc=Off时,返回FALSE。至此,肯定已经有不少人意识到:问题已经解决。请看代码:
php
//如果magic_quotes_gpc=Off,那就为提单提交的$_POST['message']里的敏感字符加反斜杠
//magic_quotes_gpc=On的情况下,则不加
if (!get_magic_quotes_gpc()) {
$_POST['message'] = addslashes($_POST['message']);
} else {}
?>
其实说到这里,问题已经解决。下面再说一个小技巧。
有时表单提交的变量不止一个,可能有十几个,几十个。那么一次一次地复制/粘帖addslashes(),是否麻烦了一点?由于从表单或URL获取的数据都是以数组形式出现的,如$_POST、$_GET)那就自定义一个可以“横扫千军”的函数:
php
function quotes($content)
{
//如果magic_quotes_gpc=Off,那么就开始处理
if (!get_magic_quotes_gpc()) {
//判断$content是否为数组
if (is_array($content)) {
//如果$content是数组,那么就处理它的每一个单无
foreach ($content as $key=>$value) {
$content[$key] = addslashes($value);
}
} else {
//如果$content不是数组,那么就仅处理一次
addslashes($content);
}
} else {
//如果magic_quotes_gpc=On,那么就不处理
}
//返回$content
return $content;
}
?>
看了下phpwind和 discuz的源码 ,发现phpwind就是直接用的addslashes和stripslashes 。而dz则是自己定义了两个函数:
function daddslashes($string, $force = 0)
{
!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
if(!MAGIC_QUOTES_GPC || $force)
{
if(is_array($string))
{
foreach($string as $key => $val)
{
$string[$key] = daddslashes($val, $force);
}
} else
{
$string = addslashes($string);
}
}
return $string;
}
function dstripslashes($string)
{
if(is_array($string))
{
foreach($string as $key => $val)
{
$string[$key] = dstripslashes($val);
}
}
else
{
$string = stripslashes($string);
}
return $string;
}
dz的这两个函数的在原函数的基础上扩充了对数组数据的支持,用起来更方便。不过dz的这两个函数不够简洁,这里我给出两个简洁点的:
function addslashes_deep($string)
{
$string = is_array($string)?array_map('addslashes_deep', $string):addslashes($string);
return $string;
}
function stripslashes_deep($string)
{
$string = is_array($string)?array_map('stripslashes_deep', $string):stripslashes($string);
return $string;
}
在数据入库前和出库后都要记得:
//入库前
if(!get_magic_quotes_gpc())
{
$_GET=addslashes_deep($_GET);
$_POST=addslashes_deep($_POST);
$_REQUEST=addslashes_deep($_REQUEST);
//其它要处理的变量.......
}
//出库后
if(get_magic_quotes_gpc())
{
$_GET=stripslashes_deep($_GET);
$_POST=stripslashes_deep($_POST);
$_REQUEST=stripslashes_deep($_REQUEST);
//其它要处理的变量.......
}
PHP中将数组转变成Json
强大的PHP已经提供了内置函数:json_encode() 和 json_decode()。很容易理解,json_encode()就是将PHP数组转换成Json。相反,json_decode()就是将Json转换成PHP数组。
例如:
代码如下 | 复制代码 |
$array = array("name" => "Eric","age" => 23); echo json_encode($array); 程序将打印出 : {“name”:”Eric”,”age”:23} |
再看下面的例子:
代码如下 | 复制代码 |
$array = array(0 => "Eric", 1 => 23); echo json_encode($array); 程序将打印出 :["Eric",23] |
以上两个例子可以看出,如果PHP数组的键都是数字,那么json_encode()返回一个数组形式的Json,如果PHP数组的键全是字符串。那么json_encode()就会返回一个对象形式的Json。刚已经说过。两者在js中的调用是不同的。
事实上,只要在PHP数组的键中有一个字符串形式的键,那么json_encode()就会返回对象形式的Json。这是不正确的。因为,虽然在PHP代码中不会出现错误,但要是将这样的Json传给JS函数,JS会将此Json当做一个对象,而对象是不可能以数字作为属性名的。也就是说JS 不知道这是什么 : user.0.username (中间是数字零)
例子。
代码如下 | 复制代码 |
$json_arr = array('WebName'=>'PHP网站开发教程网','WebSite'=>'http://www.111cn.net');
$json = '[{"id":"22","name":"33","descn":"44"}]'; //json格式的数组转换成 php的数组 echo $arr[0]->id; //用对象的方式访问 |
json转换数据后面参数要带ture
代码如下 | 复制代码 |
$a = <<<EOD |
代码如下 | 复制代码 |
/****************************
/* |
相关文章
PHP session_start()很慢问题分析与解决办法
本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25php中json_decode()和json_encode()用法与中文不显示解决办法
本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25- 在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
- 401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
- Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
- 今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
- 下面给大家介绍phpstudy访问速度慢的解决办法。1、修改mysql数据库链接地址为ip地址127.0.0.1。2、使用最新版本,这个坑了我好久时间。下面一段内容是关于phpstudy启动失败的解决办法。php5.3、5.4和apache都是用vc9编...2015-11-24
- 自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
Django def clean()函数对表单中的数据进行验证操作
这篇文章主要介绍了Django def clean()函数对表单中的数据进行验证操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-09- 分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
- 这篇文章主要为大家详细介绍了JavaScript实现密码框输入验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-01
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20- 1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
- 这篇文章主要介绍了Nest.js 授权验证的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-22
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21- 对于乱码这个问题php开发者几乎都会有碰到过,我们下面主要是介绍了php文件乱码和页面乱码。PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header("Content-Type: text/html;charset=utf-8"); 2.PHP文件编码问题...2015-10-21
- 这篇文章主要介绍了el-table树形表格表单验证(列表生成序号),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-01
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
这篇文章主要介绍了JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2017-06-15- 下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
- 这篇文章主要为大家详细介绍了js canvas实现滑块验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14