最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php實(shí)現(xiàn)基于微信公眾平臺(tái)開發(fā)SDK(demo)擴(kuò)展的方法

 更新時(shí)間:2014年12月22日 15:46:35   投稿:shichen2014  
這篇文章主要介紹了php實(shí)現(xiàn)基于微信公眾平臺(tái)開發(fā)SDK(demo)擴(kuò)展的方法,包括處理文本消息、天氣、翻譯、聊天信息及自定義菜單等,需要的朋友可以參考下

本文實(shí)例講述了php實(shí)現(xiàn)基于微信公眾平臺(tái)開發(fā)SDK(demo)擴(kuò)展的方法。分享給大家供大家參考。具體分析如下:

該擴(kuò)展基于官方的微信公眾平臺(tái)SDK,這里只做了簡(jiǎn)單地封裝,實(shí)現(xiàn)了一些基本的功能(如天氣查詢,翻譯,自動(dòng)聊天機(jī)器人,自定義菜單接口)僅供學(xué)習(xí)之用.代碼如下:

復(fù)制代碼 代碼如下:
define("TOKEN", "xingans");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
   //簽名驗(yàn)證公共接口
   public function valid()
   {
       $echoStr = $_GET["echostr"];
       if($this->checkSignature()){
           echo $echoStr;
           exit;
       }
   }
 
   //主入口處理函數(shù)
   public function responseMsg()
   {
       $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
       if (!emptyempty($postStr)){
           $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
           $msgType=trim($postObj->MsgType);
          
           switch($msgType){
               case 'text':
                   $resultStr=$this->handleText($postObj);
                   break;
               case 'event':
                   $resultStr=$this->handleEvent($postObj);
                   break;
               default:
                   $resultStr=$this->handleDefault($postObj);
                   break;
           }
           echo $resultStr;
          
       }else {
           echo "Error";
           exit;
       }
   }
  
   //處理文本消息
      private function handleText($obj){
          $keyword=trim($obj->Content);
          if(preg_match('/天氣/',$keyword)){
              $contentStr=$this->handleWeather($obj);
          }elseif(preg_match('/翻譯/',$keyword)){
              $contentStr=$this->handleTranslation($obj);
          }else{
              $contentStr=$this->handleChat($obj);
          }
          return $this->handleStr($obj,$contentStr);
      }
     
      //處理天氣
      private function handleWeather($obj){
          $keyword=mb_substr($obj->Content,-2,2,'utf-8');
          $zone=mb_substr($obj->Content,0,-2,'utf-8');
          if($keyword=='天氣' && !emptyempty($zone)){
              $zoneArr=json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json'),true);
              $zoneArr=$zoneArr['result'];
              $cityId='';
              foreach($zoneArr as $value){
                  if($zone==$value['citynm']){
                      $cityId=$value['weaid'];
                      break;
                  }
              }
             
              if(!emptyempty($cityId)){
                  $data=file_get_contents("http://api.k780.com:88/?app=weather.today&weaid=$cityId&appkey=10638&sign=3736578f099375665f9f141a6326b757&format=json");
                  $data=json_decode($data);
                  $contentStr="今天是:".$data->result->days.",".$data->result-> week.",".$data->result->citynm."天氣:".$data->result->weather."n溫度:".$data->result->temperature.",
                  ".$data->result->wind_direction.",".$data->result->wind_power.", 最低溫度:".$data->result->temp_low.",最高溫度:".$data->result->temp_high;
              }else{
                  $contentStr='找不到輸入的城市!';
              }   
          }else{
              $contentStr='輸入的查詢格式不正確!';
          }
          return $contentStr;
      }
     
      //處理翻譯
      private function handleTranslation($obj){
       $keyword=mb_substr($obj->Content,0,2,'utf-8');
       $words=mb_substr($obj->Content,2,220,'utf-8');
       if($keyword=='翻譯' && !emptyempty($words)){
           $data=file_get_contents('http://fanyi.youdao.com/openapi.do?keyfrom=zfsblog&key=364295447&type=data&doctype=json&version=1.1&q='.urlencode($words));       
           $data=json_decode($data,true);
          
           switch($data['errorCode']){
               case '0':
                   $contentStr=$data['translation'][0];
                   break;
               case '20':
                   $contentStr='要翻譯的文本過長(zhǎng)';
                   break;
               case '30':
                   $contentStr='無法進(jìn)行有效的翻譯';
                   break;
               case '40':
                   $contentStr='不支持的語言類型';
                   break;
               case '50':
                   $contentStr='無效的key';
                   break;
               default:
                   $contentStr='Error';
                   break;
           }
       }else{
           $contentStr='輸入的翻譯格式不正確!';
       }
       return $contentStr;
      }
     
      //處理聊天信息
      private function handleChat($obj){
       $keywords=$obj->Content;
       $curlPost=array("chat"=>$keywords);
       $ch = curl_init();//初始化curl
       curl_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//抓取指定網(wǎng)頁
       curl_setopt($ch, CURLOPT_HEADER, 0);//設(shè)置header
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結(jié)果為字符串且輸出到屏幕上
       curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
       curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
       $data = curl_exec($ch);//運(yùn)行curl
       curl_close($ch);
      
       if(!emptyempty($data)){
           $contentStr=$data;
       }else{
           $ran=rand(1,5);
          
           switch($ran){
               case 1:
                   $contentStr= "小九今天累了,明天再陪你聊天吧";
                   break;
               case 2:
                   $contentStr= "小九睡覺嘍~~";
                   break;
               case 3:
                   $contentStr= "呼呼~~呼呼~~";
                   break;
               case 4:
                   $contentStr= "你話好多啊,不跟你聊了";
                   break;
               case 5:
                   $contentStr= "你話好多啊,不跟你聊了";
                   break;
           }
       }
       return $contentStr;
      }
     
      //創(chuàng)建自定義菜單
      public function createMenu($data,$token){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token);
        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);
        $result = curl_exec($ch);     
        curl_close($ch);
        return $result;
      }
     
      //查詢自定義菜單
   function getMenu($token){
       $url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token";
       $ch = curl_init($url);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER,true) ; //獲取數(shù)據(jù)返回
       curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在啟用 CURLOPT_RETURNTRANSFER 時(shí)候?qū)@取數(shù)據(jù)返回   
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
       return $output = curl_exec($ch);       
      }
     
      //刪除自定義菜單
      public function deleteMenu($token){
       $url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$token;
       $ch = curl_init();
       curl_setopt($ch, CURLOPT_URL, $url);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
       $result = curl_exec($ch);
       curl_close($ch);
       return $result;
      }

      //處理事件消息
      private function handleEvent($obj){
          $content='';
          switch($obj->Event){
              case 'subscribe':
                  $content.="welcome-歡迎關(guān)注該公眾號(hào)號(hào)!";
                  break;
              case 'unsubscribe':
                  $content.="感謝您一直以來對(duì)該公眾號(hào)的關(guān)注,再見!";
                  break;
              default:
                  $content.="";
                  break;
          }
          return $this->handleStr($obj,$content);
      }
     
      //處理回復(fù)消息字符串
      private function handleStr($obj,$content='',$flag=0){
       $textTpl = "";
       return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag);
      }
  
   //簽名驗(yàn)證函數(shù)
   private function checkSignature()
   {
       $signature = $_GET["signature"];
       $timestamp = $_GET["timestamp"];
       $nonce = $_GET["nonce"];   
       $token = TOKEN;
       $tmpArr = array($token, $timestamp, $nonce);
       sort($tmpArr, SORT_STRING);
       $tmpStr = implode( $tmpArr );
       $tmpStr = sha1( $tmpStr );
       if( $tmpStr == $signature ){
           return true;
       }else{
           return false;
       }
   }
}

希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • php 動(dòng)態(tài)添加記錄

    php 動(dòng)態(tài)添加記錄

    php添加記錄的實(shí)現(xiàn)代碼,后面都有詳細(xì)的說明。最近的php將會(huì)讓你學(xué)到更多。
    2009-03-03
  • PHP常用函數(shù)之根據(jù)生日計(jì)算年齡功能示例

    PHP常用函數(shù)之根據(jù)生日計(jì)算年齡功能示例

    這篇文章主要介紹了PHP常用函數(shù)之根據(jù)生日計(jì)算年齡功能,結(jié)合實(shí)例形式分析了php日期相關(guān)轉(zhuǎn)換與計(jì)算操作技巧,需要的朋友可以參考下
    2019-10-10
  • PHP array 的加法操作代碼

    PHP array 的加法操作代碼

    PHP array 的加法操作過程中的一個(gè)問題,大家可以繼續(xù)往下看。
    2010-07-07
  • php修改上傳圖片尺寸的方法

    php修改上傳圖片尺寸的方法

    這篇文章主要介紹了php修改上傳圖片尺寸的方法,涉及php操作圖片的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • php中運(yùn)用http調(diào)用的GET和POST方法示例

    php中運(yùn)用http調(diào)用的GET和POST方法示例

    調(diào)用的GET和POST方法,使用到的函數(shù)是curl_init, curl_setopt, curl_exec,curl_close,默認(rèn)是GET方法
    2014-09-09
  • php中在PDO中使用事務(wù)(Transaction)

    php中在PDO中使用事務(wù)(Transaction)

    事務(wù) (Transaction) 是操作數(shù)據(jù)庫中很重要的一個(gè)功能, 它可以讓你預(yù)定一條, 或者一系列 SQL 語句, 然后一起執(zhí)行
    2011-05-05
  • php簡(jiǎn)單判斷文本編碼的方法

    php簡(jiǎn)單判斷文本編碼的方法

    這篇文章主要介紹了php簡(jiǎn)單判斷文本編碼的方法,涉及php數(shù)組及iconv方法的相關(guān)使用技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-07-07
  • 解析php開發(fā)中的中文編碼問題

    解析php開發(fā)中的中文編碼問題

    其實(shí)php開發(fā)中的中文編碼并沒有想像的那么復(fù)雜,雖然定位和解決問題沒有定規(guī),各種運(yùn)行環(huán)境也各不盡然,但后面的原理是一樣的。了解字符集的知識(shí)是解決字符問題的基礎(chǔ)
    2013-08-08
  • php數(shù)組合并與拆分實(shí)例分析

    php數(shù)組合并與拆分實(shí)例分析

    這篇文章主要介紹了php數(shù)組合并與拆分方法,實(shí)例分析了php中array_merge、array_merge_recursive、array_splice等方法操作數(shù)組的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • php有道翻譯api調(diào)用方法實(shí)例

    php有道翻譯api調(diào)用方法實(shí)例

    這篇文章主要介紹了php有道翻譯api調(diào)用方法,實(shí)例分析了有道翻譯API接口的調(diào)用方法與相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12

最新評(píng)論

伊通| 文山县| 讷河市| 岚皋县| 工布江达县| 象山县| 扶风县| 大庆市| 焦作市| 三门县| 浪卡子县| 如东县| 潞西市| 永福县| 吴桥县| 庆云县| 岐山县| 天峨县| 红桥区| 敖汉旗| 大庆市| 青铜峡市| 高尔夫| 朔州市| 张北县| 峨眉山市| 五莲县| 黑水县| 长白| 龙山县| 福清市| 高雄市| 赤城县| 南宁市| 丰县| 嘉禾县| 商都县| 留坝县| 英超| 社旗县| 高雄市|