zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

2023-06-13 09:15:37 时间

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

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

复制代码代码如下:
define("TOKEN","xingans");
$wechatObj=newwechatCallbackapiTest();
$wechatObj->responseMsg();
classwechatCallbackapiTest
{
  //签名验证公共接口
  publicfunctionvalid()
  {
      $echoStr=$_GET["echostr"];
      if($this->checkSignature()){
          echo$echoStr;
          exit;
      }
  }
 
  //主入口处理函数
  publicfunctionresponseMsg()
  {
      $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;
      }
  }
  
  //处理文本消息
     privatefunctionhandleText($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);
     }
     
     //处理天气
     privatefunctionhandleWeather($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($zoneArras$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;
     }
     
     //处理翻译
     privatefunctionhandleTranslation($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;
     }
     
     //处理聊天信息
     privatefunctionhandleChat($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){
              case1:
                  $contentStr="小九今天累了,明天再陪你聊天吧";
                  break;
              case2:
                  $contentStr="小九睡觉喽~~";
                  break;
              case3:
                  $contentStr="呼呼~~呼呼~~";
                  break;
              case4:
                  $contentStr="你话好多啊,不跟你聊了";
                  break;
              case5:
                  $contentStr="你话好多啊,不跟你聊了";
                  break;
          }
      }
      return$contentStr;
     }
     
     //创建自定义菜单
     publicfunctioncreateMenu($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;MSIE5.01;WindowsNT5.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;
     }
     
     //查询自定义菜单
  functiongetMenu($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);       
     }
     
     //删除自定义菜单
     publicfunctiondeleteMenu($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;
     }

     //处理事件消息
     privatefunctionhandleEvent($obj){
         $content="";
         switch($obj->Event){
             case"subscribe":
                 $content.="welcome-欢迎关注该公众号号!";
                 break;
             case"unsubscribe":
                 $content.="感谢您一直以来对该公众号的关注,再见!";
                 break;
             default:
                 $content.="";
                 break;
         }
         return$this->handleStr($obj,$content);
     }
     
     //处理回复消息字符串
     privatefunctionhandleStr($obj,$content="",$flag=0){
      $textTpl="";
      returnsprintf($textTpl,$obj->FromUserName,$obj->ToUserName,time(),$content,$flag);
     }
  
  //签名验证函数
  privatefunctioncheckSignature()
  {
      $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){
          returntrue;
      }else{
          returnfalse;
      }
  }
}

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