好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

基于微信公众平台开发SDK(demo)扩展例子 - 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  (! empty empty ( $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 == '天气'  && ! empty empty ( $zone )){                            $zoneArr =json_decode( file_get_contents ( 'http://api.k780测试数据:88/?app=weather.city&format=json' ),true);                 $zoneArr = $zoneArr [ 'result' ];                                $cityId = '' ;                                foreach ( $zoneArr   as   $value ){                     if ( $zone == $value [ 'citynm' ]){                         $cityId = $value [ 'weaid' ];                         break ;                    }                }                                if (! empty empty ( $cityId )){                     $data = file_get_contents ( "http://api.k780测试数据: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 == '翻译'  && ! empty empty ( $words )){              $data = file_get_contents ( 'http://fanyi.youdao测试数据/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://HdhCmsTestxiaojo测试数据/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 (! empty empty ( $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测试数据/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测试数据/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测试数据/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" ];              //开源代码phpfensi测试数据           $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;         }     }  }

查看更多关于基于微信公众平台开发SDK(demo)扩展例子 - php高级的详细内容...

  阅读:44次