原文 http://www.cnblogs.com/txw1958/p/token-verify.html

Token验证失败的解决方法

一、问题由来

在使用URL和Token启用微信公众平台开发模式消息接口的时候,我们会碰到下面三种情况

  1. token校验失败


这样回头检查一下各项配置是否正确。如果确定配置没有问题,请按下面的方法检查

  1. 请求URL超时


你的服务器在国外,或者服务器网速不给力,一般多试几次就可以了。如果经常这样,就需要考虑更换服务器

  1. 提交成功

恭喜你,配置成功了。

我们来讲解一下第一种的原因及解决方法。

二、问题分析

首先要了解的是什么是URL和Token,在这里,URL就是放置了接口程序的网址,这个网址一般得是你自己的服务器或空间地址。你自己在这个空间上某个目录已经有接口程序了,你知道这个接口程序在互联网上的访问地址是什么。而Token就是一个令牌,该令牌是个数字或字母形式的字符串,用于微信服务器与你的服务器进行通讯的时候的身份验证。防止非法数据来搞乱。

然后要了解的是开发模式为什么要使用Url和Token,使用url是为了让微信服务器和你的服务器进行通讯对话,从而达到开发模式下自动回复的目的。而实现这个通讯,必须有相应的程序为你完成这个功能,而这个程序必须已经开发完成并且放置于url路径下面,当你填写完url和token的时候,微信服务器就会和你的服务器下的程序进行一次认证过程,认证通过表明这个服务器是你的并且程序没有问题。不然你填个不存在的url或者url下面个没有相应的接口功能,那是通不过的。

你可以先用下面的测试通过

URL:http://discuz.comli.com/test.php

Token:weixin

消息加解密方式: 明文模式

三、问题解决

  1. 技术分析法

这次我们在代码里面加入跟踪http记录的方法来查看我们自己的服务器收到了请求没有回应,还是微信根本没有发请求过来。

通过调用系统环境变量$_SERVER,可以查看到HTTP请求的信息,其中两项重要的是

把其加入代上面的代码中,并且将其写入到本地文件中来,全部代码

    CopyRight 2013 www.doucube.com  All Rights Reserved*/traceHttp();define("TOKEN", "weixin");$wechatObj=new wechatCallbackapiTest();if(isset($_GET['echostr'])) {$wechatObj->valid();}else{$wechatObj->responseMsg();}class wechatCallbackapiTest{publicfunction valid(){$echoStr=$_GET["echostr"];if($this->checkSignature()){echo$echoStr;exit;}}privatefunction checkSignature(){$signature=$_GET["signature"];$timestamp=$_GET["timestamp"];$nonce=$_GET["nonce"];$token= TOKEN;$tmpArr=array($token,$timestamp,$nonce);sort($tmpArr);$tmpStr=implode($tmpArr );$tmpStr=sha1($tmpStr );if($tmpStr==$signature ){returntrue;}else{returnfalse;}}publicfunction responseMsg(){$postStr=$GLOBALS["HTTP_RAW_POST_DATA"];if(!empty($postStr)){$postObj=simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername=$postObj->FromUserName;$toUsername=$postObj->ToUserName;$keyword=trim($postObj->Content);$time=time();$textTpl= "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";if($keyword== "?" ||$keyword== "?"){$msgType= "text";$contentStr=date("Y-m-d H:i:s",time());$resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);echo$resultStr;}}else{echo"";exit;}}}function traceHttp(){logger("\n\nREMOTE_ADDR:".$_SERVER["REMOTE_ADDR"].(strstr($_SERVER["REMOTE_ADDR"],'101.226')? " FROM WeiXin": "Unknown IP"));logger("QUERY_STRING:".$_SERVER["QUERY_STRING"]);}functionlogger($log_content){if(isset($_SERVER['HTTP_APPNAME'])){//SAEsae_set_display_errors(false);sae_debug($log_content);sae_set_display_errors(true);}else{//LOCAL$max_size= 500000;$log_filename= "log.xml";if(file_exists($log_filename) and (abs(filesize($log_filename)) >$max_size)){unlink($log_filename);}file_put_contents($log_filename,date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);}}?>

这样,当我们提交之后,就会生成一个log.html文件在当前目录

用浏览器直接打开填写的url,也会写一次文件。

直接用浏览器打开url+log.html路径,我的记录如下:

2013-01-30 10:15:18 2013-01-30 10:15:18 REMOTE_ADDR:212.179.24.103 Unknown IP2013-01-30 10:15:18 QUERY_STRING:

在微信中点击提交一次,再一次生成记录,如下:

2013-01-30 10:15:49 2013-01-30 10:15:49 REMOTE_ADDR:101.226.89.83FromWeiXin2013-01-30 10:15:49 QUERY_STRING:signature=eded789463180edf6c13691398d0cb4c85fb0e23&echostr=5838479218127813673×tamp=1359100969&nonce=1359376876

从上可以看到,这次IP来自101.226.89.83,是微信的IP,我把这个IP加入到代码中自行判断

现在可以根据下面的来检测自己的问题在哪一个地方

如果没有生成日志:

那是微信服务器都没有联系到你,需要检查服务器是否可以通过公网访问,URL路径是否存在并且正确。

如果生成了日志:

如果你生成了日志,有REMOTE_ADDR和QUERY_STRING,查看IP是不是来自上海(目前微信服务器部署在上海电信机房,几次故障都说是上海挖路引起的),查看QUERY_STRING格式是否和官方指南中描述的类似,如果这些没有问题,那先检查Token填写的是否和程序中的一致,再检查程序是否有问题。

点击进入 微信公众平台开发入门教程

Token验证失败的解决方法相关推荐

  1. 微信token验证失败的解决方法

    微信token验证失败的解决方法 参考文章: (1)微信token验证失败的解决方法 (2)https://www.cnblogs.com/kenshinobiy/p/5433705.html 备忘一 ...

  2. python token验证失败百分百解决_微信token验证失败的解决方法

    一.问题由来 在使用URL和Token启用微信公众平台开发模式消息接口的时候,我们会碰到下面三种情况 1. token校验失败 这样回头检查一下各项配置是否正确.如果确定配置没有问题,请按下面的方法检 ...

  3. 微信公众号服务器配置token验证失败的解决方法

    原因:修改了域名后,更换服务器地址失败.原来是可以验证通过的,代码没有变动过. 查找了很多解决方法都没有成功解决,通过APIPost测试也是正常返回原来的"echostr",但是死 ...

  4. python token验证失败百分百解决_Token验证失败的解决方法

    Token验证失败的解决方法 一.问题由来 在使用URL和Token启用微信公众平台开发模式消息接口的时候,我们会碰到下面三种情况 1. token校验失败 这样回头检查一下各项配置是否正确.如果确定 ...

  5. 关于django 1.10 CSRF验证失败的解决方法 - python

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 最近工作闲,没事自学django,感觉这个最烦的就是各版本提供的api函数经常有变化,不是取消了就是参数没有了,网上搜到 ...

  6. idea验证失败_iphone x验证失败怎么办?苹果iphone x验证失败的解决方法

    前几日刚入手iphone x,今天发现iphone x验证失败了,不知道什么原因最后研究了一番发现是网络的原因,那么如何解决呢?下面由我带给大家iphonex验证失败,苹果x验证失败解决方案. 苹果i ...

  7. froala editor富文本编辑器出现验证失败的解决方法

    froala editor富文本编辑器出现验证失败的解决方法 出现这种情况,首先要下载源码包地址 https://www.froala.com/wysiwyg-editor 之后引用本地的 froal ...

  8. jeecg微服务项目调用接口报错Token验证失效的解决方法

    大家好,我是雄雄. 前言 今天,记录一篇啼笑皆非的问题. 昨晚上在做微信公众号开发时,遇到了个解决好久的问题,即:微信公众号上配置服务器信息之后,回调服务器接口总是报错token验证失败. 剧透(这么 ...

  9. ajax导致csrf验证失败的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 解决方法如下: function getCookie(name) {var cookieValue = null;if (do ...

  10. office 2007 验证失败的解决方法

    转自   http://www.pxue.com/Html/1224.html [ 分类:技巧收集 ]   [阅读:939 ]   [ 日期:2009-9-4 ]   [ 来自:WZ ] 今天重装系统 ...

最新文章

  1. 期望dp ---- B. Tree Array 思维+期望dp 逆序对期望数
  2. c语言 python rsa库_Python遇到性能瓶颈怎么办?
  3. Eclipse不能导入工作区项目的解决和win10下JDK的path环境变量
  4. 有限元基础: Jacobian 矩阵和高斯积分
  5. Select下拉列表框(添加、删除option)
  6. 基于51单片机的密码锁
  7. 算法一看就懂之「 数组与链表 」
  8. animate改变背景颜色_3D MAX2016视口背景设置里各参数的含义详解 - 3dmax基础操作入门教程-3dmax材质教程,3d材质贴图教程参数,vray材质参数,3dmax贴图教程...
  9. Python爬虫番外篇之关于登录
  10. 火狐浏览器linux最新版本下载,火狐浏览器Linux最新版下载
  11. 计算机论文源码重复太多,知网查重代码重复率太高怎么办
  12. php当前时间加几天_php实现当前时间增加天数的方法
  13. 用Javascript实现鼠标经过某一行,那一行变色
  14. 一步一步教你网站采集规则
  15. FFmpeg —— 录制Windows桌面与麦克风,音视频同步(附源码)
  16. linux下安装pymssql
  17. nodejs html 生成图片,使用nodejs将html5 canvas base64编码图片保存为文件
  18. AI智能网关如何应用于智慧安监?
  19. 英杰华、斯柯达、通用汽车、微星、万达地产、OYO等公司高管变动
  20. 【jzoj4905】【NOIP2016提高组】【†换教室】【动态规划】【期望】

热门文章

  1. 国内外计算机视觉领域优秀研究团队汇总
  2. U盘被写保护,无法格式化
  3. 软件测试---组织架构图和范围测试列表
  4. eds能谱图分析实例_如何使用EDS对材料进行定性定量分析?
  5. 国内学术科研论坛整理
  6. 零基础H5小游戏傻瓜教程_教您如何制作微信小游戏
  7. AVC/HEVC/VVC/AV1 块划分、帧内预测过程及预测模式编码
  8. word中的左拐箭头和向下箭头的差别
  9. 英雄联盟一直连接服务器win10,win10上玩英雄联盟无法连接服务器是怎么回事
  10. 站在两个世界的边缘 程浩,一个认真生活过的人