当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-04 15:27:12 浏览: 评论:0 

这篇文章主要介绍了php实现基于微信公众平台开发SDK(demo)扩展的方法,包括处理文本消息、天气、翻译、聊天信息及自定义菜单等,需要的朋友可以参考下

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

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

  1. define("TOKEN", "xingans"); 
  2. $wechatObj = new wechatCallbackapiTest(); 
  3. $wechatObj->responseMsg(); 
  4. class wechatCallbackapiTest 
  5. { 
  6.    //签名验证公共接口 
  7.    public function valid() 
  8.    { 
  9.        $echoStr = $_GET["echostr"]; 
  10.        if($this->checkSignature()){ 
  11.            echo $echoStr; 
  12.            exit; 
  13.        } 
  14.    } 
  15.  
  16.    //主入口处理函数 
  17.    public function responseMsg() 
  18.    { 
  19.        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 
  20.        if (!emptyempty($postStr)){ 
  21.            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 
  22.            $msgType=trim($postObj->MsgType); 
  23.            
  24.            switch($msgType){ 
  25.                case 'text': 
  26.                    $resultStr=$this->handleText($postObj); 
  27.                    break; 
  28.                case 'event': 
  29.                    $resultStr=$this->handleEvent($postObj); 
  30.                    break; 
  31.                default: 
  32.                    $resultStr=$this->handleDefault($postObj); 
  33.                    break; 
  34.            } 
  35.            echo $resultStr; 
  36.            
  37.        }else { 
  38.            echo "Error"; 
  39.            exit; 
  40.        } 
  41.    } 
  42.    
  43.    //处理文本消息 
  44.       private function handleText($obj){ 
  45.           $keyword=trim($obj->Content); 
  46.           if(preg_match('/天气/',$keyword)){ 
  47.               $contentStr=$this->handleWeather($obj); 
  48.           }elseif(preg_match('/翻译/',$keyword)){ 
  49.               $contentStr=$this->handleTranslation($obj); 
  50.           }else{ 
  51.               $contentStr=$this->handleChat($obj); 
  52.           } 
  53.           return $this->handleStr($obj,$contentStr); 
  54.       } 
  55.       
  56.       //处理天气 
  57.       private function handleWeather($obj){ 
  58.           $keyword=mb_substr($obj->Content,-2,2,'utf-8'); 
  59.           $zone=mb_substr($obj->Content,0,-2,'utf-8'); 
  60.           if($keyword=='天气' && !emptyempty($zone)){ 
  61.               $zoneArr=json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json'),true); 
  62.               $zoneArr=$zoneArr['result']; 
  63.               $cityId=''; 
  64.               foreach($zoneArr as $value){ 
  65.                   if($zone==$value['citynm']){ 
  66.                       $cityId=$value['weaid']; 
  67.                       break; 
  68.                   } 
  69.               } 
  70.               
  71.               if(!emptyempty($cityId)){ 
  72.                   $data=file_get_contents("http://api.k780.com:88/?app=weather.today&weaid=$cityId&appkey=10638&sign=3736578f099375665f9f141a6326b757&format=json"); 
  73.                   $data=json_decode($data); 
  74.                   $contentStr="今天是:".$data->result->days.",".$data->result-> week.",".$data->result->citynm."天气:".$data->result->weather."n温度:".$data->result->temperature.", 
  75.                   ".$data->result->wind_direction.",".$data->result->wind_power.", 最低温度:".$data->result->temp_low.",最高温度:".$data->result->temp_high; 
  76.               }else{ 
  77.                   $contentStr='找不到输入的城市!'; 
  78.               }    
  79.           }else{ 
  80.               $contentStr='输入的查询格式不正确!'; 
  81.           } 
  82.           return $contentStr; 
  83.       } 
  84.       
  85.       //处理翻译 
  86.       private function handleTranslation($obj){ 
  87.        $keyword=mb_substr($obj->Content,0,2,'utf-8'); 
  88.        $words=mb_substr($obj->Content,2,220,'utf-8'); 
  89.        if($keyword=='翻译' && !emptyempty($words)){ 
  90.            $data=file_get_contents('http://fanyi.youdao.com/openapi.do?keyfrom=zfsblog&key=364295447&type=data&doctype=json&version=1.1&q='.urlencode($words));        
  91.            $data=json_decode($data,true); 
  92.            
  93.            switch($data['errorCode']){ 
  94.                case '0': 
  95.                    $contentStr=$data['translation'][0]; 
  96.                    break; 
  97.                case '20': 
  98.                    $contentStr='要翻译的文本过长'; 
  99.                    break; 
  100.                case '30': 
  101.                    $contentStr='无法进行有效的翻译'; 
  102.                    break; 
  103.                case '40': 
  104.                    $contentStr='不支持的语言类型'; 
  105.                    break; 
  106.                case '50': 
  107.                    $contentStr='无效的key'; 
  108.                    break; 
  109.                default: 
  110.                    $contentStr='Error'; 
  111.                    break; 
  112.            } 
  113.        }else{ 
  114.            $contentStr='输入的翻译格式不正确!'; 
  115.        } 
  116.        return $contentStr; 
  117.       } 
  118.       
  119.       //处理聊天信息 
  120.       private function handleChat($obj){ 
  121.        $keywords=$obj->Content; 
  122.        $curlPost=array("chat"=>$keywords); 
  123.        $ch = curl_init();//初始化curl 
  124.        curl_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//抓取指定网页 
  125.        curl_setopt($ch, CURLOPT_HEADER, 0);//设置header 
  126.        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 
  127.        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 
  128.        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); 
  129.        $data = curl_exec($ch);//运行curl 
  130.        curl_close($ch); 
  131.        
  132.        if(!emptyempty($data)){ 
  133.            $contentStr=$data; 
  134.        }else{ 
  135.            $ran=rand(1,5); 
  136.            
  137.            switch($ran){ 
  138.                case 1: 
  139.                    $contentStr= "小九今天累了,明天再陪你聊天吧"; 
  140.                    break; 
  141.                case 2: 
  142.                    $contentStr= "小九睡觉喽~~"; 
  143.                    break; 
  144.                case 3: 
  145.                    $contentStr= "呼呼~~呼呼~~"; 
  146.                    break; 
  147.                case 4: 
  148.                    $contentStr= "你话好多啊,不跟你聊了"; 
  149.                    break; 
  150.                case 5: 
  151.                    $contentStr= "你话好多啊,不跟你聊了"; 
  152.                    break; 
  153.            } 
  154.        } 
  155.        return $contentStr; 
  156.       } 
  157.       
  158.       //创建自定义菜单 
  159.       public function createMenu($data,$token){ 
  160.         $ch = curl_init(); 
  161.         curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token); 
  162.         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
  163.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
  164.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
  165.         curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); 
  166.         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
  167.         curl_setopt($ch, CURLOPT_AUTOREFERER, 1); 
  168.         curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
  169.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  170.         $result = curl_exec($ch);      
  171.         curl_close($ch); 
  172.         return $result; 
  173.       } 
  174.       
  175.       //查询自定义菜单 
  176.    function getMenu($token){ 
  177.        $url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token"; 
  178.        $ch = curl_init($url); 
  179.        curl_setopt($ch, CURLOPT_RETURNTRANSFER,true) ; //获取数据返回 
  180.        curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回    
  181.        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); 
  182.        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false); 
  183.        return $output = curl_exec($ch);        
  184.       } 
  185.       
  186.       //删除自定义菜单 
  187.       public function deleteMenu($token){ 
  188.        $url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$token; 
  189.        $ch = curl_init(); 
  190.        curl_setopt($ch, CURLOPT_URL, $url); 
  191.        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  192.        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
  193.        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
  194.        $result = curl_exec($ch); 
  195.        curl_close($ch); 
  196.        return $result; 
  197.       } 
  198.       //处理事件消息 
  199.       private function handleEvent($obj){ 
  200.           $content=''; 
  201.           switch($obj->Event){ 
  202.               case 'subscribe': 
  203.                   $content.="welcome-欢迎关注该公众号号!"; 
  204.                   break; 
  205.               case 'unsubscribe': 
  206.                   $content.="感谢您一直以来对该公众号的关注,再见!"; 
  207.                   break; 
  208.               default: 
  209.                   $content.=""; 
  210.                   break; 
  211.           } 
  212.           return $this->handleStr($obj,$content); 
  213.       } 
  214.       
  215.       //处理回复消息字符串 
  216.       private function handleStr($obj,$content='',$flag=0){ 
  217.        $textTpl = ""; 
  218.        return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag); 
  219.       } 
  220.    
  221.    //签名验证函数 
  222.    private function checkSignature() 
  223.    { 
  224.        $signature = $_GET["signature"]; 
  225.        $timestamp = $_GET["timestamp"]; 
  226.        $nonce = $_GET["nonce"];    
  227.        $token = TOKEN; 
  228.        $tmpArr = array($token, $timestamp, $nonce); 
  229.        sort($tmpArr, SORT_STRING); 
  230.        $tmpStr = implode( $tmpArr ); 
  231.        $tmpStr = sha1( $tmpStr ); 
  232.        if( $tmpStr == $signature ){ 
  233.            return true; 
  234.        }else{ 
  235.            return false; 
  236.        } 
  237.    } 
  238. } 

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

Tags: php微信公众平台 SDK demo

分享到: