WinxinSdk.class.php
<?php
/*** Created by PhpStorm.* User: Administrator* Date: 2018/3/28* Time: 18:56**/class WinxinSdk
{private $appID = "wx***2d";private $appsecret = "51***80";public static $access_token = "";//也可以写入sessionpublic static $expires_in = 0;//token失效时间public function WinxinSdk($appID,$appsecret){$this->appID = $appID;$this->appsecret = $appsecret;}public function getToken(){//获取token$token = '';if(self::$access_token=="" && time()>self::$expires_in-360)//差十分钟获取就重新获取新的
        {$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appID&secret=$this->appsecret";$token = $this->curlGet($url);$token = json_decode($token);if(isset($token->access_token)){self::$access_token = $token->access_token;self::$expires_in = time()+$token->expires_in;return  $token->access_token;}else{return false;}}return false;}/** reposeMsg 没封装好呢*/public function reposeMsg(){//接收事件推送过来的数据,并回复//文案地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];//获取到xml数据后,处理消息类型,并设置回复消息内容(回复就是直接打印xml数据)//数据格式$arr = simplexml_load_string($postArr);if(strtolower($arr->MsgType)=="event"){$toUser = $arr->ToUserName;$foUser = $arr->FromUserName;$msgType = 'text';$createTime = time();$content = '尊敬的'.$foUser."谢谢你的关注\n";if(strtolower($arr->Event)=="subscribe"){//订阅$temp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$temp = sprintf($temp,$foUser,$toUser,$createTime,$msgType,$content);return $temp;}}}/** textMsg 没封装好呢*/public function textMsg(){//接收文本,并回复//文案地址:$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];//获取到xml数据后,处理消息类型,并设置回复消息内容(回复就是直接打印xml数据)//数据格式$arr = simplexml_load_string($postArr);if(strtolower($arr->MsgType)=='text'){$toUser = $arr->ToUserName;$foUser = $arr->FromUserName;$msgType = 'text';$createTime = time();$content = $arr->Content."888888".$toUser."\n";$temp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$temp = sprintf($temp,$foUser,$toUser,$createTime,$msgType,$content);return $temp;}}/** getQR 没封装好呢*/public function  getQR($data = null){//获取二维码$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".self::$access_token;$jsonData = '{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}';$res = $this->curlPost2($url,$jsonData);return $res;}public function customMenu($data){//自定义菜单$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".self::$access_token;$res = $this->curlPost2($url,$data);return $res;}public function onclickMenu(){//点击自定义菜单市出发内容//$postArr = file_get_contents("php://input");$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];$arr = simplexml_load_string($postArr);//$this->logs('inclickMenu.txt',(array)$arr->ToUserName);if(strtolower($arr->MsgType)=="event"){if(strtolower($arr->Event)=="click"){//接受消息格式$rtemp = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[FromUser]]></FromUserName><CreateTime>123456789</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[CLICK]]></Event><EventKey><![CDATA[EVENTKEY]]></EventKey></xml>";//推送文本格式$temp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$toUser = $arr->ToUserName;$foUser = $arr->FromUserName;$msgType = 'text';$content = '你点击了--'.$arr->EventKey;$createTime = time();$temp = sprintf($temp,$foUser,$toUser,$createTime,$msgType,$content);return $temp;}}}public function curlGet($url){//get请求接口$ch = curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$data = curl_exec($ch);$httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);return ($httpCode>=200 && $httpCode<300) ? $data:false;}public function curlPost($url,$data = null){//post请求接口$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);if (!empty($data)){curl_setopt($ch, CURLOPT_POST, TRUE);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);}curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);curl_close($ch);return  $output;}public function curlPost2($url,$data){//第一个post方法//$data = http_build_query($data);$opts = array ('http' => array ('method' => 'POST','header'=> "Content-type: application/x-www-form-urlencodedrn","Content-Length: " . strlen($data) . "rn",'content' => $data));$context = stream_context_create($opts);$html = file_get_contents($url, false, $context);return $html;}public function logs($file,$data){//打印日志(is_array($data))?$data = print_r($data,true):$data;file_put_contents($file,$data);}}

后台接口配置信息文件,用来接收微信发送的xml消息openweixin.php:

<?php
/*** Created by PhpStorm.* User: Administrator* Date: 2018/3/27* Time: 20:16*/
//此处简单的实现一个自动加载
spl_autoload_register(function($class){include_once ("./".$class.".class.php");
});
//文档网址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319//1.将timestamp,nonce,token按字典序排序 (参数名ASCII码从小到大排序(字典序))$timestamp = @$_GET['timestamp'];$nonce = @$_GET['nonce'];$token= "fps2";$signature = @$_GET['signature'];$arr = array($timestamp,$nonce,$token);sort($arr);//2.将排序后的三个参数拼接后用sha1加密$tmpstr = implode('',$arr);$tmpstr = sha1($tmpstr);
//3.将加密后的字符串与signature进行对比,判断该请求是否来自微信if($tmpstr == $signature && isset($_GET['echostr'])){//微信服务器配置 第一次接入会验证合法性,之后接收事件的区别是少传 $_GET['echostr'] 这个参数echo $_GET['echostr'];exit;}else{//这里可以接收微信服务器传递的事件$appID = "wx***2d";$appsecret = "51****80";$wxSdk = new WinxinSdk($appID,$appsecret);$wxSdk->getToken();//echo WinxinSdk::$access_token;//下面只是测试,其实订阅和发文字消息不可能同时触发,下面的两条同一时间只会触发一个(但是还是不建议这样写,最好判断分开)echo $wxSdk->reposeMsg();//订阅回复的内容echo $wxSdk->textMsg();//发消息回复的内容echo $wxSdk->onclickMenu();//点击自定义菜单市出发内容

转载于:https://www.cnblogs.com/fps2tao/p/9058425.html

微信公众号开发 回复事件(测试账号)相关推荐

  1. 微信公众号开发-----接送事件推送之关注/取消关注

    本文主要实现的功能包括 关注/取消关注事件 阅读本文之前请先认真阅读微信公众号技术文档之接受事件推送 需注意的是:验证消息的确来自微信服务器和接收事件时微信服务器都会发送请求到填写的服务器地址URL上 ...

  2. 微信公众号开发-菜单事件推送

    菜单事件推送在微信公众号开发中也是属于比较常用的一个功能,就是用户点击菜单之后,微信会将事件推送给接口程序. 不过微信开发到现在也是老生常谈的的东西了,我就简单写一下菜单事件推送的这个过程. 注意:点 ...

  3. python训练营微信公众号真实性_用python进行微信公众号开发(仅测试学习)

    今天看到篇教程,是用python开发微信公众号的,觉得有意思,就敲代码实现了一下,成功后更觉得好玩,故记录,方便开发深入时使用. 基础背景介绍: 首先得有个人微信号(没有自行注册),为方便测试学习: ...

  4. 微信公众号 服务器配置 token 测试,微信公众号开发:基本配置Token验证简单事件回复...

    公众号配置的URL就是你自己服务器上验证TOKEN的方法的地址 比如我验证TOKEN的方法访问地址是http://www.aaa.cn/wx_api.php 那我公众号配置的URL就要填http:// ...

  5. 微信公众号开发-网页授权——配置测试账号

    思路分析: 1.创建测试账号并且配置测试账号的授权回调域名. 2.由前端发起授权请求,微信收到请求后(若是首次打开,并且未关注公众号,微信会弹出授权页,提示用户授权)将重定向到请求url中配置的red ...

  6. 微信公众号开发-测试公众号账号及本地环境搭建(一)

    https://www.cnblogs.com/fengzheng/p/5023678.html 测试公众号 微信公众号有订阅号.服务号.企业号,在注册的时候看到这样的信息,只有订阅号可以个人申请,服 ...

  7. 微信公众号开发C#系列-7、消息管理-接收事件推送

    1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...

  8. 微信公众号开发 - 事件处理和回复消息

    微信公众号开发文章目录 1.微信公众号开发 - 环境搭建 2.微信公众号开发 - 配置表设计以及接入公众号接口开发 3.微信公众号开发 - token获取(保证同一时间段内只请求一次) 4.微信公众号 ...

  9. java推送微信消息换行_微信公众号开发被动回复用户消息,回复内容Content使用了\n换行符还是没有换行...

    使用语言和框架:本人后端开发使用的Python的DRF(Django REST framework)框架 需求:在微信公众号开发时,需要实现自动回复,即被关注回复.收到消息回复.关键词回复 发现问题: ...

最新文章

  1. 权威公布:彻底搞清楚哪些笔记本和台式机主板能够支持42mm SATA M.2 NGFF(2242)接口的固态硬盘!!!...
  2. 16.算法调用优先于手写的循环
  3. 页面中切换echarts主题
  4. 拉取git的分支项目
  5. React开发(260):react项目理解 dva中 console
  6. 5G精华问答 | 5G的关键无线技术是啥?
  7. highcharts中pie统计图获取数据
  8. WCF+EF实战系列一
  9. webpack常用知识点
  10. 使用多线程完成Socket
  11. [ Typescript 手册] JavaScript `Date` 在 Typescript 中的接口
  12. Linux创建内核线程kthread_create的用法介绍
  13. 《算法导论》:关于循环不变式
  14. 卡巴斯基7.0反病毒一年激活码免费领取(官方活动,现已停止)
  15. python进制转换问题“输入十进制整数和欲转换的进制数r,将十进制转换为r进制数(r>=2)”
  16. 存储过程,函数——mysql批量添加随机生成用户信息(生成随机数)
  17. 推荐一个视频网站-播布客
  18. swiper 上滑触发_在绝地求生加入滑铲等战术动作会怎么样?你们想过吗?
  19. python分三行将你的学号姓名班级_python第三次作业——叶耀宗
  20. iOS MP3流媒体播放 边缓冲边播放 FreeStreamer框架

热门文章

  1. 【收藏】搭载nfs是客户端新建操作出现read only file system
  2. vue-element-admin后台管理模板脚手架
  3. hbase读写流程及缓存机制
  4. spark rdd reduceByKey示例
  5. linux 产生50-100之内的随机数
  6. 重启docker 服务命令
  7. CentOS7 安装redis-5.0.5/注册为系统服务及单机启动多个redis服务
  8. python怎么使用json_Python JSON的简单使用
  9. linux 虚拟机安装图形界面,linux 在虚拟机中安装图形界面
  10. php对话框制作,js制作一个简单的对话框教程