PHP封装的微信公众平台接口开发操作类完整示例
本文实例讲述了PHP封装的微信公众平台接口开发操作类。分享给大家供大家参考,具体如下:
示例调用index.php
config=array('appid'=>'dfdfdfdfdf','secret'=>'343434343434'); $echostr=isset($_GET['echostr'])?$_GET['echostr']:'';//是否来自于微信的服务器配置验证 if($echostr){ $this->is_check_signature=true; }else{ $this->is_check_signature=false; include_once"mpweixin.class.php"; $this->class_obj=newmpweixin($this->config);//实例化对应的插件 } } /** *服务器地址(用户消息和开发者需要的事件推送,会被转发到该URL中) */ publicfunctionindex() { if($this->is_check_signature){ $this->valid(); }else{ $this->class_obj->responseMsg(); } } /** *开发者对签名(即signature)的效验,来判断此条消息的真实性 */ publicfunctionvalid() { $echoStr=$this->checkSignature(); if($echoStr){ header('content-type:text'); exit($echoStr); } } /** *验证是否来自于微信 *@return[type][description] */ publicfunctioncheckSignature() { //微信会发送4个参数到我们的服务器后台签名时间戳随机字符串随机数 $signature=$_GET['signature'];//签名 $timestamp=$_GET['timestamp'];//时间戳 $echoStr=$_GET['echostr'];//随机字符串 $nonce=$_GET['nonce'];//随机数 if($signature&&$timestamp&&$echoStr&&$nonce){ //微信公众号基本配置中的token $token=TOKEN; //将token、timestamp、nonce按字典序排序 $tmpArr=array($token,$timestamp,$nonce); sort($tmpArr,SORT_STRING); //将三个参数字符串拼接成一个字符串进行sha1加密 $tmpStr=implode($tmpArr); $tmpStr=sha1($tmpStr); //开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 if($tmpStr==$signature){ return$echoStr; }else{ returnfalse; } } } } ?>
PHP类文件mpweixin.class.php
appid=$config['appid']; $this->secret=$config['secret']; } /*----------------------------------响应-----------------------------*/ /** *响应消息 */ publicfunctionresponseMsg() { $postStr=file_get_contents("php://input"); if(!empty($postStr)){ $this->logger("R\r\n".$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": if(strstr($postObj->Content,"第三方")){ $result=$this->relayPart3("http://www.fangbei.org/test.php".'?'.$_SERVER['UERY_STRING';],$postStr); }else{ $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="unknownmsgtype:".$RX_TYPE; break; } $this->logger("T\r\n".$result); echo$result; }else{ echo""; exit; } } /*----------------------------------接收-----------------------------*/ /** *接收事件消息 */ privatefunctionreceiveEvent($object) { $content=""; switch($object->Event) { //关注时的事件推送 case"subscribe": $content="欢迎关注方倍工作室"; $content.=(!empty($object->EventKey))?("\n来自二维码场景".str_replace("qrscene_","",$object->EventKey)):""; break; //取消关注事件 case"unsubscribe": $content="取消关注"; break; //点击菜单拉取消息时的事件推送 case"CLICK": switch($object->EventKey) { case"COMPANY": $content=array(); $content[]=array("Title"=>"方倍工作室","Description"=>"","PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg";,"Url"=>"http://m.cnblogs.com/?u=txw1958";); break; default: $content="点击菜单:".$object->EventKey; break; } break; //点击菜单跳转链接时的事件推送 case"VIEW": $content="跳转链接".$object->EventKey; break; //扫描带参数二维码场景,用户已关注时的事件推送 case"SCAN": $content="扫描场景".$object->EventKey; break; //上报地理位置事件 case"LOCATION": $content="上传位置:纬度".$object->Latitude.";经度".$object->Longitude; break; //扫码推事件且弹出“消息接收中”提示框的事件推送 case"scancode_waitmsg": if($object->ScanCodeInfo->ScanType=="qrcode"){ $content="扫码带提示:类型二维码结果:".$object->ScanCodeInfo->ScanResult; }elseif($object->ScanCodeInfo->ScanType=="barcode"){ $codeinfo=explode(",",strval($object->ScanCodeInfo->ScanResult)); $codeValue=$codeinfo[1]; $content="扫码带提示:类型条形码结果:".$codeValue; }else{ $content="扫码带提示:类型".$object->ScanCodeInfo->ScanType."结果:".$object->ScanCodeInfo->ScanResult; } break; //扫码推事件的事件推送 case"scancode_push": $content="扫码推事件"; break; //弹出系统拍照发图的事件推送 case"pic_sysphoto": $content="系统拍照"; break; //弹出微信相册发图器的事件推送 case"pic_weixin": $content="相册发图:数量".$object->SendPicsInfo->Count; break; //弹出拍照或者相册发图的事件推送 case"pic_photo_or_album": $content="拍照或者相册:数量".$object->SendPicsInfo->Count; break; //弹出地理位置选择器的事件推送 case"location_select": $content="发送位置:标签".$object->SendLocationInfo->Label; break; default: $content="receiveanewevent:".$object->Event; break; } if(is_array($content)){ if(isset($content[0]['PicUrl'])){ $result=$this->transmitNews($object,$content); }elseif(isset($content['MusicUrl'])){ $result=$this->transmitMusic($object,$content); } }else{ $result=$this->transmitText($object,$content); } return$result; } /** *接收文本消息 */ privatefunctionreceiveText($object) { $keyword=trim($object->Content); //多客服人工回复模式 if(strstr($keyword,"请问在吗")||strstr($keyword,"在线客服")){ $result=$this->transmitService($object); return$result; } //自动回复模式 if(strstr($keyword,"文本")){ $content="这是个文本消息"; }elseif(strstr($keyword,"表情")){ $content="中国:".$this->bytes_to_emoji(0x1F1E8).$this->bytes_to_emoji(0x1F1F3)."\n仙人掌:".$this->bytes_to_emoji(0x1F335); }elseif(strstr($keyword,"单图文")){ $content=array(); $content[]=array("Title"=>"单图文标题","Description"=>"单图文内容","PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg";,"Url"=>"http://m.cnblogs.com/?u=txw1958";); }elseif(strstr($keyword,"图文")||strstr($keyword,"多图文")){ $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";); }elseif(strstr($keyword,"音乐")){ $content=array(); $content=array("Title"=>"最炫民族风","Description"=>"歌手:凤凰传奇","MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3";,"HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3";); }else{ $content=date("Y-m-dH:i:s",time())."\nOpenID:".$object->FromUserName."\n技术支持方倍工作室"; } if(is_array($content)){ if(isset($content[0])){ $result=$this->transmitNews($object,$content); }elseif(isset($content['MusicUrl'])){ $result=$this->transmitMusic($object,$content); } }else{ $result=$this->transmitText($object,$content); } return$result; } /** *接收图片消息 */ privatefunctionreceiveImage($object) { $content=array("MediaId"=>$object->MediaId); $result=$this->transmitImage($object,$content); return$result; } /** *接收位置消息 */ privatefunctionreceiveLocation($object) { $content="你发送的是位置,经度为:".$object->Location_Y.";纬度为:".$object->Location_X.";缩放级别为:".$object->Scale.";位置为:".$object->Label; $result=$this->transmitText($object,$content); return$result; } /** *接收语音消息 */ privatefunctionreceiveVoice($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; } /** *接收视频消息 */ privatefunctionreceiveVideo($object) { $content=array("MediaId"=>$object->MediaId,"ThumbMediaId"=>$object->ThumbMediaId,"Title"=>"","Description"=>""); $result=$this->transmitVideo($object,$content); return$result; } /** *接收链接消息 */ privatefunctionreceiveLink($object) { $content="你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url; $result=$this->transmitText($object,$content); return$result; } /*----------------------------------回复-----------------------------*/ /** *回复文本消息 */ privatefunctiontransmitText($object,$content) { if(!isset($content)||empty($content)){ return""; } $xmlTpl=""; $result=sprintf($xmlTpl,$object->FromUserName,$object->ToUserName,time(),$content); return$result; } /** *回复多客服消息 */ privatefunctiontransmitService($object) { $xmlTpl=" %s "; $result=sprintf($xmlTpl,$object->FromUserName,$object->ToUserName,time()); return$result; } /** *回复图文消息 */ privatefunctiontransmitNews($object,$newsArray) { if(!is_array($newsArray)){ return""; } $itemTpl=" %s - "; $item_str=""; foreach($newsArrayas$item){ $item_str.=sprintf($itemTpl,$item['Title'],$item['Description'],$item['PicUrl'],$item['Url']); } $xmlTpl="
"; $result=sprintf($xmlTpl,$object->FromUserName,$object->ToUserName,time(),count($newsArray)); return$result; } /** *回复音乐消息 */ privatefunctiontransmitMusic($object,$musicArray) { if(!is_array($musicArray)){ return""; } $itemTpl=" %s %s $item_str "; $item_str=sprintf($itemTpl,$musicArray['Title'],$musicArray['Description'],$musicArray['MusicUrl'],$musicArray['HQMusicUrl']); $xmlTpl=" "; $result=sprintf($xmlTpl,$object->FromUserName,$object->ToUserName,time()); return$result; } /** *回复图片消息 */ privatefunctiontransmitImage($object,$imageArray) { $itemTpl=" %s $item_str "; $item_str=sprintf($itemTpl,$imageArray['MediaId']); $xmlTpl=" "; $result=sprintf($xmlTpl,$object->FromUserName,$object->ToUserName,time()); return$result; } /** *回复语音消息 */ privatefunctiontransmitVoice($object,$voiceArray) { $itemTpl=" %s $item_str "; $item_str=sprintf($itemTpl,$voiceArray['MediaId']); $xmlTpl=" "; $result=sprintf($xmlTpl,$object->FromUserName,$object->ToUserName,time()); return$result; } /** *回复视频消息 */ privatefunctiontransmitVideo($object,$videoArray) { $itemTpl=""; $item_str=sprintf($itemTpl,$videoArray['MediaId'],$videoArray['ThumbMediaId'],$videoArray['Title'],$videoArray['Description']); $xmlTpl=" %s $item_str "; $result=sprintf($xmlTpl,$object->FromUserName,$object->ToUserName,time()); return$result; } /*----------------------------------通用-----------------------------*/ /** *回复第三方接口消息 */ privatefunctionrelayPart3($url,$rawData) { $headers=array("Content-Type:text/xml;charset=utf-8"); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HTTPHEADER,$headers); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$rawData); $output=curl_exec($ch); curl_close($ch); return$output; } /** *字节转Emoji表情 */ functionbytes_to_emoji($cp) { if($cp>0x10000){#4bytes returnchr(0xF0|(($cp&0x1C0000)>>18)).chr(0x80|(($cp&0x3F000)>>12)).chr(0x80|(($cp&0xFC0)>>6)).chr(0x80|($cp&0x3F)); }elseif($cp>0x800){#3bytes returnchr(0xE0|(($cp&0xF000)>>12)).chr(0x80|(($cp&0xFC0)>>6)).chr(0x80|($cp&0x3F)); }elseif($cp>0x80){#2bytes returnchr(0xC0|(($cp&0x7C0)>>6)).chr(0x80|($cp&0x3F)); }else{#1byte returnchr($cp); } } /** *日志记录 */ privatefunctionlogger($log_content) { if(isset($_SERVER['HTTP_APPNAME'])){//SAE sae_set_display_errors(false); sae_debug($log_content); sae_set_display_errors(true); }elseif($_SERVER['REMOTE_ADDR']!="127.0.0.1"){//LOCAL $max_size=1000000; $log_filename="mpweixin.log.xml"; if(file_exists($log_filename)and(abs(filesize($log_filename))>$max_size)){ unlink($log_filename); } file_put_contents($log_filename,date('Y-m-dH:i:s')."".$log_content."\r\n",FILE_APPEND); } } /** *获取access_token */ privatefunctiongetAccessToken() { $token_url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=";.$this->appid."&secret=".$this->secret; $response=$this->get_contents($token_url); $params=array(); $params=json_decode($response,true); if(isset($params['errcode'])) { echo" %s $item_str error:
".$params['errcode']; echo"msg:
".$params['errmsg']; exit; } return$params['access_token']; } publicfunctionget_contents($url){ $ch=curl_init(); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); curl_setopt($ch,CURLOPT_URL,$url); $response=curl_exec($ch); curl_close($ch); //-------请求为空 if(empty($response)){ exit("50001"); } return$response; } } ?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《PHP编码与转码操作技巧汇总》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《PHP中json格式数据操作技巧汇总》及《PHP针对XML文件操作技巧总结》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。