[转载]微信公众平台消息接口开发(2)启用接口2 - txw1958 - 博客园

[转载]微信公众平台消息接口开发(2)启用接口2 – txw1958 – 博客园.

微信 平台 消息 接口 启用
作者:http://txw1958.cnblogs.com/

 

本系统教程以微信公众平台应用天气神(账号WeatherGod,支持国内近400个城市天气的名称、拼音、区号、邮编以及语音触发模式查询)为例,讲解微信接口开发过程。欢迎大家关注该账号并使用语音方式查询当地天气,二维码见底部。

 

本文是微信公众平台消息接口开发(1)启用接口 的下部分

 

三、服务器没有响应Token验证的解决方法

1.  技术分析法

这次我们在代码里面加入跟踪http记录的方法来查看我们自己的服务器收到了请求没有回应,还是微信根本没有发请求过来。
通过调用系统环境变量$_SERVER,可以查看到HTTP请求的信息,其中两项重要的是

$_SERVER["REMOTE_ADDR"]  //记录来访者的IP,我们记录微信服务器是否访问过
$_SERVER["QUERY_STRING"]  //查询请求字符串

把其加入代上面的代码中,并且将其写入到本地文件中来,全部代码如下:

复制代码
<?php define("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 IP 2013-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 WeiXin 2013-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; } }
复制代码

经过试验,提交也成功。证明也是可行的。但是。。。。
好像,这后面存在着微信一个很大的漏洞,很大很大,可能是无穷大!!!

 

原文地址:http://www.cnblogs.com/txw1958/archive/2013/01/31/weixin-if2-enable.html 

 

 

———————————————————————————————————

关注天气神(账号WeatherGod)方法:

1. 依次进入以下路径:朋友们—>添加朋友—>搜号码,输入WeatherGod,不区分大小写,点击查找,然后点击关注

2. 扫描二维码:

 

猜你喜欢:微信平台上第一个不输入文字就能查询的天气预报

■ 原文网址:http://txw1958.cnblogs.com/
■ 版权声明:自由转载-非商用-非衍生-保持署名

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏