一、问题由来

在使用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请求的信息,其中两项重要的是

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

/*

*/

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 WeiXin

2013-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填写的是否和程序中的一

致,再检查程序是否有问题。

我的微信:graent_hu

欢迎扫码加我的微信好友,有什么问题我们可以一起探讨,有什么需要也随时欢迎发消息给我~

转载请注明出处:

本文链接:https://www.wlyc.cn/post-3.html

url 微信公众号开发 配置失效_微信开发者中心配置服务器url时token验证失败的原因和处理方法...相关推荐

  1. 微信公众号开发java流程_微信公众号开发教程java 编程语言的特点及选择

    微信公众号开发教程java 编程语言的特点及选择 微信公众号为用户提供了相关的工具,来对微信公众号进行一个简单的开发.但是如果想实现一些复杂的功能,其实还是要借助于一些编程语言的使用.所以要了解,在微 ...

  2. 【微信公众号开发】八、微信JS发起支付

    重要声明:本文章仅仅代表了作者个人对此观点的理解和表述.读者请查阅时持自己的意见进行讨论. 目录 本系列博文还包含了下面的博客: [微信公众号开发]一.运作及配置流程简介 [微信公众号开发]二.解析微 ...

  3. 微信公众号开发系列-玩转微信开发-目录汇总

    引言 最遗憾的不是把理想丢在路上,而是理想从未上路. 每一个将想法变成现实的人,都值得称赞和学习.致正在奔跑的您! 在现在这个无处不在的互联网背景下,各种应用已不再仅仅局限于网页或桌面应用了,IOS. ...

  4. 【微信公众号开发】六、微信JS的使用

    文章详情:[微信公众号开发]六.微信JS的使用 文章链接:https://www.microanswer.cn/blog/16

  5. 微信公众号开发《三》微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索

    本次讲解微信开发第三篇:获取用户地址位置信息,是非常常用的功能,特别是服务行业公众号,尤为需要该功能,本次讲解的就是如何调用微信JS-SDK接口,获取用户位置信息,并结合百度地铁,实现在线地图搜索,与 ...

  6. 微信公众号开发用书php,php微信公众号开发(3)php实现简单微信文本通讯

    <PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯>要点: 本文介绍了PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯,希望对您有用.如果有疑问,可以联系我 ...

  7. 微信公众号开发(一) 微信网页授权登录

    微信网页授权登录 前期准备 授权登录 获取微信数据 处理授权拒绝 前期准备 1.微信公众号开发,首先要搞一个公众号,开发阶段可以申请一个公众平台测试账号. (进入到微信公众公众平台,找到开发者工具,点 ...

  8. 微信公众号开发之实现自定义微信公众号菜单和跳转第三方网页

    自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCE ...

  9. 微信公众号开发系列-12、微信前端开发利器:WeUI

    1.前言 通过前面系列文章的学习与讲解,相信大家已经对微信的开发有了一个全新的认识.后端基本能够基于盛派的第三方sdk搞定大部分事宜,剩下的就是前端了.关于手机端的浏览器的兼容性问题相信一直是开发者们 ...

最新文章

  1. SAP MM Purchasing Report中Selection Parameter WE101 WE103
  2. KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)
  3. python 获取文件后缀名的方法
  4. 云栖发布|企业级互联网架构全新升级 ,助力数字创新
  5. 在WPS中提取出的照片在哪找_WPS技巧 | 找不到合适的配图?教你一招搞定
  6. thinkphp5 composer
  7. Codeforces 138C(区间更新+离散化)
  8. CentOS 使用iso镜像安装本地 yum 源
  9. python 爬虫 糗百成人
  10. html ul 的类别,CSS 类表样式(ul)
  11. 40G以太网光模块解决方案
  12. WeX5 V3.6 正式版核心特性
  13. Pytorch中torchvision.datasets.ImageFolder报错:Found 0 files in subfolders of:XXX,完美解决!
  14. 个人项目——基于STM32的智能教务显示系统
  15. 国外的一些测试技术网站
  16. 回溯、图论——最大团问题(求最大完全子图)
  17. Keras实战---猫狗大战
  18. 关于魔兽争霸的分辨率设置,WAR3分辨率设置
  19. “求职路”上英语口语面试问答大全收藏
  20. 优秀管理者必看--你的下属跳槽的八大征兆,你注意到了吗?(超级准,不看后悔的。。。)

热门文章

  1. 手机管理应用研究【6】——省电管理篇
  2. 【安装ActionScript Profiler插件】
  3. iOS 判断机型是否为iphonex
  4. 【OpenGL】计算机图形学OpenGL基础
  5. Android 的ARM架构和X86架构
  6. 12123怎么会显示服务器异常,12123怎么交罚款怎么总是支付失败
  7. 分享 5 个 JSON 相关的常用小技巧
  8. uni-app实现一个循环卡片效果
  9. HTML+CSS大作业:商城网站设计——仿天猫购物商城(7页) HTML+CSS+JavaScript
  10. exe msdt 无法上网_Win10专业版无法连接到此网络错误