基于ThinkPHP5框架做的微信公众号开发(001)
来源:互联网 发布:网络用户管理系统注册 编辑:程序博客网 时间:2024/06/07 19:51
<?phpnamespace app\index\controller;/** * wechat php test *///define your tokendefine("TOKEN", "sudons");class Wechat{ public function index(){ if (isset($_GET['echostr'])) { $this->valid(); }else{ $this->responseMsg(); } }public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature() && $echoStr){ echo $echoStr; exit; } } private function checkSignature() { // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } //获取微信提交的参数 $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; //微信提交参数放入数组 $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule字典序排序 sort($tmpArr, SORT_STRING); //拼接字符串 $tmpStr = implode( $tmpArr ); //加密 $tmpStr = sha1( $tmpStr ); //检验signature if( $tmpStr == $signature){ return true; }else{ return false; } } public function responseMsg() {//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post dataif (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); switch ($RX_TYPE) { case "text": $resultStr = $this->receiveText($postObj); break; case "image": $resultStr = $this->receiveImage($postObj); break; case "location": $resultStr = $this->receiveLocation($postObj); break; case "voice": $resultStr = $this->receiveVoice($postObj); break; case "video": $resultStr = $this->receiveVideo($postObj); break; case "link": $resultStr = $this->receiveLink($postObj); break; case "event": $resultStr = $this->receiveEvent($postObj); break; default: $resultStr = "unknow msg type: ".$RX_TYPE; break; } echo $resultStr; }else { echo ""; exit; } } //统一用文本回复 private function transmitText($object, $content, $flag = 0) { $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>%d</FuncFlag> </xml>"; $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag); return $resultStr; } //1.事件消息 private function receiveEvent($object) { $contentStr = ""; switch ($object->Event) { case "subscribe": $contentStr = "欢迎关注塞雅创想"; break; case "unsubscribe": $contentStr = ""; break; case "CLICK": switch ($object->EventKey) { default: $contentStr = "你点击了菜单: ".$object->EventKey; break; } break; default: $contentStr = "receive a new event: ".$object->Event; break; } $resultStr = $this->transmitText($object, $contentStr); return $resultStr; } //2.文本消息 private function receiveText($object) { $funcFlag = 0; $contentStr = "你发送的是文本,内容为:".$object->Content; $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr; } //3.图片消息 private function receiveImage($object) { $funcFlag = 0; $contentStr = "你发送的是图片,地址为:".$object->PicUrl; $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr; } //4.语音消息 private function receiveVoice($object) { $funcFlag = 0; $contentStr = "你发送的是语音,媒体ID为:".$object->MediaId; $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr; } //5.视频消息 private function receiveVideo($object) { $funcFlag = 0; $contentStr = "你发送的是视频,媒体ID为:".$object->MediaId; $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr; } //6.位置消息 private function receiveLocation($object) { $funcFlag = 0; $contentStr = "你发送的是位置,纬度为:".$object->Location_X.";经度为:".$object->Location_Y.";缩放级别为:".$object->Scale.";位置为:".$object->Label; $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr; } //7.链接消息 private function receiveLink($object) { $funcFlag = 0; $contentStr = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url; $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr; }}?>
阅读全文
0 0
- 基于ThinkPHP5框架做的微信公众号开发(001)
- 基于aiohttp web框架的微信公众号开发(项目)
- Thinkphp5 微信公众号token验证不成功的原因
- 微信公众号开发后台基本搭建(基于NodeJs的express框架)
- 基于Django的微信公众号开发(3) -- 通过微信公众号开发者认证
- 项目总结-基于SpringMVC的微信公众号开发
- 基于python的微信公众号开发
- 基于play Framework 2.2的微信公众号开发
- 基于JAVA的微信公众号开发【学习一】
- 基于JAVA的微信公众号开发【学习二】
- 微信公众号智能识别回复的实现(基于ThinkPHP框架)
- 微信公众号取消关注事件要做的处理,php开发公众号
- 微信公众号新浪百度云做服务器 (上传php文件,开发微信公众平台)
- thinkphp5+easywechat:微信公众号内支付
- 基于SAE和lanewechat开源PHP微信框架开发微信公众平台(一)成功启用服务器配置
- 微信公众平台开发教程(九)微信公众平台通用开发框架
- 微信公众平台开发教程(九)微信公众平台通用开发框架
- 微信公众平台开发教程(九)微信公众平台通用开发框架
- Java集合框架的知识总结(1) 说明:先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析。 1、综述 所有集合类
- 关于public,static的一些总结
- 初学者的浅谈
- 结构算法 001 线性表的顺序存储--顺序表
- Java中反射(Reflection)的应用
- 基于ThinkPHP5框架做的微信公众号开发(001)
- (转)美国:2016-2045新科技趋势报告
- Android JNI 传递对象
- AD印制板多引线连接
- 【状态压缩dp】【轮廓线dp】【互不侵犯King】【HYSBZ】【BZOJ】【1087】
- maven生命周期学习
- 【Cython】Cython 基本用法
- 文章标题 汇编 判断闰年
- BZOJ 3676: [Apio2014]回文串 回文自动机