PHP 您现在的位置是:首页 > 开发笔记 > PHP

微信公众平台基本配置token验证失败

来源:灰大狼 发布时间:2018-07-20 最后更新:2019-05-11 3868已围观

摘要微信公众平台基本配置时,问题提示token验证失败,代码就是从网上找到的,结果是因为少了一个参数……

在微信开发学习过程中,有一项微信公众平台基本配置,配置好后,网站接管平台的消息管理。但是配置过程中,老是提示token验证失败,经过代码调试,发现自己算出来的签名和微信平台发过来的的确不一样,上网找了好一大顿,最终发现,仅仅是少了一个参数!

首先,参数运算的数组有3个数据,分别是token、timestamp和nonce,不是开发文档中说明的两个。其次,排序函数sort要有第二个参数:SORT_STRING常量。

正确代码如下:

private function checkSignature(){
    $signature = $_GET['signature']; //获取签名参数
    $timestamp = $_GET['timestamp']; //获取时间戳参数
    $nonce = $_GET['nonce']; //获取随机字符串
    $token = 'myToken'; //微信公众平台设置的令牌,可以通过配置令牌等方式获取,这里直接写入了
    
    $tmpArr = [$timestamp, $nonce, $token]; //定义参数数组,要有token
    sort($tmpArr, SORT_STRING); //重新排序数组,注意第2个参数一定要有
    
    $tmpStr = implode($tmpArr); //将数组聚合成字符串
    $tmpStr = sha1($tmpStr); //算出签名(5.3版本以上的PHP可以将这两行合并成一行)
    
    if ($tmpStr == $signature) {
        return true;
    } else {
        return false;
    }
}

该校验函数为类内部调用的私有函数,调用判断一下是否合法。

if ($this->checkSignature) {
    exit($_GET['echostr']); //检验通过,返回规定的回响码即可
}

其它业务逻辑,根据自己的实际情况开发即可。

很赞哦! (473)


站点信息

  • 网站平台ThinkCMF 5.1.5
  • PHP版本:7.3.31
  • QQ交流群: 惠达浪技术交流