收藏
回答

使用阿里云ECS服务器,为啥会微信token验证失败?求帮助(附详细经历过程)

系统:centos7.2

开发环境:宝塔配置的lnmp环境,php 5.6,nginx 1.14,mysql56

APPID: wx813f388cc8dadf5d

问题背景:

1.开始没有使用宝塔,单独配置的lnmp环境,使用测试号可以通过验证。

但是到了第二天正式配置的时候,一直验证失败,找不到原因。所以重置了服务器,安装了宝塔(为方便管理)。

2.在宝塔上配置了微擎,并使用自带的配置输入token,还是失败!

分析可能的问题:a)微擎配置问题,b)代码问题,c)服务器问题,d)微信问题(可能性最小)

实验过程:

a)检查了每一项微擎的配置,测试了所有的变量,仍然不行,怀疑可能是微擎引擎底层问题。

b) 查看微擎api源码,未检查到有什么问题,怀疑可能当前版本代码有问题,遂替换api文件,使用网上发布的简单版验证代码进行测试

(中间自己插上了一段保存结果的代码,msg.txt 用来观察微信传过来的GET的值和代码运行状况)

<?php
/**
  * wechat php test
  */
//define your token
define("TOKEN", "wx8888abcde");//此处的TOKEN就是接下来需要填在微信的配置里面的token,需要保持严格一致
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
	public function valid()
    {
      	$echoStr = $_GET["echostr"];
        //valid signature , option
        if($this->checkSignature()){
        	echo $echoStr;
        	exit;
        }
    }	
	private function checkSignature()
	{
        // you must define TOKEN by yourself
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }
        
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        		
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);
        // use SORT_STRING rule
		sort($tmpArr, SORT_STRING);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
      
      	//将结果拦截下来,保存到msg.txt
      	$myfile = fopen("msg.txt", "w") or die("Unable to open file!");
         foreach ($_REQUEST as $key => $value) 
        {
           fwrite($myfile, "Key: $key; Value: $value<br />\n");
        }
      	fwrite($myfile,"tmpStr:$tmpStr\n" );
      	if( $tmpStr == $signature ){
          fwrite($myfile, "tmpStr == signature:True\n");
        }
      	
        fclose($myfile);
      	//保存结果
      
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
	}
}
?>

到微信公众平台进行接口配置,三种模式都尝试了,仍然验证失败!!


查看msg显示:

有数据读取到,证明服务器和微信都互相响应了是通的,且这里的输出和验证全都是正确的!微信就是无法验证痛过。

调用api测试:http://www.xxxxx.cn/api.php?signature=aa707fa3ba9911b6204bc144437fee5d65d5dcf9&echostr=6981532348412065663&timestamp=1585386587&nonce=1967387071

分析:这里没有任何格式输出错误,调用api也没有错误!

最后只能怀疑是服务器问题或者微信问题。

c) 排查服务器的问题,按从上到下的原则,先找朋友借服务器进行测试,上传了我上面原封不动的代码,到他服务器,进行测试。结果如下:

成功了!!?这一下彻底给我整懵了。

代码没问题,微信也没问题,域名也没问题,我这台阿里云服务器也没问题能访问,就是不成功?能给个解决方案吗?

难道微信拦截了数据?我实在想不通了,这个问题困扰了我一天了。

回答关注问题邀请回答
收藏

1 个回答

  • 5+
    5+
    03-28

    已经解决。 是域名备案的问题! 因为我之前换过服务器,造成了备案信息不对。 但是我一直在用这个域名做解析造成的问题。

    03-28
    有用
    回复 1
    • Cooper
      Cooper
      04-09
      这个备案信息怎么更新并查询呢
      04-09
      回复
登录 后发表内容
问题标签