微信公众号——消息认证

343 阅读2分钟

虽然已经用过easywechat这样简单好用的微信SDK,但是总觉得差点什么,差点什么呢?仔细寻思了一下,觉得应该是对微信的原生接口不够了解,导致用别人家封装好的东西,总有那么一点不舒服,担心,害怕。所以这就从原点出发,学习微信公众号原生api开发。

服务器配置

  1. 首先,你得有个公网ip或者是域名url,填写到微信公众号的配置url里。然后token的话,随便定义一个字符串。当然,这个url是你的与微信对接的一个入口文件,需要进行认证。
  2. 下面是入口文件的逻辑代码思路:
    //点击提交配置的时候,微信会向你配置的服务器url发送一个get请求,类似这样:
    //  your_url?signature=ddb4083a3ec480385ad07a699ebd7717fd4e43dc&echostr=13316280618513723375&timestamp=1524714412&nonce=3081478024
    //你可以看到给你传输了四个参数,signature, echostr, timestamp, nonce。具体是什么认证规则,看下面:
    //获取参数:
    public function wechat() {
        $timestamp = $_GET['timestamp'];
        $signature = $_GET['signature'];
        $nonce = $_GET['nonce'];
        $echoStr = isset($_GET['echostr']) ? $_GET['echostr']: '';
        $token = 'weixin';
    //将参数进行字典排序,并拼接成字符串,然后sha1加密
        $array = [$token, $timestamp, $nonce];
        sort($array);
        $tempStr = sha1(implode('', $array));
    //判断如果$tempStr == $signature并且存在$echostr
        if($tempStr == $signature && $echoStr) {
            echo $echoStr;
            exit;
        } else {
            $this->responseMsg();
        }
    }    
    
    需要注意的是,只要提交配置的时候微信服务器才会发送参数echostr这个参数,后面将不再发送,所以如果不存在,就走下面的responseMsg这个方法。

    这里需要注意的是,路由方法一定必须要是any 因为微信get、post两个方法都会用到。