微信大众,平台消息接口开辟(29)校验与消息响应归并

    添加时间:2013-5-9 点击量:

    微信大众,平台开辟 微信大众,平台开辟者 微信大众,平台开辟模式 校验 消息响应
    作者:方倍工作室
    原文:http://www.cnblogs.com/txw1958/archive/2013/05/08/weixin-if29-valid-responseMsg.html 



    一、题目起原


    微信大众,平台在启用接口的时辰应用valid函数进行验证,



    define(TOKEN, 方倍工作室);
    
    ¥wechatObj = new wechatCallbackapiTest();
    ¥wechatObj->valid();


    但在验证完成后,就开端履行对消息的响应,不再应用valid函数,须要把他注释掉,并且设置成responseMsg()


    如下



    define(TOKEN, 方倍工作室);
    
    ¥wechatObj = new wechatCallbackapiTest();
    ¥wechatObj->responseMsg();


    如许操纵,其实斗劲麻烦,因为要回头来改函数。



    二、题目解析


    为什么要用两个不合函数来处理惩罚呢?这是因为两个不合的函数履行不合的功能,


    当履行valid函数时,提交的是验证字符串,用于包管url和token填写提交正确,这个时辰微信办事器提交给url的恳求是



    signature=eded789463180edf6c13691398d0cb4c85fb0e23&echostr=5838479218127813673&stamp=1359100969&nonce=1359376876


    而当响应消息的时辰,已经可以断定url地址正确了,这时辰主如果获得答复的xml了,这时提交的恳求类似如下:



    signature=ba7f5cf8aee512037e5a669596f6f64a8e763d7c&timestamp=1368016183&nonce=1368211921



    二、解决办法


    我们回头来看一下valid函数



        public function valid()
    
    {
    ¥echoStr = ¥_GET[echostr];

    //valid signature , option
    if¥this->checkSignature()){
    echo ¥echoStr;
    exit;
    }
    }


    此中有一个_GET变量,那么什么是_GET变量,以下内容来自 http://www.w3school.com.cn/php/php_get.asp


    ¥_GET 变量
    ¥_GET 变量是一个数组,内容是由 HTTP GET 办法发送的变量名称和值。
    ¥_GET 变量用于收集来自 method=get 的表单中的值。从带有 GET 办法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)。


    为什么应用 ¥_GET?
    注释:在应用 ¥_GET 变量时,所有的变量名和值都邑显示在 URL 中。所以在发送暗码或其他敏感信息时,不该该应用这个办法。不过,正因为变量显示在 URL 中,是以可以在收藏夹中收藏该页面。在某些景象下,这是很有效的。



    我们重视到在二中描述的,两次不合的恳求,验证恳求中,url中有个echostr变量,而在响应消息中是没有的,



    signature=eded789463180edf6c13691398d0cb4c85fb0e23&echostr=5838479218127813673&stamp=1359100969&nonce=1359376876


    那么我们用同样的思路,断定_GET变量中是否有这个echostr变量,来实现区分两种不合的恳求:


    终极代码类似如下:



    //define your token
    
    define(TOKEN, 方倍工作室);
    ¥wechatObj = new wechatCallbackapiTest();

    ifisset¥_GET[echostr])) {
    ¥wechatObj->valid();
    }
    else{
    ¥wechatObj->responseMsg();
    }



    至此,我们就不消再来注释一个启用另一个了,削减了一次麻烦。


    分享到: