微信开发“TOKEN验证失败”根源和解决方法_微信开发者token验证失败-程序员宅基地

技术标签: TOKEN验证失败  公众号  微信  微信公众号  

引子

微信公众号开启开发者模式时,需要配置“服务器配置”,但在配置这个东西时有很多坑需要注意。

网上解决的问题这里就不再赘述,下面说的是我碰到的问题,同时也叙述了“TOKEN验证失败”的根源问题。

背景

之前,我的公众号一直正常工作,但由于需要更换服务器,就把网站做了迁移,数据也迁移的,但是在修改服务器配置时,始终提示“TOKEN验证失败”。

于是艰难的排查之路开始了。

我的后台是PHP的,于是我在入口文件中加入了客户机访问URL输出的方法,将访问地址写入了日志,并将TOKEN验证也加入了输出。比较诡异的是,每一步的输出都很正常,但始终提示“TOKEN验证失败”。

本着“腾讯这种大公司不会出这个错”的思想,还是将定位问题的重心放到自己的代码中。


开始一步一步排查验证接口。

微信服务器访问开发者服务器的接口形态如下:

http://ip/verifyToken.php?signature=728e5688ce9ed6e00ea498fe8b11e35d5c16bbd7&echostr=8085854468487076604&timestamp=1530682104&nonce=1130401568

微信服务器的唯一要求就是:“原样返回echostr”,这个并不难,甚至在服务器端不做TOKEN验证,直接原样返回echostr就可以通过验证。


于是,就新建了一个php文件,并直接 exit($_GET['echostr']),修改了下服务器配置并提交,验证成功。由此说明,问题还是出现在自己的业务代码中。

继续排查自己的接口。在Chrome中,仔细分析verifyToken.php接口的请求和返回。

突然发现Response虽然是字符串,但是字符串输出并不是在第一行。如下图


然后就明白了,必然是代码里哪里输出空行导致最终结果字符串多了些不需要的字符。

于是,有目标的跟踪排查,发现在一个php工具类里,写了php起始标签和结束标签 <?php ?>,而且在结束标签后面还有有空行。删除php结束标签,修改服务器配置到之前的配置,提交,验证通过。

至此,"TOKEN验证失败"的根源也找到了,同时,微信服务器的解析方式也了解了。
微信服务器拿到返回结果后 没有做任何操作,直接跟原字符串做对比,并返回对比结果。


总结

所以,不论你后台使用的是什么语言,在出现"TOKEN验证失败"的问题时,首先看看公众平台和服务器代码中的TOKEN配置是否一致,然后不需要考虑其他,直接拿到微信服务器访问开发者服务器的接口,直接分析这个接口就好。这个接口的返回必须与接口访问中的echostr字符串一致,不能有任何其他不必要的字符。
最常见的问题是多了回车符、换行符、服务器文件编码不同多出来的起始符或结束符等。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/freedomzcd/article/details/80913235

智能推荐

No 'Access-Control-Allow-Origin' header is..._安卓 no 'access-control-allow-origin' header-程序员宅基地

文章浏览阅读607次。知道你急着解决,所以直接贴解决方法。这个问题呢,简单来说,就是允许跨域问题,一般是前端请求后台接口的时候,出现。原因:不是说后台的ip地址和前端请求ip相同,是因为前端的请求没有在整个项目中包含。第一种解决方法:前端请求的页面放在项目目录下即可,这样保护了后台接口。(建议)第二种解决方法:后台接口设置: response.setHeader("Access-Control-Allo..._安卓 no 'access-control-allow-origin' header

mysql数据blob类型中文乱码-程序员宅基地

文章浏览阅读2.8k次。1.找到mysql安装目录下的my.ini文件注释掉 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"前面加上# 符号就注释掉了,2.blob字段类型转为text 类型 即可..._blob字段在sqltile中乱码

【单片机笔记】集USB充电、USB供电和电池供电的电源设计_usb电源 和单片机电源之间-程序员宅基地

文章浏览阅读1.4k次。原文:https://blog.csdn.net/qq997758497/article/details/79401420在小型产品上经常要用到电池供电,这样就需要给电池充电。这里记录下1S电池3.7V的充电和供电方案。先贴上原理图:来简要分析下:1、给系统供电的最终端是VCC2、单电池供电:在没有插USB的情况下P沟道MOS管的G极由于下拉电阻所以保持为低电平,此时M..._usb电源 和单片机电源之间

数据集 免费公开-程序员宅基地

文章浏览阅读419次。数据集https://www.graviti.cn/

微信小程序的安装-windows_小程序需要window如何下载-程序员宅基地

文章浏览阅读1.3k次。1.下载微信小程序安装包下载链接: https://pan.baidu.com/s/1R7Av24IY9vk4i9-H97uTBA 密码: mb5j2.双击程序,点击运行:3.点击下一步:4.选择接受协议:5.选择目标文件夹,点击安装:6.等待系统安装成功:7.完成之后就可以运行了。_小程序需要window如何下载

Uniapp之WebSocket使用攻略_uniapp使用webscock如何传token-程序员宅基地

文章浏览阅读1.9k次,点赞4次,收藏11次。websocket是什么?是一種網路傳輸協定,可在單個TCP連接上進行全雙工通訊,位於OSI模型的應用層。WebSocket協定在2011年由IETF標準化為RFC 6455,後由RFC 7936補充規範。Web IDL中的WebSocket API由W3C標準化。WebSocket使得客戶端和伺服器之間的資料交換變得更加簡單,允許伺服器端主動向客戶端推播資料。在WebSocket API中,瀏覽器和伺服器只需要完成一次交握,兩者之間就可以建立永續性的連接,並進行雙向資料傳輸 ..._uniapp使用webscock如何传token

随便推点

popstate 监听app、浏览器的返回_window.addeventlistener('popstate-程序员宅基地

文章浏览阅读8.1k次,点赞2次,收藏9次。在实际开发中,遇到需要在当前web页面监听app、浏览器返回的情况,进过一顿搜索后,终于找到一种比较靠谱的方式!下面话不多说,直接上代码:&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;meta name="viewport" content="initial-_window.addeventlistener('popstate

重载加号运算符使其能进行矩阵相加_用重载运算符实现矩阵相加-程序员宅基地

文章浏览阅读514次。//重载+号运算符 使其两个矩阵相加//矩阵的输入输出都需要使用for循环 行和列的循环#include<iostream>using namespace std;class mix{public: friend mix operator+(mix&, mix&); void printin(); void printout();private: int arr[2][3];};//输入数据void mix::printin(){ cout <_用重载运算符实现矩阵相加

R语言环境空间理解_r environment-程序员宅基地

文章浏览阅读2.2k次。环境空间 ( environment ) 对于刚接触 R 语言的我来说,是比较陌生的。虽然不了解它的运行原理,但也不影响我使用 R 语言。环境空间是 R 语言中关于计算机方面的底层设计,主要用于R语言是环境加载器。通过环境空间,封装了加载器的运行过程,让使用者在不知道底层细节的情况下,可以任意加载使用到的第三方的 R 语言程序包。介绍在R语言中,不管是变量,对象,或者函数,都存在于 R 的环境空间中,R程序在运行时都自己的运行时空间。R 语言的环境 (environment) 是由内核定义的一个数据结构_r environment

最容易看懂的汇编语言书籍:汇编语言 王爽_汇编阅读书籍-程序员宅基地

文章浏览阅读1.2w次,点赞3次,收藏5次。关于底层知识的学习,汇编当然是绕不过,当你需要调优一小段代码时,你需要看的汇编语言。通过学习汇编语言,你能更清楚明白的了解整个计算机的计算过程,指令相关知识,对学习计算机帮助甚大。目录:第1章 基础知识1.1 机器语言1.2 汇编语言的产生1.3 汇编语言的组成1.4 存储器1.5 指令和数据1.6 存储单元1.7 CPU对存储器的读写1.8 地址总线1.9 数据总线1.10 控制总线1.11 内存地址空间(概述)1.12 主板1.1..._汇编阅读书籍

如何通过调整播放倍速缩短多个视频的时长_如何快进视频缩短时间-程序员宅基地

文章浏览阅读601次。视频太长又不想删减里面的内容,大家一般通常会通过加速的方式,让时间变短,可是在视频数量很多的情况下,该如何快速处理呢?下面随小编一起来试试。所需工具一台电脑视频素材操作步骤在浏览器中搜索【视频剪辑高手】并安装到电脑上,此款软件绿色安全,可以放心使用进入软件,在“剪辑视频”这个版块之中,单击“添加视频”按钮在所弹出的对话框之中,选中这些视频素材,并点打开,即可导入全部视频接着在“设置新视频选项”中,勾选“播放倍速”,先将数值调整为0.5,再去剪辑(数值大于1为慢速,小于1为快速进入“浏览”窗口_如何快进视频缩短时间

k3s集群及rancher部署_rancher+k3s+云校-程序员宅基地

文章浏览阅读365次。一、k3s介绍二、k3s部署三、rancher部署四、集群导入rancher_rancher+k3s+云校