微信公众号开发之微信公共平台消息回复类实例

  本文实例讲述了微信公众号开发之微信公共平台消息回复类。分享给大家供大家参考。具体如下:

  微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的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的微信公众号开发有所帮助。