微信公共平台消息回复类

<?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;
 }
}
?>

转载于:https://www.cnblogs.com/qhorse/p/4636139.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值