搜尋
首頁php教程php手册php实现基于微信公众平台开发SDK(demo)扩展的方法,sdkdemo

php实现基于微信公众平台开发SDK(demo)扩展的方法,sdkdemo

本文实例讲述了php实现基于微信公众平台开发SDK(demo)扩展的方法。分享给大家供大家参考。具体分析如下:

该扩展基于官方的微信公众平台SDK,这里只做了简单地封装,实现了一些基本的功能(如天气查询,翻译,自动聊天机器人,自定义菜单接口)仅供学习之用.代码如下:

复制代码 代码如下:

define("TOKEN", "xingans");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
   //签名验证公共接口
   public function valid()
   {
       $echoStr = $_GET["echostr"];
       if($this->checkSignature()){
           echo $echoStr;
           exit;
       }
   }
 
   //主入口处理函数
   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='要翻译的文本过长';
                   break;
               case '30':
                   $contentStr='无法进行有效的翻译';
                   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');//抓取指定网页
       curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
       curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
       curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
       $data = curl_exec($ch);//运行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;
      }
     
      //创建自定义菜单
      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) ; //获取数据返回
       curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回   
       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-欢迎关注该公众号号!";
                  break;
              case 'unsubscribe':
                  $content.="感谢您一直以来对该公众号的关注,再见!";
                  break;
              default:
                  $content.="";
                  break;
          }
          return $this->handleStr($obj,$content);
      }
     
      //处理回复消息字符串
      private function handleStr($obj,$content='',$flag=0){
       $textTpl = "";
       return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag);
      }
  
   //签名验证函数
   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;
       }
   }
}

希望本文所述对大家的php程序设计有所帮助。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器