微信公众号开发之微信公共平台消息回复类实例
本文实例讲述了微信公众号开发之微信公共平台消息回复类。分享给大家供大家参考。具体如下:
微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,这里就给各位分享一个。
<?php /** *微信公共平台消息回复类 * * */ classBBCweixin{ private$APPID="******"; private$APPSECRET="******"; /* *文本消息回复 *@paramarrayobject *@paramstringcontent *@returnstring */ publicfunctionresText($object,$content,$flag=0){ $xmlText="<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($xmlText,$object->FromUserName,$object->ToUserName,time(),$content,$flag); echo$resultStr;exit(); } /* *图片消息回复 *@paramarrayobject *@paramstringurl *@returnstring */ publicfunctionresImage($object,$media_id){ $xmlImage="<xml>"; $xmlImage.="<ToUserName><![CDATA[%s]]></ToUserName>"; $xmlImage.="<FromUserName><![CDATA[%s]]></FromUserName>"; $xmlImage.="<CreateTime>%s</CreateTime>"; $xmlImage.="<MsgType><![CDATA[image]]></MsgType>"; $xmlImage.="<Image><MediaId><![CDATA[%s]]></MediaId></Image>"; $xmlImage.="</xml>"; $resultStr=sprintf($xmlImage,$object->FromUserName,$object->ToUserName,time(),$media_id); echo$resultStr;exit(); } /* *图文消息回复 *@paramarrayobject *@paramarraynewsData二维数组必须包含[Title][Description][PicUrl][Url]字段 *@returnstring */ publicfunctionresNews($object,$newsData=array()){ $CreateTime=time(); $FuncFlag=0; $newTplHeader="<xml> <ToUserName><![CDATA[{$object->FromUserName}]]></ToUserName> <FromUserName><![CDATA[{$object->ToUserName}]]></FromUserName> <CreateTime>{$CreateTime}</CreateTime> <MsgType><![CDATA[news]]></MsgType> <Content><![CDATA[%s]]></Content> <ArticleCount>%s</ArticleCount><Articles>"; $newTplItem="<item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item>"; $newTplFoot="</Articles> <FuncFlag>%s</FuncFlag> </xml>"; $Content=''; $itemsCount=count($newsData); $itemsCount=$itemsCount<10?$itemsCount:10;//微信公众平台图文回复的消息一次最多10条 if($itemsCount){ foreach($newsDataas$key=>$item){ if($key<=9){ $Content.=sprintf($newTplItem,$item['Title'],$item['Description'],$item['PicUrl'],$item['Url']); } } } $header=sprintf($newTplHeader,0,$itemsCount); $footer=sprintf($newTplFoot,$FuncFlag); echo$header.$Content.$footer;exit(); } /* *音乐消息回复 *@paramarrayobject *@paramarraymusicContent二维数组包含[Title][Description][MusicUrl][HQMusicUrl]字段 *@returnstring */ publicfunctionresMusic($object,$musicContent=array()){ $xmlMusic="<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[music]]></MsgType> <Music> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <MusicUrl><![CDATA[%s]]></MusicUrl> <HQMusicUrl><![CDATA[%s]]></HQMusicUrl> </Music> </xml>"; if(empty($musicContent[0]['HQMusicUrl'])){ $musicContent[0]['HQMusicUrl']=$musicContent[0]['MusicUrl']; } $resultStr=sprintf($xmlMusic,$object->FromUserName,$object->ToUserName,time(),$musicContent[0]['Title'],$musicContent[0]['Description'],$musicContent[0]['MusicUrl'],$musicContent[0]['HQMusicUrl']); echo$resultStr;exit(); } /* *上传多媒体文件接口 *@param *@paramarraymediaArrfilename、filelength、content-type *@returnobject */ publicfunctionuploadMedia($accessToken,$type='image',$mediaArr){ $url="http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=".$accessToken."&type=".$type; $doPost=self::curlPost($mediaArr,$url); return$doPost; } /* *GPS,谷歌坐标转换成百度坐标 *@paramlnt *@paramlat *@returnarray */ publicfunctionmapApi($lng,$lat,$type){ $map=array(); if($type=='gps'){ $url="http://map.yanue.net/gpsApi.php?lat=".$lat."&lng=".$lng; $res=json_decode(file_get_contents($url)); $map['lng']=$res->baidu->lng; $map['lat']=$res->baidu->lat; } if($type=='google'){ $url="http://api.map.baidu.com/ag/coord/convert?from=2&to=4&mode=1&x=".$lng."&y=".$lat; $res=json_decode(file_get_contents($url)); $map['lng']=base64_decode($res[0]->x); $map['lat']=base64_decode($res[0]->y); } return$map; } /************************************************************** * * 使用特定function对数组中所有元素做处理 * @param string &$array 要处理的字符串 * @param string $function 要执行的函数 * @returnboolean$apply_to_keys_also 是否也应用到key上 * @accesspublic * *************************************************************/ publicfunctionarrayRecursive(&$array,$function,$apply_to_keys_also=false) { static$recursive_counter=0; if(++$recursive_counter>1000){ die('possibledeeprecursionattack'); } foreach($arrayas$key=>$value){ if(is_array($value)){ self::arrayRecursive($array[$key],$function,$apply_to_keys_also); }else{ $array[$key]=$function($value); } if($apply_to_keys_also&&is_string($key)){ $new_key=$function($key); if($new_key!=$key){ $array[$new_key]=$array[$key]; unset($array[$key]); } } } $recursive_counter--; } /************************************************************** * * 将数组转换为JSON字符串(兼容中文) * @param array $array 要转换的数组 * @returnstring 转换得到的json字符串 * @accesspublic * *************************************************************/ publicfunctionJSON($array){ self::arrayRecursive($array,'urlencode',true); $json=json_encode($array); returnurldecode($json); } /* *创建菜单 * */ publicfunctioncreatMenu($shop_id,$data){ $jsonArray=self::JSON($data); $AccessToken=self::accessToken($weiXin[0]['key'],$weiXin[0]['secret']); $MENU_URL="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$AccessToken; returnself::curlPost($jsonArray,$MENU_URL); } /* *客服消息回复 *@paramarrayjsonArrayArray{"touser":"OPENID","msgtype":"text","text":{"content":"HelloWorld"}} *@returnstring */ publicfunctioncustomService($jsonArray,$hash){ if(empty($jsonArray)){ returnfalse; } $db=M(); $sql="select*frombbc_wechatswherehash='".$hash."'"; $weChast=$db->query($sql); $AccessToken=self::accessToken($weChast[0]['key'],$weChast[0]['secret']); $TokenUrl="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$AccessToken; $CustomRes=self::curlPost($jsonArray,$TokenUrl); return$CustomRes; } /* *获取access_token *@returnobjectStr */ publicfunctionaccessToken($appid,$secret){ $access_token=BBCcache::getCache('accesstoken'.$appid); if($access_token){ $AccessTokenRet=$access_token; }else{ $TookenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}"; $AccessTokenRes=@file_get_contents($TookenUrl); $AccessToken=json_decode($AccessTokenRes); $AccessTokenRet=$AccessToken->access_token; BBCcache::setCache('accesstoken'.$appid,$AccessToken->access_token,3600); } return$AccessTokenRet; } /* *向远程接口POST数据 *@dataArray{"touser":"OPENID","msgtype":"text","text":{"content":"HelloWorld"}} *@returnobjectArray */ publicfunctioncurlPost($data,$url){ $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"POST"); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0(compatible;MSIE5.01;WindowsNT5.0)'); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_AUTOREFERER,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); $info=curl_exec($ch); if(curl_errno($ch)){ echo'Errno'.curl_error($ch); } curl_close($ch); returnjson_decode($info); } //根据经纬度计算距离和方向 functiongetRadian($d){ return$d*M_PI/180; } functiongetDistance($lat1,$lng1,$lat2,$lng2){ $EARTH_RADIUS=6378.137;//地球半径 $lat1=getRadian($lat1); $lat2=getRadian($lat2); $a=$lat1-$lat2; $b=getRadian($lng1)-getRadian($lng2); $v=2*asin(sqrt(pow(sin($a/2),2)+cos($lat1)*cos($lat2)*pow(sin($b/2),2))); $v=round($EARTH_RADIUS*$v*10000)/10000; return$v; } } ?>
希望本文所述对大家基于PHP的微信公众号开发有所帮助。