博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信公众平台开发接口PHP SDK完整版
阅读量:4308 次
发布时间:2019-06-06

本文共 10382 字,大约阅读时间需要 34 分钟。

官方提供的SDK只有一个文本消息功能,我们将所有消息的消息类型及事件响应都整理了进来,并且加入日志记录,代码如下:

 

更新日志:

2013-01-01 版本1.0

2014-03-15 增加图片、视频、语音的内容回复
2014-04-09 增加菜单链接事件
2014-04-10 修改文本回复的判定方法

responseMsg();}else{ $wechatObj->valid();}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, SORT_STRING); $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)){ $this->logger("R ".$postStr); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); switch ($RX_TYPE) { case "event": $result = $this->receiveEvent($postObj); break; case "text": $result = $this->receiveText($postObj); break; case "image": $result = $this->receiveImage($postObj); break; case "location": $result = $this->receiveLocation($postObj); break; case "voice": $result = $this->receiveVoice($postObj); break; case "video": $result = $this->receiveVideo($postObj); break; case "link": $result = $this->receiveLink($postObj); break; default: $result = "unknow msg type: ".$RX_TYPE; break; } $this->logger("T ".$result); echo $result; }else { echo ""; exit; } } //接收事件消息 private function receiveEvent($object) { $content = ""; switch ($object->Event) { case "subscribe": $content = "欢迎关注方倍工作室 "; $content .= (!empty($object->EventKey))?("\n来自二维码场景 ".str_replace("qrscene_","",$object->EventKey)):""; break; case "unsubscribe": $content = "取消关注"; break; case "SCAN": $content = "扫描场景 ".$object->EventKey; break; case "CLICK": switch ($object->EventKey) { case "COMPANY": $content = "方倍工作室提供互联网相关产品与服务。"; break; default: $content = "点击菜单:".$object->EventKey; break; } break; case "LOCATION": $content = "上传位置:纬度 ".$object->Latitude.";经度 ".$object->Longitude; break; case "VIEW": $content = "跳转链接 ".$object->EventKey; break; default: $content = "receive a new event: ".$object->Event; break; } $result = $this->transmitText($object, $content); return $result; } //接收文本消息 private function receiveText($object) { switch ($object->Content) { case "文本": $content = "这是个文本消息"; break; case "图文": case "单图文": $content = array(); $content[] = array("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); break; case "多图文": $content = array(); $content[] = array("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); $content[] = array("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); $content[] = array("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); break; case "音乐": $content = array("Title"=>"最炫民族风", "Description"=>"歌手:凤凰传奇", "MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3", "HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3"); break; default: $content = date("Y-m-d H:i:s",time()); break; } if(is_array($content)){ if (isset($content[0]['PicUrl'])){ $result = $this->transmitNews($object, $content); }else if (isset($content['MusicUrl'])){ $result = $this->transmitMusic($object, $content); } }else{ $result = $this->transmitText($object, $content); } return $result; } private function receiveImage($object) { $content = array("MediaId"=>$object->MediaId); $result = $this->transmitImage($object, $content); return $result; } private function receiveLocation($object) { $content = "你发送的是位置,纬度为:".$object->Location_X.";经度为:".$object->Location_Y.";缩放级别为:".$object->Scale.";位置为:".$object->Label; $result = $this->transmitText($object, $content); return $result; } private function receiveVoice($object) { if (isset($object->Recognition) && !empty($object->Recognition)){ $content = "你刚才说的是:".$object->Recognition; $result = $this->transmitText($object, $content); }else{ $content = array("MediaId"=>$object->MediaId); $result = $this->transmitVoice($object, $content); } return $result; } private function receiveVideo($object) { $content = array("MediaId"=>$object->MediaId, "ThumbMediaId"=>$object->ThumbMediaId, "Title"=>"", "Description"=>""); $result = $this->transmitVideo($object, $content); return $result; } private function receiveLink($object) { $content = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url; $result = $this->transmitText($object, $content); return $result; } private function transmitText($object, $content) { $textTpl = "
%s
"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content); return $result; } private function transmitImage($object, $imageArray) { $itemTpl = "
"; $item_str = sprintf($itemTpl, $imageArray['MediaId']); $textTpl = "
%s
$item_str
"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } private function transmitVoice($object, $voiceArray) { $itemTpl = "
"; $item_str = sprintf($itemTpl, $voiceArray['MediaId']); $textTpl = "
%s
$item_str
"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } private function transmitVideo($object, $videoArray) { $itemTpl = "
"; $item_str = sprintf($itemTpl, $videoArray['MediaId'], $videoArray['ThumbMediaId'], $videoArray['Title'], $videoArray['Description']); $textTpl = "
%s
$item_str
"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } private function transmitNews($object, $newsArray) { if(!is_array($newsArray)){ return; } $itemTpl = "
<![CDATA[%s]]>
"; $item_str = ""; foreach ($newsArray as $item){ $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']); } $newsTpl = "
%s
%s
$item_str
"; $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray)); return $result; } private function transmitMusic($object, $musicArray) { $itemTpl = "
<![CDATA[%s]]>
"; $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']); $textTpl = "
%s
$item_str
"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } private 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 if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL $max_size = 10000; $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('H:i:s')." ".$log_content."\r\n", FILE_APPEND); } }}?>

 

转载于:https://www.cnblogs.com/joshua317/articles/3713376.html

你可能感兴趣的文章
学习 WCF (6)--学习调用WCF服务的各种方法
查看>>
ListView几个比较特殊的属性
查看>>
NEC学习 ---- 模块 - 带点文字链接列表
查看>>
20165301 预备作业二:学习基础和C语言基础调查
查看>>
【AGC005F】Many Easy Problems (NTT)
查看>>
jquery背景自动切换特效
查看>>
【微信小游戏实战】零基础制作《欢乐停车场》二、关卡设计
查看>>
【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分
查看>>
[development][profile][dpdk] KK程序性能调优
查看>>
GMF学习系列(二) 一些知识点(续2)
查看>>
jquery关于多个显示隐藏
查看>>
asp.net core中使用log4net
查看>>
c++ STL deque容器成员函数
查看>>
LeetCode Contains Duplicate (判断重复元素)
查看>>
SVN安装部署
查看>>
MPU6050开发 -- 卡尔曼滤波(转)
查看>>
Redis主从实战
查看>>
plsql if
查看>>
LuoGu P2002 消息扩散
查看>>
linux 下安装JDK
查看>>