楼主是根据慕课网视频学习由于框架及PHP版本不一样造成的问题~!

1. $GLOBALS['HTTP_RAW_POST_DATA’] 

如果你的PHP版本是7及以上获取xml数据包;则使用file_get_contens("php://input");

2. 如果使用Tp5及以上版本的框架

验证token的时候;$echostr如果不存在会自动报错,不往后继续执行代码;

解决: $echostr = isset($_GET['echostr']) ? $_GET['echostr'] : '';

如果存在使用,否则给个空的字符串保证后续代码继续执行;

下面是我的代码,使用TP5,PHP版本7.1,如果需要赋值代码请注意以下几点:

    1. 第二行namespace的路径; 2. class类名需注意是否一样; 3. appid和密码需更改为你自己的;

<?php
namespace app\wechat\controller;
use think\Controller;
use Util\data\Sysdb;class Index extends Controller
{// 验证tokenpublic function index(){$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$echostr   = isset($_GET['echostr']) ? $_GET['echostr'] : '';$nonce     = $_GET["nonce"];$token     = "xiaocong";// 形成数组按字典排序// $array = array();$array = array($nonce, $timestamp, $token);sort($array);// 拼接字符串,进行sha1加密$str = sha1(implode($array));if($str == $signature && $echostr){echo $echostr;exit;}else{$this->reponseMsg();}}// 接收事件推送并回复public function reponseMsg(){// 获取到微信推送过来post数据(xml格式)$postArr = file_get_contents("php://input");// 处理消息类型,并设置回复类型和内容$postObj = simplexml_load_string($postArr);//判断该数据包是否是订阅的事件推送if(strtolower($postObj->MsgType) == 'event'){//如果是关注 subscribe 事件if(strtolower($postObj->Event == 'subscribe')){//回复用户消息(纯文本格式) $toUser   = $postObj->FromUserName;$fromUser = $postObj->ToUserName;$time     = time();$msgType  = 'text';$content  = '欢迎关注小葱的微信公众账号';$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$info     = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);echo $info;}}// 接收文本消息if(strtolower($postObj->MsgType) == 'text' && trim($postObj->Content) == 'tuwen'){$arr = array(array('title' => '小猫咪','description' => "挺可爱的嘛!",'PicUrl' => "http://mmbiz.qpic.cn/mmbiz_jpg/YRib4YUtr7kCc25NewwsdlP5nibbmLVicNfdzwrJ6d3T1j8CThykDPE6rvkgO3mWp9DHbZicP4mvQiaeDrq74WG6yRw/0",'url' => "www.baidu.com"));$toUser   = $postObj->FromUserName;$fromUser = $postObj->ToUserName;$time     = time();$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>" . count($arr) . "</ArticleCount><Articles>";foreach($arr as $key => $value){$template .= "<item><Title><![CDATA[".$value['title']."]]></Title><Description><![CDATA[".$value['description']."]]></Description><PicUrl><![CDATA[".$value['PicUrl']."]]></PicUrl><Url><![CDATA[".$value['url']."]]></Url></item>";}$template .= "</Articles></xml>";$info = sprintf($template, $toUser, $fromUser, $time);echo $info;}}// 获取access_tokenpublic function getwxaccess_token(){$appid  = "xxxxxxxxxxx";$secret = "xxxxxxxxxxxx";$url    = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$res = curl_exec($ch);curl_close($ch);echo $res;}
}

微信公众号测试的那些坑(关注事件/验证token)相关推荐

  1. 微信公众号开发(6)关注事件

    微信公众号开发(6)关注事件 学习目标 推送 event subscribe(关注) unsubscribe(取消关注) CLICK (自定义菜单点击事件) 关键代码如下: $ev = $postOb ...

  2. python+Appnium微信公众号测试实战(坑已填平)

    一.启动Appium服务 有两种方法启动Appium服务 1.客户端启动 启动appium-desktop,点击Start Server按钮 如下图,appium服务已启动 2.命令行启动 命令行输入 ...

  3. c# 微信公众号开发(一)服务器配置,验证token

    新建一个一般处理程序,WechartInterface.ashx 程序代码 public void ProcessRequest(HttpContext context){context.Respon ...

  4. 微信公众号测试账号申请,后台获取公众号关注取关事件,获取用户发送消息

    目录 1.访问微信公众号平台 2.扫码登录 3.登录后进行接口信息配置 4.完成以上配置和代码,将代码部署到服务器上,后台就可以接收到公众号的关注.取关.用户发送的消息等等事件拉! 1.访问微信公众号 ...

  5. springmvc开发微信公众号接口 微信公众号测试账号配置接口Token验证

    转:springmvc开发微信公众号接口 微信公众号测试账号配置接口Token验证 开发前必读以及准备工作: 1.微信公众平台开发是指为微信公众号进行业务开发,为移动应用.PC端网站.公众号第三方平台 ...

  6. php如何判断是否关注,微信公众号判断用户是否已关注php代码解析

    搜索热词 <:微信公众号判断用户是否已关注PHP代码解析>要点: 本文介绍了:微信公众号判断用户是否已关注PHP代码解析,希望对您有用.如果有疑问,可以联系我们. 用户关注公众号,才能参与 ...

  7. 微信公众号怎么生成带粉丝关注统计的渠道二维码

    关于微信公众号在线生成带粉丝关注统计的渠道二维码,第三方工具微号帮提供了渠道二维码生成功能实现,可以为公众号生成带粉丝关注统计的渠道二维码,可以生成多个不同的渠道二维码,每个渠道二维码都可以单独统计粉 ...

  8. 微信公众号测试账号总结

    微信公众号测试账号总结 微信公众号 微信公众号测试账号 申请测试账号 配置微信公众号测试账号 接口配置信息 JS接口安全域名,模板消息接口 网页授权获取用户基本信息 微信公众号 微信公众号测试账号 在 ...

  9. 微信公众号测试生产环境分离实践

    微信公众号测试生产环境分离实践 背景 最近开发微信公众号,部分功能上线后,为了保证不影响线上正常使用,新功能的开发测试遇到以及需要解决的问题如下: 调用微信公众号高级接口(授权,支付等)需要配置域名访 ...

最新文章

  1. 虚拟机实现二层交换机_局域网SDN技术硬核内幕 5 虚拟化网络的实现
  2. 表弟:这数学规律题该怎么解决呢?使用Python你会发现很简单
  3. Leet Code OJ 283. Move Zeroes [Difficulty: Easy]
  4. android编程绘图,Android编程绘图操作之弧形绘制方法示例
  5. 微博如何发订阅消息_微信订阅号或将大变天,微博8年前就这么干了...
  6. 推荐几个Android开发非常有用的工具(for android studio)
  7. 做python开发要用多大的内存_Python 在分配内存需要考虑的问题
  8. java类里的包路径报错_[ERROR] 致命错误: 在类路径或引导类路径中找不到程序包 java.lang...
  9. 这又是什么新玩法?华为Mate 30 Pro真机谍照现身:音量键大变样
  10. 用C语言实现回调函数
  11. [HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢
  12. Extjs GridPanel用法详解
  13. 归并排序JAVA代码详解
  14. 小程序毕设作品之微信校园维修报修小程序毕业设计成品(7)中期检查报告
  15. nod32 lic 99用户授权文件可以用到2015年4月的许可证下载
  16. vue汉王签字板_汉王ESP370U驱动下载|汉王签字板ESP370U驱动(附控件接口) - 驱动无忧...
  17. Windows 10 下载
  18. 利用开源软件 Hugin 实现照片的景深合成
  19. telnet远程管理及AAA认证方式
  20. 图解:什么是二叉堆?

热门文章

  1. matlab中的figure旋转和image旋转
  2. 笔记本无法访问特定无线网络的解决办法
  3. MMSegmentation中MIM使用异常
  4. NENU - 字符串处理课后作业(问题A~问题H) 解析+参考代码(含有C++中的string函数库)
  5. LSP分两种:一种是IFS LSP,一种是non IFS LSP.
  6. 2010年资本市场前高后低 不可能产生大泡沫
  7. 15.6 InnoDB 磁盘(On-Disk)结构
  8. kali Linux 可使用的免驱USB无线网卡
  9. 读书笔记之《从优秀到卓越》
  10. android 关闭硬件加速