本文实例讲述了微信公众号开发之微信公共平台消息回复类。分享给大家供大家参考。具体如下:
微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,这里就给各位分享一个。
<br /><?php<br />/**<br /> * 微信公共平台消息回复类<br /> *<br /> *<br /> */<br />class BBCweixin{<br /> <br /> private $APPID="******";<br /> private $APPSECRET="******";<br /> /*<br /> *文本消息回复<br /> *@param array object<br /> *@param string content<br /> *@return string<br /> */<br /> public function resText($object,$content,$flag=0){<br /> $xmlText="<br /> <br /> <br /> %s<br /> <br /> <br /> %d<br /> ";<br /> $resultStr=sprintf($xmlText,$object->FromUserName,$object->ToUserName,time(),$content,$flag);<br /> echo $resultStr;exit();<br /> }<br /> /*<br /> *图片消息回复<br /> *@param array object<br /> *@param string url<br /> *@return string<br /> */<br /> public function resImage($object,$media_id){<br /> $xmlImage="";<br /> $xmlImage.="";<br /> $xmlImage.="";<br /> $xmlImage.="%s";<br /> $xmlImage.="";<br /> $xmlImage.="";<br /> $xmlImage.="";<br /> $resultStr=sprintf($xmlImage,$object->FromUserName,$object->ToUserName,time(),$media_id);<br /> echo $resultStr;exit();<br /> }<br /> /*<br /> *图文消息回复<br /> *@param array object<br /> *@param array newsData 二维数组 必须包含[Title][Description][PicUrl][Url]字段<br /> *@return string<br /> */<br /> public function resNews($object,$newsData=array()){<br /> $CreateTime=time();<br /> $FuncFlag=0;<br /> $newTplHeader="<br /> FromUserName}]]><br /> ToUserName}]]><br /> {$CreateTime}<br /> <br /> <br /> %s";<br /> $newTplItem="<br /> <Title></Title><br /> <br /> <br /> <br /> ";<br /> $newTplFoot="<br /> %s<br /> ";<br /> $Content='';<br /> $itemsCount=count($newsData);<br /> $itemsCount=$itemsCount<10?$itemsCount:10;//微信公众平台图文回复的消息一次最多10条<br /> if($itemsCount){<br /> foreach($newsData as $key=>$item){<br /> if($key<=9){<br /> $Content.=sprintf($newTplItem,$item['Title'],$item['Description'],$item['PicUrl'],$item['Url']);<br /> }<br /> }<br /> }<br /> $header=sprintf($newTplHeader,0,$itemsCount);<br /> $footer=sprintf($newTplFoot,$FuncFlag);<br /> echo $header.$Content.$footer;exit();<br /> }<br /> <br /> /*<br /> *音乐消息回复<br /> *@param array object<br /> *@param array musicContent 二维数组 包含[Title][Description][MusicUrl][HQMusicUrl]字段<br /> *@return string<br /> */<br /> public function resMusic($object,$musicContent=array()){<br /> $xmlMusic="<br /> <br /> <br /> %s<br /> <br /> <div>……本2文来源gaodai.ma#com搞##代!^码@网3</div><code>搞代gaodaima码</code> <br /> <Title></Title><br /> <br /> <br /> <br /> <br /> ";<br /> if(empty($musicContent[0]['HQMusicUrl'])){<br /> $musicContent[0]['HQMusicUrl']=$musicContent[0]['MusicUrl'];<br /> }<br /> $resultStr=sprintf($xmlMusic,$object->FromUserName,$object->ToUserName,time(),$musicContent[0]['Title'],$musicContent[0]['Description'],$musicContent[0]['MusicUrl'],$musicContent[0]['HQMusicUrl']);<br /> echo $resultStr;exit();<br /> }<br /> /*<br /> *上传多媒体文件接口<br /> *@param <br /> *@param array mediaArr filename、filelength、content-type<br /> *@return object<br /> */<br /> public function uploadMedia($accessToken,$type='image',$mediaArr){<br /> $url="http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=".$accessToken."&type=".$type;<br /> $doPost=self::curlPost($mediaArr,$url);<br /> return $doPost;<br /> }<br /> /*<br /> *GPS,谷歌坐标转换成百度坐标<br /> *@param lnt<br /> *@param lat<br /> *@return array<br /> */<br /> public function mapApi($lng,$lat,$type){<br /> $map=array();<br /> if($type=='gps'){<br /> $url="http://map.yanue.net/gpsApi.php?lat=".$lat."&lng=".$lng;<br /> $res=json_decode(file_get_contents($url));<br /> $map['lng']=$res->baidu->lng;<br /> $map['lat']=$res->baidu->lat;<br /> }<br /> if($type=='google'){<br /> $url="http://api.map.baidu.com/ag/coord/convert?from=2&to=4&mode=1&x=".$lng."&y=".$lat;<br /> $res=json_decode(file_get_contents($url));<br /> $map['lng']=base64_decode($res[0]->x);<br /> $map['lat']=base64_decode($res[0]->y);<br /> }<br /> return $map;<br /> }<br /> <br /> /**************************************************************<br /> *<br /> * 使用特定function对数组中所有元素做处理<br /> * @param string &$array 要处理的字符串<br /> * @param string $function 要执行的函数<br /> * @return boolean $apply_to_keys_also 是否也应用到key上<br /> * @access public<br /> *<br /> *************************************************************/<br /> public function arrayRecursive(&$array, $function, $apply_to_keys_also = false)<br /> {<br /> static $recursive_counter = 0;<br /> if (++$recursive_counter > 1000) {<br /> die('possible deep recursion attack');<br /> }<br /> foreach ($array as $key => $value) {<br /> if (is_array($value)) {<br /> self::arrayRecursive($array[$key], $function, $apply_to_keys_also);<br /> } else {<br /> $array[$key] = $function($value);<br /> }<br /> <br /> if ($apply_to_keys_also && is_string($key)) {<br /> $new_key = $function($key);<br /> if ($new_key != $key) {<br /> $array[$new_key] = $array[$key];<br /> unset($array[$key]);<br /> }<br /> }<br /> }<br /> $recursive_counter--;<br /> }<br /> <br /> /**************************************************************<br /> *<br /> * 将数组转换为JSON字符串(兼容中文)<br /> * @param array $array 要转换的数组<br /> * @return string 转换得到的json字符串<br /> * @access public<br /> *<br /> *************************************************************/<br /> public function JSON($array) {<br /> self::arrayRecursive($array, 'urlencode', true);<br /> $json = json_encode($array);<br /> return urldecode($json);<br /> }<br /> /*<br /> *创建菜单<br /> *<br /> */<br /> public function creatMenu($shop_id,$data){<br /> $jsonArray=self::JSON($data);<br /> $AccessToken=self::accessToken($weiXin[0]['key'],$weiXin[0]['secret']);<br /> $MENU_URL="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$AccessToken;<br /> return self::curlPost($jsonArray,$MENU_URL);<br /> }<br /> /*<br /> *客服消息回复<br /> *@param array jsonArray Array {"touser":"OPENID","msgtype":"text","text":{"content":"Hello World"}}<br /> *@return string<br /> */<br /> <br /> public function customService($jsonArray,$hash){<br /> if(empty($jsonArray)){<br /> return false; <br /> }<br /> $db=M();<br /> $sql="select * from bbc_wechats where hash='".$hash."'";<br /> $weChast=$db->query($sql);<br /> $AccessToken=self::accessToken($weChast[0]['key'],$weChast[0]['secret']);<br /> $TokenUrl="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$AccessToken;<br /> $CustomRes=self::curlPost($jsonArray,$TokenUrl);<br /> return $CustomRes;<br /> }<br /> /*<br /> <br /> *获取access_token<br /> *@return objectStr<br /> */<br /> public function accessToken($appid,$secret){ <br /> $access_token=BBCcache::getCache('accesstoken'.$appid);<br /> if($access_token){<br /> $AccessTokenRet=$access_token;<br /> }else{<br /> $TookenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";<br /> $AccessTokenRes=@file_get_contents($TookenUrl);<br /> $AccessToken=json_decode($AccessTokenRes);<br /> $AccessTokenRet=$AccessToken->access_token;<br /> BBCcache::setCache('accesstoken'.$appid,$AccessToken->access_token,3600);<br /> }<br /> return $AccessTokenRet;<br /> }<br /> /*<br /> *向远程接口POST数据<br /> *@data Array {"touser":"OPENID","msgtype":"text","text":{"content":"Hello World"}}<br /> *@return objectArray<br /> */<br /> public function curlPost($data,$url){<br /> $ch = curl_init();<br /> <br /> curl_setopt($ch, CURLOPT_URL, $url); <br /> curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");<br /> curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); <br /> curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);<br /> curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');<br /> curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);<br /> curl_setopt($ch, CURLOPT_AUTOREFERER, 1); <br /> curl_setopt($ch, CURLOPT_POSTFIELDS, $data);<br /> curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); <br /> <br /> $info = curl_exec($ch);<br /> <br /> if (curl_errno($ch)) {<br /> echo 'Errno'.curl_error($ch);<br /> }<br /> <br /> curl_close($ch);<br /> return json_decode($info);<br /> }<br /> //根据经纬度计算距离和方向<br /> function getRadian($d){<br /> return $d * M_PI / 180;<br /> }<br /> <br /> function getDistance ($lat1, $lng1, $lat2, $lng2){<br /> $EARTH_RADIUS=6378.137;//地球半径<br /> $lat1 =getRadian($lat1);<br /> $lat2 = getRadian($lat2);<br /> <br /> $a = $lat1 - $lat2;<br /> $b = getRadian($lng1) - getRadian($lng2);<br /> <br /> $v = 2 * asin(sqrt(pow(sin($a/2),2) + cos($lat1) * cos($lat2) * pow(sin($b/2),2)));<br /> <br /> $v = round($EARTH_RADIUS * $v * 10000) / 10000;<br /> <br /> return $v;<br /> }<br />}<br />?><br />
希望本文所述对大家基于PHP的微信公众号开发有所帮助。