小程序-奇葩的问题(Token校验失败,请检查确认)

Posted 陈科肇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小程序-奇葩的问题(Token校验失败,请检查确认)相关的知识,希望对你有一定的参考价值。

网上借个图

按微信要求:确认此次GET请求来自微信服务器,则原样返回echostr参数内容

都按要求来了,但怎么都不行,总是提示:Token校验失败,请检查确认

仔细检查了配置好几次,都没发现能有什么问题

下面代码是官方检验signature的PHP示例代码:

private function checkSignature()

    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];

    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );

    if( $tmpStr == $signature )
        return true;
    else
        return false;
    

这段代码与要求只差一步,那就是这段代码返回true或false,而不是GET请求中的参数echostr

我自己都通过浏览器手动输入参数认证了好几遍,都能验证成功,而且返回了echostr参数内容,那怎么微信开通设置老是提示Token校验失败,请检查确认

这时,我注意到一个问题,那就是return回来的echostr是带双引号,而echo回来的echostr是不带双引号的。

上图:
return

        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $token = 'token';

        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);

        if ($tmpStr == $signature) 
            if(isset($_GET['echostr']))
                return $_GET['echostr'];
            
         else 
            wp_die('非法请求!!!');
        

echo

        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $token = 'token';

        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);

        if ($tmpStr == $signature) 
            if(isset($_GET['echostr']))
                echo $_GET['echostr'];
            
         else 
            wp_die('非法请求!!!');
        

看这截图,不是感觉怪怪的,总感觉什么不对?

没错,返回的内容,虽然没双引号了,但多了个null字符串

因为我使用的是Wordpress 的REST API风格,会不会是因为这个问题?
然后自己试下了下,重新写个test.php

<?php
/**
 * Created by PhpStorm.
 * User: aaron
 * Date: 2017/12/8
 * Time: 9:48
 */


global $wpdb, $ft_tables;
$token = 'token536182947';//微信-客服消息TOKEN(令牌)

$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];

$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);

if ($tmpStr == $signature) 
    echo $_GET['echostr'];
 else 
    echo 'xx';

手动加参数,浏览器测试,ok,果然是和我猜想的一样

好了,服务器准备完毕!!!

接下来再测试下提交“消息推送”!!!

擦。。。竟然真成功了!!!是不是很奇葩,还有这种操作

以上是关于小程序-奇葩的问题(Token校验失败,请检查确认)的主要内容,如果未能解决你的问题,请参考以下文章

网关加签校验失败,请检查鉴权配置

微信小程序之消息推送配置(token验证失败的解决方案)

微信小程序之消息推送配置(token验证失败的解决方案)

83,微信token验证失败的解决方法

Token验证失败是怎么回事

pay支付参数验签失败咋回事