zoukankan      html  css  js  c++  java
  • 微信公众平台消息接口开发之校验签名与消息响应合并

    微信公众平台在启用接口的时候使用valid函数进行验证,

    define("TOKEN", "guoxiongjie");
    $wechatObj = new wechatCallbackapiTest();
    $wechatObj->valid();

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

    如下

    define("TOKEN", "guoxiongjie"); 
    $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变量

    $_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(“TOKEN”, “guoxiongjie”);

    $wechatObj = new wechatCallbackapiTest();

    if (isset($_GET['echostr'])) {

    $wechatObj->valid();

    }else{

    $wechatObj->responseMsg();

    }

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

  • 相关阅读:
    PAT 甲级 1041 Be Unique (20 分)(简单,一遍过)
    [精]Odoo 8.0深入浅出开发教程-模块开发基础
    iOS开发- UILabel 自己主动换行 及 高度自适应
    Android
    权限管理表结构设计
    创建SQL语句_面试
    Hasen的linux设备驱动开发学习之旅--时钟
    关于源程序到可运行程序的过程
    微信服务号 微信支付开发
    MongoDB基础入门视频教程
  • 原文地址:https://www.cnblogs.com/GmrBrian/p/3593075.html
Copyright © 2011-2022 走看看