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

微信公众号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 '';

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值