微信公众平台消息接口开发
来源:互联网 发布:防范电信网络新型犯罪 编辑:程序博客网 时间:2024/04/24 13:31
本系统教程以微信公众平台应用天气神(账号WeatherGod,支持国内近400个城市天气的名称、拼音、区号、邮编以及语音触发模式查询)为例,讲解微信接口开发过程。欢迎大家关注该账号并使用语音方式查询当地天气,二维码见底部。
本文是微信公众平台消息接口开发(1)启用接口 的下部分
三、服务器没有响应Token验证的解决方法
1. 技术分析法
这次我们在代码里面加入跟踪http记录的方法来查看我们自己的服务器收到了请求没有回应,还是微信根本没有发请求过来。
通过调用系统环境变量$_SERVER,可以查看到HTTP请求的信息,其中两项重要的是
$_SERVER["REMOTE_ADDR"] //记录来访者的IP,我们记录微信服务器是否访问过$_SERVER["QUERY_STRING"] //查询请求字符串
把其加入代上面的代码中,并且将其写入到本地文件中来,全部代码如下:
<?phpdefine("TOKEN", "天气神");date_default_timezone_set('Asia/Hong_Kong'); traceHttp();$wechatObj = new wechatCallbackapiTest();$wechatObj->valid();class wechatCallbackapiTest{ public function valid() { $echoStr = $_GET["echostr"]; //随机字符串 if($this->checkSignature()){ echo $echoStr; exit; } } private function checkSignature() { $signature = $_GET["signature"]; //微信加密签名 $timestamp = $_GET["timestamp"]; //时间戳 $nonce = $_GET["nonce"]; //随机数 $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); //sha1加密后与签名对比 if( sha1(implode($tmpArr)) == $signature ){ return true; }else{ return false; } }}function traceHttp(){ logger(""); logger("REMOTE_ADDR:".$_SERVER["REMOTE_ADDR"].((strpos($_SERVER["REMOTE_ADDR"], "101.226"))?" From WeiXin":" Unknown IP")); logger("QUERY_STRING:".$_SERVER["QUERY_STRING"]);}function logger($content){ file_put_contents("log.html", date('Y-m-d H:i:s ').$content."<br>", FILE_APPEND);}?>
这样,当我们提交之后,就会生成一个log.html文件在当前目录
用浏览器直接打开填写的url,也会写一次文件。
直接用浏览器打开url+log.html路径,我的记录如下:
2013-01-30 10:15:18 2013-01-30 10:15:18 REMOTE_ADDR:212.179.24.103 Unknown IP2013-01-30 10:15:18 QUERY_STRING:
在微信中点击提交一次,再一次生成记录,如下:
2013-01-30 10:15:49 2013-01-30 10:15:49 REMOTE_ADDR:101.226.89.83 From WeiXin2013-01-30 10:15:49 QUERY_STRING:signature=eded789463180edf6c13691398d0cb4c85fb0e23&echostr=5838479218127813673×tamp=1359100969&nonce=1359376876
从上可以看到,这次IP来自101.226.89.83,是微信的IP,我把这个IP加入到代码中自行判断了
另外它的查询请求和官方指南中描述的一致,所以可以确定,微信把消息提交到服务器中了。提交应该成功。如果不成功,原因在于自己这边。
2. 万能成功法
如果你用上面的白方法还没提交成功,被接口启用问题已经折腾了N次,心灰意冷,打算退出微信接口开发,那你一定要再多看一眼下面的万能方法。
再看一下验证部分的源代码
$wechatObj = new wechatCallbackapiTest();$wechatObj->valid();class wechatCallbackapiTest{ public function valid() { $echoStr = $_GET["echostr"]; //随机字符串 if($this->checkSignature()){ echo $echoStr; exit; } }
其实就调用一下valid()函数,在valid()函函数中检查签名,如果签名成功,就应答echoStr。
如果我们跳过这个签名呢......
public function valid() { $echoStr = $_GET["echostr"]; if(true){ echo $echoStr; exit; } }
经过试验,提交也成功。证明也是可行的。但是。。。。
好像,这后面存在着微信一个很大的漏洞,很大很大,可能是无穷大!!!
- 微信公众平台消息接口开发
- 微信公众平台消息接口开发(1)
- 微信公众平台消息接口开发(2)
- 微信公众平台消息接口开发(3)
- 微信公众平台消息接口开发(4)
- 微信公众平台消息接口开发(4)天气预报
- 微信公众平台消息接口开发(34)微信墙
- 微信公众平台消息接口开发(4)天气预报
- 微信公众平台消息接口开发(4)天气预报
- 微信公众平台消息接口PHP版开发教程
- 微信公众平台消息接口开发(4)天气预报
- 微信公众平台消息接口PHP版开发教程
- PHP微信公众平台消息接口应用开发
- 微信公众平台消息接口开发---快递查询
- 微信公众平台消息接口PHP版开发教程
- 微信公众平台消息接口使用指南
- 微信公众平台消息接口-java
- 微信公众平台-消息接口指南
- 利用PowerDesinger12导入数据库中的表到PowerDesigner中
- 微信浏览器HTTP_USER_AGENT判断
- MAC OS X 下快速切换代理
- iOS国际化和genstrings所有子目录本地化字符串
- C#模仿360安全卫士玻璃按钮,不闪烁,背景切换效率快
- 微信公众平台消息接口开发
- LInux总线,设备和驱动
- 启用接口
- linux下mysql的root密码忘记解决方法
- 封装weixin.class.php
- test
- 关于switch。。case的使用中break的重要性
- 校验签名与消息响应合并
- ROC 曲线