微信公众号开发之微信公共平台消息回复类实例
2015-01-24信息快讯网
这篇文章主要介绍了微信公众号开发之微信公共平台消息回复类,给出了其完整实例,并附有注释说明便于理解与运用,对于微信公众号的开发来说非常具有参考借鉴价值,需要的朋友可以参考下
本文实例讲述了微信公众号开发之微信公共平台消息回复类。分享给大家供大家参考。具体如下:
微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,这里就给各位分享一个。
<?php /** * 微信公共平台消息回复类 * * */ class BBCweixin{ private $APPID="******"; private $APPSECRET="******"; /* *文本消息回复 *@param array object *@param string content *@return string */ public function resText($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(); } /* *图片消息回复 *@param array object *@param string url *@return string */ public function resImage($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(); } /* *图文消息回复 *@param array object *@param array newsData 二维数组 必须包含[Title][Description][PicUrl][Url]字段 *@return string */ public function resNews($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($newsData as $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(); } /* *音乐消息回复 *@param array object *@param array musicContent 二维数组 包含[Title][Description][MusicUrl][HQMusicUrl]字段 *@return string */ public function resMusic($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 *@param array mediaArr filename、filelength、content-type *@return object */ public function uploadMedia($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,谷歌坐标转换成百度坐标 *@param lnt *@param lat *@return array */ public function mapApi($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 要执行的函数 * @return boolean $apply_to_keys_also 是否也应用到key上 * @access public * *************************************************************/ public function arrayRecursive(&$array, $function, $apply_to_keys_also = false) { static $recursive_counter = 0; if (++$recursive_counter > 1000) { die('possible deep recursion attack'); } foreach ($array as $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 要转换的数组 * @return string 转换得到的json字符串 * @access public * *************************************************************/ public function JSON($array) { self::arrayRecursive($array, 'urlencode', true); $json = json_encode($array); return urldecode($json); } /* *创建菜单 * */ public function creatMenu($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; return self::curlPost($jsonArray,$MENU_URL); } /* *客服消息回复 *@param array jsonArray Array {"touser":"OPENID","msgtype":"text","text":{"content":"Hello World"}} *@return string */ public function customService($jsonArray,$hash){ if(empty($jsonArray)){ return false; } $db=M(); $sql="select * from bbc_wechats where hash='".$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 *@return objectStr */ public function accessToken($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数据 *@data Array {"touser":"OPENID","msgtype":"text","text":{"content":"Hello World"}} *@return objectArray */ public function curlPost($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; MSIE 5.01; Windows NT 5.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); return json_decode($info); } //根据经纬度计算距离和方向 function getRadian($d){ return $d * M_PI / 180; } function getDistance ($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的微信公众号开发有所帮助。
windows7下php开发环境搭建图文教程
推荐几个开源的微信开发项目
windows下配置php5.5开发环境及开发扩展
10个简化PHP开发的工具
微信公众平台接口开发入门示例
微信公众平台开发关注及取消关注事件的方法
微信公众平台消息接口校验与消息接口响应实例
php实现基于微信公众平台开发SDK(demo)扩展的方法
php微信公众开发之获取周边酒店信息的方法
PHP中变量引用与变量销毁机制分析
微信公众号点击菜单即可打开并登录微站的实现方法
推荐一款MAC OS X 下php集成开发环境mamp
ThinkPHP无限级分类原理实现留言与回复功能实例
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
3款值得推荐的微信开发开源框架
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
PHP+jQuery 注册模块开发详解
在win7中搭建Linux+PHP 开发环境
微信公众平台天气预报功能开发
PHP+memcache实现消息队列案例分享
PHP对接微信公众平台消息接口开发流程教程
用PHP实现弹出消息提示框的两种方法