当前位置:首页 > PHP教程 > php类库 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-21 22:01:04 浏览: 评论:0 

微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,下面给各位分享一个.

初次接触的时候写的一些,有点乱…也没去整理…最近都不想工作了,各种烦,午饭也没吃,就是想表达一下我过的不好,–请忽略个人情绪往下看,代码如下:

  1. <?php 
  2. /** 
  3.  * 微信公共平台消息回复类 
  4.  * 
  5.  * 
  6.  */ 
  7. class BBCweixin{ 
  8.  
  9.  private $APPID="******"
  10.  private $APPSECRET="******"
  11.  /* 
  12.   *文本消息回复 
  13.   *@param array object 
  14.   *@param string content 
  15.   *@return string 
  16.   */ 
  17.  public function resText($object,$content,$flag=0){ 
  18.   $xmlText="<xml> 
  19.                   <ToUserName><![CDATA[%s]]></ToUserName> 
  20.                   <FromUserName><![CDATA[%s]]></FromUserName> 
  21.                   <CreateTime>%s</CreateTime> 
  22.                   <MsgType><![CDATA[text]]></MsgType> 
  23.                   <Content><![CDATA[%s]]></Content> 
  24.                   <FuncFlag>%d</FuncFlag> 
  25.                   </xml>"; 
  26.      $resultStr=sprintf($xmlText,$object->FromUserName,$object->ToUserName,time(),$content,$flag); 
  27.   echo $resultStr;exit(); 
  28.  } 
  29.  /* 
  30.   *图片消息回复 
  31.   *@param array object 
  32.   *@param string url 
  33.   *@return string 
  34.   */ 
  35.  public function resImage($object,$media_id){ 
  36.   $xmlImage="<xml>"
  37.   $xmlImage.="<ToUserName><![CDATA[%s]]></ToUserName>"
  38.   $xmlImage.="<FromUserName><![CDATA[%s]]></FromUserName>"
  39.   $xmlImage.="<CreateTime>%s</CreateTime>"
  40.   $xmlImage.="<MsgType><![CDATA[image]]></MsgType>"
  41.   $xmlImage.="<Image><MediaId><![CDATA[%s]]></MediaId></Image>"
  42.   $xmlImage.="</xml>"
  43.   $resultStr=sprintf($xmlImage,$object->FromUserName,$object->ToUserName,time(),$media_id); 
  44.   echo $resultStr;exit(); 
  45.  } 
  46.  /* 
  47.   *图文消息回复 
  48.   *@param array object 
  49.   *@param array newsData 二维数组 必须包含[Title][Description][PicUrl][Url]字段 
  50.   *@return string 
  51.   */ 
  52.  public function resNews($object,$newsData=array()){ 
  53.      $CreateTime=time(); 
  54.      $FuncFlag=0; 
  55.      $newTplHeader="<xml> 
  56.         <ToUserName><![CDATA[{$object->FromUserName}]]></ToUserName> 
  57.         <FromUserName><![CDATA[{$object->ToUserName}]]></FromUserName> 
  58.         <CreateTime>{$CreateTime}</CreateTime> 
  59.         <MsgType><![CDATA[news]]></MsgType> 
  60.         <Content><![CDATA[%s]]></Content> 
  61.         <ArticleCount>%s</ArticleCount><Articles>"; 
  62.      $newTplItem="<item> 
  63.       <Title><![CDATA[%s]]></Title> 
  64.       <Description><![CDATA[%s]]></Description> 
  65.       <PicUrl><![CDATA[%s]]></PicUrl> 
  66.       <Url><![CDATA[%s]]></Url> 
  67.       </item>"; 
  68.      $newTplFoot="</Articles> 
  69.       <FuncFlag>%s</FuncFlag> 
  70.       </xml>"; 
  71.      $Content=''
  72.      $itemsCount=count($newsData); 
  73.      $itemsCount=$itemsCount<10?$itemsCount:10;//微信公众平台图文回复的消息一次最多10条 
  74.      if($itemsCount){ 
  75.       foreach($newsData as $key=>$item){ 
  76.        if($key<=9){ 
  77.       $Content.=sprintf($newTplItem,$item['Title'],$item['Description'],$item['PicUrl'],$item['Url']); 
  78.     } 
  79.       } 
  80.   } 
  81.      $header=sprintf($newTplHeader,0,$itemsCount); 
  82.      $footer=sprintf($newTplFoot,$FuncFlag); 
  83.      echo $header.$Content.$footer;exit(); 
  84.  } 
  85.  
  86.  /* 
  87.   *音乐消息回复 
  88.   *@param array object 
  89.   *@param array musicContent 二维数组 包含[Title][Description][MusicUrl][HQMusicUrl]字段 
  90.   *@return string 
  91.   */ 
  92.  public function resMusic($object,$musicContent=array()){ 
  93.    $xmlMusic="<xml> 
  94.                     <ToUserName><![CDATA[%s]]></ToUserName> 
  95.                     <FromUserName><![CDATA[%s]]></FromUserName> 
  96.                     <CreateTime>%s</CreateTime> 
  97.                     <MsgType><![CDATA[music]]></MsgType> 
  98.                     <Music> 
  99.      <Title><![CDATA[%s]]></Title> 
  100.                     <Description><![CDATA[%s]]></Description> 
  101.                     <MusicUrl><![CDATA[%s]]></MusicUrl> 
  102.                     <HQMusicUrl><![CDATA[%s]]></HQMusicUrl> 
  103.                     </Music> 
  104.                     </xml>"; 
  105.   if(emptyempty($musicContent[0]['HQMusicUrl'])){ 
  106.    $musicContent[0]['HQMusicUrl']=$musicContent[0]['MusicUrl']; 
  107.   } 
  108.   $resultStr=sprintf($xmlMusic,$object->FromUserName,$object->ToUserName,time(),$musicContent[0]['Title'],$musicContent[0]['Description'],$musicContent[0]['MusicUrl'],$musicContent[0]['HQMusicUrl']); 
  109.   echo $resultStr;exit(); 
  110.  } 
  111.  /* 
  112.   *上传多媒体文件接口 
  113.   *@param  
  114.   *@param array mediaArr filename、filelength、content-type 
  115.   *@return object 
  116.   */ 
  117.  public function uploadMedia($accessToken,$type='image',$mediaArr){ 
  118.   $url="http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=".$accessToken."&type=".$type
  119.   $doPost=self::curlPost($mediaArr,$url); 
  120.   return $doPost
  121.  } 
  122.  /* 
  123.   *GPS,谷歌坐标转换成百度坐标 
  124.   *@param lnt 
  125.   *@param lat 
  126.   *@return array 
  127.   */ 
  128.  public function mapApi($lng,$lat,$type){ 
  129.   $map=array(); 
  130.   if($type=='gps'){ 
  131.    $url="http://map.yanue.net/gpsApi.php?lat=".$lat."&lng=".$lng
  132.    $res=json_decode(file_get_contents($url)); 
  133.    $map['lng']=$res->baidu->lng; 
  134.    $map['lat']=$res->baidu->lat; 
  135.   } 
  136.   if($type=='google'){ 
  137.    $url="http://api.map.baidu.com/ag/coord/convert?from=2&to=4&mode=1&x=".$lng."&y=".$lat
  138.    $res=json_decode(file_get_contents($url)); 
  139.    $map['lng']=base64_decode($res[0]->x); 
  140.    $map['lat']=base64_decode($res[0]->y); 
  141.   } 
  142.   return $map
  143.  } 
  144.  
  145.  /************************************************************** 
  146.   * 
  147.   *  使用特定function对数组中所有元素做处理 
  148.   *  @param  string  &$array     要处理的字符串 
  149.   *  @param  string  $function   要执行的函数 
  150.   *  @return boolean $apply_to_keys_also     是否也应用到key上 
  151.   *  @access public 
  152.   * 
  153.   *************************************************************/ 
  154.  public function arrayRecursive(&$array$function$apply_to_keys_also = false) 
  155.  { 
  156.   static $recursive_counter = 0; 
  157.   if (++$recursive_counter > 1000) { 
  158.    die('possible deep recursion attack'); 
  159.   } 
  160.   foreach ($array as $key => $value) { 
  161.    if (is_array($value)) { 
  162.     self::arrayRecursive($array[$key], $function$apply_to_keys_also); 
  163.    } else { 
  164.     $array[$key] = $function($value); 
  165.    } 
  166.  
  167.    if ($apply_to_keys_also && is_string($key)) { 
  168.     $new_key = $function($key); 
  169.     if ($new_key != $key) { 
  170.      $array[$new_key] = $array[$key]; 
  171.      unset($array[$key]); 
  172.     } 
  173.    } 
  174.   } 
  175.   $recursive_counter--; 
  176.  } 
  177.  
  178.  /************************************************************** 
  179.   * 
  180.   *  将数组转换为JSON字符串(兼容中文) 
  181.   *  @param  array   $array      要转换的数组 
  182.   *  @return string      转换得到的json字符串 
  183.   *  @access public 
  184.   * 
  185.   *************************************************************/ 
  186.  public function JSON($array) { 
  187.   self::arrayRecursive($array'urlencode', true); 
  188.   $json = json_encode($array); 
  189.   return urldecode($json); 
  190.  } 
  191.  /* 
  192.   *创建菜单 
  193.   * 
  194.   */ 
  195.  public function creatMenu($shop_id,$data){ 
  196.   $jsonArray=self::JSON($data); 
  197.   $AccessToken=self::accessToken($weiXin[0]['key'],$weiXin[0]['secret']); 
  198.   $MENU_URL="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$AccessToken
  199.   return self::curlPost($jsonArray,$MENU_URL); 
  200.  } 
  201.  /* 
  202.   *客服消息回复 
  203.   *@param array jsonArray Array {"touser":"OPENID","msgtype":"text","text":{"content":"Hello World"}} 
  204.   *@return string 
  205.   */ 
  206.  
  207.   public function customService($jsonArray,$hash){ 
  208.   if(emptyempty($jsonArray)){ 
  209.    return false;  
  210.   } 
  211.   $db=M(); 
  212.   $sql="select * from bbc_wechats where hash='".$hash."'"
  213.   $weChast=$db->query($sql); 
  214.   $AccessToken=self::accessToken($weChast[0]['key'],$weChast[0]['secret']); 
  215.   $TokenUrl="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$AccessToken
  216.      $CustomRes=self::curlPost($jsonArray,$TokenUrl); 
  217.   return $CustomRes
  218.   } 
  219.   /* 
  220.  
  221.    *获取access_token 
  222.    *@return objectStr 
  223.    */ 
  224.   public function accessToken($appid,$secret){  
  225.    $access_token=BBCcache::getCache('accesstoken'.$appid); 
  226.    if($access_token){ 
  227.     $AccessTokenRet=$access_token
  228.    }else
  229.     $TookenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}"
  230.     $AccessTokenRes=@file_get_contents($TookenUrl); 
  231.     $AccessToken=json_decode($AccessTokenRes); 
  232.     $AccessTokenRet=$AccessToken->access_token; 
  233.     BBCcache::setCache('accesstoken'.$appid,$AccessToken->access_token,3600); 
  234.    } 
  235.    return $AccessTokenRet
  236.   } 
  237.   /* 
  238.    *向远程接口POST数据 
  239.    *@data Array {"touser":"OPENID","msgtype":"text","text":{"content":"Hello World"}} 
  240.    *@return objectArray 
  241.    */ 
  242.   public function curlPost($data,$url){ 
  243.     $ch = curl_init(); 
  244.  
  245.    curl_setopt($ch, CURLOPT_URL, $url);  
  246.    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
  247.    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
  248.    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  249.    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); 
  250.    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
  251.    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);  
  252.    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
  253.    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
  254.  
  255.    $info = curl_exec($ch); 
  256.  
  257.    if (curl_errno($ch)) { 
  258.     echo 'Errno'.curl_error($ch); 
  259.    } 
  260.  
  261.    curl_close($ch); 
  262.    return json_decode($info); 
  263.   } 
  264.  //根据经纬度计算距离和方向 
  265.  function getRadian($d){ 
  266.   return $d * M_PI / 180; 
  267.  } 
  268.  
  269.  function getDistance ($lat1$lng1$lat2$lng2){ 
  270.   $EARTH_RADIUS=6378.137;//地球半径 
  271.   $lat1 =getRadian($lat1); 
  272.   $lat2 = getRadian($lat2); 
  273.  
  274.   $a = $lat1 - $lat2
  275.   $b = getRadian($lng1) - getRadian($lng2); 
  276.  
  277.   $v = 2 * asin(sqrt(pow(sin($a/2),2) + cos($lat1) * cos($lat2) * pow(sin($b/2),2)));//开源软件:phpfensi.com 
  278.  
  279.   $v = round($EARTH_RADIUS * $v * 10000) / 10000; 
  280.  
  281.   return $v
  282.  } 
  283.  
  284.  
  285. ?>

Tags: php微信公众号 php消息回复类

分享到: