微信公众平台开发接口PHP SDK完整版

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

  1 <?php
  2 /*
  3     卓越工作室
  4     CopyRight 2014 All Rights Reserved
  5 */
  6 
  7 define("TOKEN", "weixin");
  8 
  9 $wechatObj = new wechatCallbackapiTest();
 10 if (!isset($_GET['echostr'])) {
 11     $wechatObj->responseMsg();
 12 }else{
 13     $wechatObj->valid();
 14 }
 15 
 16 class wechatCallbackapiTest
 17 {
 18     public function valid()
 19     {
 20         $echoStr = $_GET["echostr"];
 21         if($this->checkSignature()){
 22             echo $echoStr;
 23             exit;
 24         }
 25     }
 26 
 27     private function checkSignature()
 28     {
 29         $signature = $_GET["signature"];
 30         $timestamp = $_GET["timestamp"];
 31         $nonce = $_GET["nonce"];
 32         $token = TOKEN;
 33         $tmpArr = array($token, $timestamp, $nonce);
 34         sort($tmpArr, SORT_STRING);
 35         $tmpStr = implode($tmpArr);
 36         $tmpStr = sha1($tmpStr);
 37 
 38         if($tmpStr == $signature){
 39             return true;
 40         }else{
 41             return false;
 42         }
 43     }
 44 
 45     public function responseMsg()
 46     {
 47         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 48         if (!empty($postStr)){
 49             $this->logger("R ".$postStr);
 50             $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
 51             $RX_TYPE = trim($postObj->MsgType);
 52 
 53             switch ($RX_TYPE)
 54             {
 55                 case "event":
 56                     $result = $this->receiveEvent($postObj);
 57                     break;
 58                 case "text":
 59                     $result = $this->receiveText($postObj);
 60                     break;
 61                 case "image":
 62                     $result = $this->receiveImage($postObj);
 63                     break;
 64                 case "location":
 65                     $result = $this->receiveLocation($postObj);
 66                     break;
 67                 case "voice":
 68                     $result = $this->receiveVoice($postObj);
 69                     break;
 70                 case "video":
 71                     $result = $this->receiveVideo($postObj);
 72                     break;
 73                 case "link":
 74                     $result = $this->receiveLink($postObj);
 75                     break;
 76                 default:
 77                     $result = "unknow msg type: ".$RX_TYPE;
 78                     break;
 79             }
 80             $this->logger("T ".$result);
 81             echo $result;
 82         }else {
 83             echo "";
 84             exit;
 85         }
 86     }
 87 
 88     private function receiveEvent($object)
 89     {
 90         $content = "";
 91         switch ($object->Event)
 92         {
 93             case "subscribe":
 94                 $content = "欢迎关注卓越工作室 ";
 95                 $content .= (!empty($object->EventKey))?("\n来自二维码场景 ".str_replace("qrscene_","",$object->EventKey)):"";
 96                 break;
 97             case "unsubscribe":
 98                 $content = "取消关注";
 99                 break;
100             case "SCAN":
101                 $content = "扫描场景 ".$object->EventKey;
102                 break;
103             case "CLICK":
104                 switch ($object->EventKey)
105                 {
106                     case "COMPANY":
107                         $content = "卓越工作室提供互联网相关产品与服务。";
108                         break;
109                     default:
110                         $content = "点击菜单:".$object->EventKey;
111                         break;
112                 }
113                 break;
114             case "LOCATION":
115                 $content = "上传位置:纬度 ".$object->Latitude.";经度 ".$object->Longitude;
116                 break;
117             default:
118                 $content = "receive a new event: ".$object->Event;
119                 break;
120         }
121         $result = $this->transmitText($object, $content);
122         return $result;
123     }
124 
125     private function receiveText($object)
126     {
127         $keyword = trim($object->Content);
128         switch ($keyword)
129         {
130             case "文本":
131                 $content = "这是个文本消息";
132                 break;
133             case "图文":
134             case "单图文":
135                 $content[] = array("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
136                 break;
137             case "多图文":
138                 $content[] = array("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
139                 $content[] = array("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
140                 $content[] = array("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
141                 break;
142             case "音乐":
143                 $content = array("Title"=>"最炫民族风", "Description"=>"歌手:凤凰传奇", "MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3", "HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3");
144                 break;
145             default:
146                 $content = "当前时间:".date("Y-m-d H:i:s",time());
147                 break;
148         }
149         if(is_array($content)){
150             if (isset($content[0]['PicUrl'])){
151                 $result = $this->transmitNews($object, $content);
152             }else if (isset($content['MusicUrl'])){
153                 $result = $this->transmitMusic($object, $content);
154             }
155         }else{
156             $result = $this->transmitText($object, $content);
157         }
158         return $result;
159     }
160 
161     private function receiveImage($object)
162     {
163         $content = array("MediaId"=>$object->MediaId);
164         $result = $this->transmitImage($object, $content);
165         return $result;
166     }
167 
168     private function receiveLocation($object)
169     {
170         $content = "你发送的是位置,纬度为:".$object->Location_X.";经度为:".$object->Location_Y.";缩放级别为:".$object->Scale.";位置为:".$object->Label;
171         $result = $this->transmitText($object, $content);
172         return $result;
173     }
174 
175     private function receiveVoice($object)
176     {
177         if (empty($object->Recognition)){
178             $content = array("MediaId"=>$object->MediaId);
179             $result = $this->transmitVoice($object, $content);
180         }else{
181             $content = "你刚才说的是:".$object->Recognition;
182             $result = $this->transmitText($object, $content);
183         }
184 
185         return $result;
186     }
187 
188     private function receiveVideo($object)
189     {
190         $content = array("MediaId"=>$object->MediaId, "ThumbMediaId"=>$object->ThumbMediaId, "Title"=>"", "Description"=>"");
191         $result = $this->transmitVideo($object, $content);
192         return $result;
193     }
194 
195     private function receiveLink($object)
196     {
197         $content = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url;
198         $result = $this->transmitText($object, $content);
199         return $result;
200     }
201 
202     private function transmitText($object, $content)
203     {
204         $textTpl = "<xml>
205 <ToUserName><![CDATA[%s]]></ToUserName>
206 <FromUserName><![CDATA[%s]]></FromUserName>
207 <CreateTime>%s</CreateTime>
208 <MsgType><![CDATA[text]]></MsgType>
209 <Content><![CDATA[%s]]></Content>
210 </xml>";
211         $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
212         return $result;
213     }
214 
215     private function transmitImage($object, $imageArray)
216     {
217         $itemTpl = "<Image>
218     <MediaId><![CDATA[%s]]></MediaId>
219 </Image>";
220 
221         $item_str = sprintf($itemTpl, $imageArray['MediaId']);
222 
223         $textTpl = "<xml>
224 <ToUserName><![CDATA[%s]]></ToUserName>
225 <FromUserName><![CDATA[%s]]></FromUserName>
226 <CreateTime>%s</CreateTime>
227 <MsgType><![CDATA[image]]></MsgType>
228 $item_str
229 </xml>";
230 
231         $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());
232         return $result;
233     }
234 
235     private function transmitVoice($object, $voiceArray)
236     {
237         $itemTpl = "<Voice>
238     <MediaId><![CDATA[%s]]></MediaId>
239 </Voice>";
240 
241         $item_str = sprintf($itemTpl, $voiceArray['MediaId']);
242 
243         $textTpl = "<xml>
244 <ToUserName><![CDATA[%s]]></ToUserName>
245 <FromUserName><![CDATA[%s]]></FromUserName>
246 <CreateTime>%s</CreateTime>
247 <MsgType><![CDATA[voice]]></MsgType>
248 $item_str
249 </xml>";
250 
251         $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());
252         return $result;
253     }
254 
255     private function transmitVideo($object, $videoArray)
256     {
257         $itemTpl = "<Video>
258     <MediaId><![CDATA[%s]]></MediaId>
259     <ThumbMediaId><![CDATA[%s]]></ThumbMediaId>
260     <Title><![CDATA[%s]]></Title>
261     <Description><![CDATA[%s]]></Description>
262 </Video>";
263 
264         $item_str = sprintf($itemTpl, $videoArray['MediaId'], $videoArray['ThumbMediaId'], $videoArray['Title'], $videoArray['Description']);
265 
266         $textTpl = "<xml>
267 <ToUserName><![CDATA[%s]]></ToUserName>
268 <FromUserName><![CDATA[%s]]></FromUserName>
269 <CreateTime>%s</CreateTime>
270 <MsgType><![CDATA[video]]></MsgType>
271 $item_str
272 </xml>";
273 
274         $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());
275         return $result;
276     }
277 
278     private function transmitNews($object, $newsArray)
279     {
280         if(!is_array($newsArray)){
281             return;
282         }
283         $itemTpl = "    <item>
284         <Title><![CDATA[%s]]></Title>
285         <Description><![CDATA[%s]]></Description>
286         <PicUrl><![CDATA[%s]]></PicUrl>
287         <Url><![CDATA[%s]]></Url>
288     </item>
289 ";
290         $item_str = "";
291         foreach ($newsArray as $item){
292             $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
293         }
294         $newsTpl = "<xml>
295 <ToUserName><![CDATA[%s]]></ToUserName>
296 <FromUserName><![CDATA[%s]]></FromUserName>
297 <CreateTime>%s</CreateTime>
298 <MsgType><![CDATA[news]]></MsgType>
299 <Content><![CDATA[]]></Content>
300 <ArticleCount>%s</ArticleCount>
301 <Articles>
302 $item_str</Articles>
303 </xml>";
304 
305         $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));
306         return $result;
307     }
308 
309     private function transmitMusic($object, $musicArray)
310     {
311         $itemTpl = "<Music>
312     <Title><![CDATA[%s]]></Title>
313     <Description><![CDATA[%s]]></Description>
314     <MusicUrl><![CDATA[%s]]></MusicUrl>
315     <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
316 </Music>";
317 
318         $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);
319 
320         $textTpl = "<xml>
321 <ToUserName><![CDATA[%s]]></ToUserName>
322 <FromUserName><![CDATA[%s]]></FromUserName>
323 <CreateTime>%s</CreateTime>
324 <MsgType><![CDATA[music]]></MsgType>
325 $item_str
326 </xml>";
327 
328         $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());
329         return $result;
330     }
331 
332     private function logger($log_content)
333     {
334         if(isset($_SERVER['HTTP_APPNAME'])){   //SAE
335             sae_set_display_errors(false);
336             sae_debug($log_content);
337             sae_set_display_errors(true);
338         }else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL
339             $max_size = 10000;
340             $log_filename = "log.xml";
341             if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
342             file_put_contents($log_filename, date('H:i:s')." ".$log_content."\r\n", FILE_APPEND);
343         }
344     }
345 }
346 
347 
348 ?>

 

转载于:https://www.cnblogs.com/zhuoyue/p/3617508.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信公众平台 PHP 开发包,细化了微信的各项接口操作。调用官方API,具有更灵活的消息分类响应方式,支持链式调用操作 。 主要功能 接入验证 (初级权限) 自动回复(文本、图片、语音、视频、音乐、图文) (初级权限) 菜单操作(查询、创建、删除) (菜单权限) 客服消息(文本、图片、语音、视频、音乐、图文) (认证权限) 二维码(创建临时、永久二维码,获取二维码URL) (服务号、认证权限) 长链接转短链接接口 (服务号、认证权限) 分组操作(查询、创建、修改、移动用户到分组) (认证权限) 网页授权(基本授权,用户信息授权) (服务号、认证权限) 用户信息(查询用户基本信息、获取关注者列表) (认证权限) 多客服功能(客服管理、获取客服记录、客服会话管理) (认证权限) 媒体文件(上传、获取) (认证权限) 高级群发 (认证权限) 模板消息(设置所属行业、添加模板、发送模板消息) (服务号、认证权限) 卡券管理(创建、修改、删除、发放、门店管理等) (认证权限) 语义理解 (服务号、认证权限) 获取微信服务器IP列表 (初级权限) 微信JSAPI授权(获取ticket、获取签名) (初级权限) 数据统计(用户、图文、消息、接口分析数据) (认证权限) > 备注: > 初级权限:基本权限,任何正常的公众号都有此权限 > 菜单权限:正常的服务号、认证后的订阅号拥有此权限 > 认证权限:分为订阅号、服务号认证,如前缀服务号则仅认证的服务号有此权限,否则为认证后的订阅号、服务号都有此权限 > 支付权限:仅认证后的服务号可以申请此权限 初始化动作  $options = array(     'token'=>'tokenaccesskey', //填写你设定的key     'encodingaeskey'=>'encodingaeskey', //填写加密用的EncodingAESKey     'appid'=>'wxdk1234567890', //填写高级调用功能的app id, 请在微信开发模式后台查询     'appsecret'=>'xxxxxxxxxxxxxxxxxxx' //填写高级调用功能的密钥     );  $weObj = new Wechat($options); //创建实例对象  //TODO:调用$weObj各实例方法   标签:wechat

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值