功夫码

微信公众号Token验证失败的几种情况及解决办法

晓峰 时间:2020-04-25 13:07:45 阅读:74
--------------------------------------------------------- Ta 只分享的内容开始 ---------------------------------------------------------------------

微信公众号Token验证失败的几种情况及解决办法


1. 思路看验证的文件,编码是否是:utf-8 无bom头的

2. thinkphp框架,要关闭调试模式,开启调试模式容易有错误代码出现,导致验证失败

3. 当是框架路由地址时,接收的参数里,会有个_URL_单元,要把这个单元删除。


下边是部分代码

public  function index(){
    // 判断是否是第一次接入 echostr
    if (!empty($_GET['echostr'])) {
        echo $this->checkSign();
    } else {
        // 接收处理数据
        $this->acceptMsg();
    }
}
/**
 * 初次接入校验
 * @return string
 */
private function checkSign()
{
    // 得到微信公众号发过来的数据
    $input = $_GET;

    // 把echostr放在临时变量中
    $echostr = $input['echostr'];
    $signature = $input["signature"];
    
    // 在数组中删除掉
    unset($input['echostr'], $input['signature'],$input['_URL_']);
    // 在数据中添加一个字段token
    $input['token'] = self::TOKEN;
    
    /*=========== 微信发来的数据 ==========*/
    {"signature":"086cdab9031c8ed0168e1a0942fb811bbe1b239a",
    "echostr":"2179111007072545391",
    "timestamp":"1587789869",
    "nonce":"825612036",
    "_URL_":["Wxcallback","index"]
    }
    以上【_URL_】这个当框架路由时会有,所以要删掉否则生成字符验证不通过
    
    最后input数组只剩下
    ["timestamp"=>"1587789609","nonce"=>"177753193","token"=>"abcd789"]
    /*========================*/
    
    // 进行字段排序
    $tmpStr = implode( $input );
    // 进行加密操作
    $tmpStr = sha1( $tmpStr );
    // 进行对比
    if( $tmpStr == $signature ){
        // 校验成功要返回echostr
        return $echostr;
    }else{
        return '';
    }
 }


--------------------------------------------------------- Ta 只分享了这些内容 ---------------------------------------------------------------------

本文来源:功夫码(gongfuma.com)
声明:本文系功夫码原创稿件,版权属[功夫码 gongfuma.com]所有。
未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:功夫码",违者将依法追究责任。

相关文章

  • 回到顶部