• 微信公共平台消息回复类


    <?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;
     }
    }
    ?>
  • 相关阅读:
    (一)SpringCloud Alibaba Nacos服务注册和配置中心:Nacos简介
    (八)SpringCloud初级篇——Eureka服务注册与发现:服务发现Discovery
    (七)SpringCloud初级篇——Eureka服务注册与发现:actuator微服务信息完善
    (六)SpringCloud初级篇——Eureka服务注册与发现:集群Eureka构建步骤
    Windows系统修改Hosts文件
    (五)SpringCloud初级篇——Eureka服务注册与发现:单机Eureka构建步骤
    centos7 安装zookeeper
    热部署Devtools
    【阅读笔记】《C程序员 从校园到职场》第三章 程序的样式(版式和注释)
    【阅读笔记】《C程序员 从校园到职场》第二章 学校到职场
  • 原文地址:https://www.cnblogs.com/qhorse/p/4636139.html
Copyright © 2020-2023  润新知