一、问题由来

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

1. token校验失败

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

2. 请求URL超时

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

3. 提交成功

恭喜你,配置成功了。

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

二、问题分析

首先要了解的是什么是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请求的信息,其中两项重要的是

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

/*

方倍工作室 http://www.cnblogs.com/txw1958/

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

{

public function valid()

{

$echoStr = $_GET["echostr"];

if($this->checkSignature()){

echo $echoStr;

exit;

}

}

private function 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 ){

return true;

}else{

return false;

}

}

public function 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 = "

%s

0

";

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"]);

}

function logger($log_content)

{

if(isset($_SERVER['HTTP_APPNAME'])){ //SAE

sae_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 IP

2013-01-30 10:15:18 QUERY_STRING:

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

2013-01-30 10:15:49

2013-01-30 10:15:49 REMOTE_ADDR:101.226.89.83 From WeiXin2013-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填写的是否和程序中的一致,再检查程序是否有问题。

如果上面的方法你没有看懂,或者无法解决该问题,建议你从微信公众平台的入门教程开始,学习一下微信公众平台开发的基础

python token验证失败百分百解决_微信token验证失败的解决方法相关推荐

  1. python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  2. java实现登录验证机制的技术_基于token的登陆验证机制

    session简介 做过Web开发的程序员应该对Session都比较熟悉,Session是一块保存在服务器端的内存空间,一般用于保存用户的会话信息. 用户通过用户名和密码登陆成功之后,服务器端程序会在 ...

  3. 小程序setdata优化_微信小程序 setData的使用方法详解

    微信小程序 setData的使用方法详解 微信小程序 setData的使用方法详解 最近在使用微信小程序的setData时,遇到了以下问题.如下: 官网文档在使用setData()设置数组对象的某个元 ...

  4. java微信无感支付怎么开通_微信无感支付怎么设置?方法介绍

    随着微信支付在我们日常生活中的不断普及,微信更是不负众望,相继推出了很多新功能,这段时间,微信无感支付让很多用户交口称赞,无数的车主朋友都微信无感支付体验到了快速支付通行费的方便.那么,你知道微信无感 ...

  5. 微信小程序点击带id参数跳转_微信小程序页面跳转方法和携带参数详解

    1.页面跳转方式 (1)标签跳转 open-type的属性值对应api里的用法即wx.的用法 1 跳转到新页面 (2)wx.navigateTo 方法跳转 此方法能够从跳转的页面会回到当前页面 1 w ...

  6. 点钞机语音怎么打开_微信语音怎么转发?原来方法这么简单,你还不知道吗

    微信语音怎么转发?原来方法这么简单,你还不知道吗 微信的用处很多,实用功能也很多,但可惜的是微信不能转发语音.虽然说这样设计,是为了降低被骗的情况,但有时候真的不是很方便.那么微信语音,应该怎么转发呢 ...

  7. win10开机慢怎么解决_电脑开机速度慢怎么解决?Win10电脑开机速度变慢原因及解决方法...

    如今买电脑,我们都会首选固态硬盘,固态硬盘相比机械硬盘最大的好处就是读写速度快,尤其是电脑开机的时候,系统安装在固态硬盘正常需要10秒左右就可以成功进入桌面,而机械硬盘正常至少30-40秒左右才可以进 ...

  8. 用python写一个抽奖小程序_微信小程序抽奖助手一键参与抽奖

    写在前头的话 最近"沉迷"于微信一款小程序,就是抽奖助手.反正这个抽奖几乎不用什么成本, 就是一个个抽奖活动点进去点击参与抽奖比较麻烦.要是如果有个程序一键解决这些步骤,那就是零成 ...

  9. python 公众号爬虫_python_爬虫_微信公众号抓取

    importrequests,pymysqlimportjson,jsonpath,random,re,time,datetime,os,imghdrfrom lxml importetreefrom ...

最新文章

  1. Cell | 小基因开启微生物组研究新领域——大规模鉴定微生物基因组编码的小蛋白质...
  2. win10更新后程序路径盘符变成*星号解决方法
  3. android 横向滑动事件,android左右手势滑动事件处理
  4. 2014编程之美热身赛 - 传话游戏
  5. SpringFox 3.0.0(包含springfox-swagger2-3.0.0)——无法访问/swagger-ui.html解决方案
  6. 云原生应用程序运行时 Kyma 的主要特性介绍
  7. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 24丨不同国家的天气类型【难度简单】​
  8. mysql 导入 sqlite_Mysql 数据导入SQlite
  9. 字串变换(洛谷-P1032)
  10. Android 如何使用juv-rtmp-client.jar向Red5服务器发布实时视频数据
  11. gdb java,调用gdb来调试java程序
  12. opencv(10)图像变换之边缘检测
  13. 郑大计算机组成原理试题,郑州大学计算机组成原理试卷A.doc
  14. (转帖出自ESRI BBS)有关于GIS思想
  15. Redis客户端连接远程Redis服务器
  16. thinkpadE430c加装固态硬盘小记
  17. AirDisk存宝Q2 网盘转接器 移动硬盘伴侣NAS私有云
  18. 像 IDE 一样使用 vim
  19. PTA天梯赛L1-040 最佳情侣身高差(c语言实现)
  20. 联想ghost重装系统_一键ghost官网,图文详解一键ghost怎么重装系统

热门文章

  1. 2022高级Java笔试总结,阿里P8重点推荐的火爆全网MySQL路线笔记
  2. 冯诺依曼计算机体系结构
  3. 将字符串,数组等任意格式转为json(JSON)数据,Arrays是数组工具类,将任意数组转字符串或数组操作
  4. NLP Learning | 初识NLP
  5. 素描嘴巴如何画的饱满?学学这些方法和干瘪嘴巴说再见!
  6. 2K和XP下的CMD命令
  7. css3切角文本框_CSS3如何实现4个切角
  8. 转 shell编程100例
  9. cygwin+编译php,Windows 下:cygwin编译 HTS 安装
  10. 启用vsftpd日志及其解读