微信公众号开发之微信公共平台消息回复类实例
本文实例讲述了微信公众号开发之微信公共平台消息回复类。分享给大家供大家参考。具体如下:
微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的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的微信公众号开发有所帮助。