欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-02-18 08:26:37
本文实例讲述了微信公众号开发之微信公共平台消息回复类。分享给大家供大家参考。具体如下: 微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的dem...

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

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