php实现基于微信公众平台开发SDK扩展的方法_php技巧_脚本之家

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

源码:

该扩展基于官方的微信公众平台SDK,这里只做了简单地封装,实现了一些基本的功能(如天气查询,翻译,自动聊天机器人,自定义菜单接口)仅供学习之用.代码如下:复制代码 代码如下:define; $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 ){ $postObj =
simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$msgType=trim; switch{ case 'text': $resultStr=$this->handleText;
break; case 'event': $resultStr=$this->handleEvent; break; default:
$resultStr=$this->handleDefault; break; } echo $resultStr; }else {
echo "Error"; exit; } } //处理文本消息 private function handleText{
$keyword=trim; if(preg_match{ $contentStr=$this->handleWeather;
}elseif(preg_match{ $contentStr=$this->handleTranslation; }else{
$contentStr=$this->handleChat; } return $this->handleStr; }
//处理天气 private function handleWeather{
$keyword=mb_substr($obj->Content,-2,2,'utf-8');
$zone=mb_substr($obj->Content,0,-2,'utf-8'); if($keyword=='天气' &&
!emptyempty{
$zoneArr=json_decode(file_get_contents(');
$zoneArr=$zoneArr['result']; $cityId=''; foreach{
if($zone==$value['citynm']){ $cityId=$value['weaid']; break; } } if{
$data=file_get_contents("");
$data=json_decode;
$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{
$keyword=mb_substr($obj->Content,0,2,'utf-8');
$words=mb_substr($obj->Content,2,220,'utf-8'); if($keyword=='翻译'
&& !emptyempty{
$data=file_get_contents(';
$data=json_decode; switch{ 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{ $keywords=$obj->Content;
$curlPost=array; $ch = curl_init();//初始化curl curl_setopt($ch,
CURLOPT_URL,'
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header curl_setopt($ch,
CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt;//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS,
$curlPost); $data = curl_exec;//运行curl curl_close; if{
$contentStr=$data; }else{ $ran=rand{ 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{ $ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
");
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;
return $result; } //查询自定义菜单 function getMenu{
$url="";
$ch = curl_init; 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; }
//删除自定义菜单 public function deleteMenu{
$url=";
$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; return $result;
}

 代码如下

//处理事件消息 private function handleEvent{ $content=''; switch{ case
'subscribe': $content.="welcome-欢迎关注该公众号号!"; break; case
'unsubscribe': $content.="感谢您一直以来对该公众号的关注,再见!"; break;
default: $content.=""; break; } return $this->handleStr; }
//处理回复消息字符串 private function
handleStr($obj,$content='',$flag=0){ $textTpl = ""; return
sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time; }
//签名验证函数 private function checkSignature() { $signature =
$_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce =
$_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp,
$nonce); sort; $tmpStr = implode; $tmpStr = sha1; if( $tmpStr ==
$signature ){ return true; }else{ return false; } } }

define("TOKEN", "xingans");

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

$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($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($zone)){
         
             
$zoneArr=json_decode(file_get_contents(');
              $zoneArr=$zoneArr['result'];
             
              $cityId='';
             
              foreach($zoneArr
as $value){
                  if($zone==$value['citynm']){
                      $cityId=$value['weaid'];
                      break;
                  }
              }
             
              if(!empty($cityId)){
                 
$data=file_get_contents("");

                  $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($words)){
         
 $data=file_get_contents('));
     
           $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,'
       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($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="";
         
          $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=";
 
       $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);

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。