>백엔드 개발 >PHP 튜토리얼 >WeChat 공개 platform_php 기술을 기반으로 SDK(데모) 확장 개발을 구현하는 PHP 방법

WeChat 공개 platform_php 기술을 기반으로 SDK(데모) 확장 개발을 구현하는 PHP 방법

WBOY
WBOY원래의
2016-05-16 20:27:47923검색

이 기사의 예에서는 PHP를 사용하여 WeChat 공개 플랫폼을 기반으로 SDK(데모) 확장을 개발하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

이 확장 프로그램은 공식 WeChat 공개 플랫폼 SDK를 기반으로 하며 여기에 간단히 캡슐화되어 있으며 학습 목적으로만 몇 가지 기본 기능(예: 날씨 쿼리, 자동 채팅 로봇, 사용자 정의 메뉴 인터페이스)을 구현합니다. 학습 목적은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
define("TOKEN", "xingans")
$wechatObj = 새로운 wechatCallbackapiTest()
$wechatObj->응답Msg()
wechatCallbackapiTest 클래스
{
//서명 확인 공개 인터페이스
공개 함수 valid()
{
$echoStr = $_GET["echostr"]
If($this->checkSignature()){
                에코 $echoStr
종료
         }
}

//주입구 처리 기능
공개 함수 responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]
If (!emptyempty($postStr)){
              $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA)
                 $msgType=trim($postObj->MsgType)
~                스위치($msgType){
케이스 '텍스트':
                          $resultStr=$this->handleText($postObj)
휴식
사례 '이벤트':
                        $resultStr=$this->handleEvent($postObj)
휴식
                              기본값:
                         $resultStr=$this->handleDefault($postObj)
휴식
             }
                 echo $resultStr; ~ }else {
                에코 "오류"
종료
         }
}

//문자 메시지 처리
       비공개 함수 handlerText($obj){
              $keyword=trim($obj->Content)
If(preg_match('/weather/',$keyword)){
                  $contentStr=$this->handleWeather($obj)
               }elseif(preg_match('/translation/',$keyword)){
                   $contentStr=$this->handleTranslation($obj)
            }그밖에{
                   $contentStr=$this->handleChat($obj)
             }
               return $this->handleStr($obj,$contentStr)
        }
       
//날씨 처리
       비공개 함수 handlerWeather($obj){
               $keyword=mb_substr($obj->Content,-2,2,'utf-8')
              $zone=mb_substr($obj->Content,0,-2,'utf-8')
If($keyword=='weather' && !emptyempty($zone)){
$zoneArr=json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json'),true)
              $zoneArr=$zoneArr['결과'];
              $cityId='';
              foreach($zoneArr을 $value로){
                  if($zone==$value['citynm']){
                      $cityId=$value['weaid'];
                      부서지다;
                  }
              }
             
              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->결과->일.",".$data->결과-> week.",".$data->result->citynm."천기:".$data->결과->weather."n온도:".$data->결과->온도. ",
                  ".$data->result->wind_direction.",".$data->result->wind_power.", 最低温島:".$data->result->temp_low.",最高温島:".$data->result->temp_high;
              }그밖에{
                  $contentStr='즐거운 도시는 아닙니다!';
              }   
          }그밖에{
              $contentStr='좋은 정보가 없습니다!';
          }
          $contentStr을 반환합니다.
      }
     
      //处理翻译
      개인 함수 handlerTranslation($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);
          
           스위치($data['errorCode']){
               사례 '0':
                   $contentStr=$data['translation'][0];
                   부서지다;
               사례 '20':
                   $contentStr='내용이 쓰여진 문서';
                   부서지다;
               사례 '30':
                   $contentStr='모든 방법의 실행이 가능합니다';
휴식
사례 '40':
$contentStr='지원되지 않는 언어 유형'
휴식
사례 '50':
$contentStr='잘못된 키'
휴식
                              기본값:
                          $contentStr='오류'
휴식
             }
        }그밖에{
​​​​​​ $contentStr='입력 번역 형식이 잘못되었습니다!';          }
        $contentStr 반환
        }
       
//채팅 정보 처리
       비공개 함수 handlerChat($obj){
         $keywords=$obj->콘텐츠
         $curlPost=array("chat"=>$keywords)
​​​​ $ch = cur_init();//컬 초기화
cur_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//지정된 웹페이지 잡기
​​​ 컬_setopt($ch, CURLOPT_HEADER, 0);//헤더 설정
        cur_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//결과가 문자열이어야 하고 화면에 출력되어야 합니다.
cur_setopt($ch, CURLOPT_POST, 1);//포스트 제출 방법
컬_setopt($ch, CURLOPT_POSTFIELDS, $curlPost)
​​​​ $data = 컬_exec($ch);//컬 실행
        컬_닫기($ch)
                           
If(!emptyempty($data)){
              $contentStr=$data
        }그밖에{
               $ran=rand(1,5)
~                스위치($ran){
사례 1:
                                  $contentStr= "샤오지우는 오늘 피곤해서 내일 얘기할게요"
휴식
사례 2:
                      $contentStr= "샤오지우가 자고 있어요~~"
휴식
사례 3:
$ Contentstr = "흐흐흐~~허~~"
휴식
사례 4:
                          $contentStr= "말이 많으시네요. 더 이상 말을 하지 않겠습니다."
휴식
사례 5:
                          $contentStr= "말이 많으시네요. 더 이상 말을 하지 않겠습니다."
휴식
             }
         }
        $contentStr 반환
        }
       
//맞춤 메뉴 만들기
공개 함수 createMenu($data,$token){
          $ch = 컬_init()
​​ ​ 컬_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token)
컬_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST")
        컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)
        컬_setopt($ch, CURLOPT_SSL_VERIFYHOST, false)
cur_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0(호환; MSIE 5.01; Windows NT 5.0)')
컬_setopt($ch, CURLOPT_FOLLOWLOCATION, 1)
​​​​ 컬_setopt($ch, CURLOPT_AUTOREFERER, 1)
         컬_setopt($ch, CURLOPT_POSTFIELDS, $data)
​​​​ 컬_setopt($ch, CURLOPT_RETURNTRANSFER, true)
         $result =curl_exec($ch);                                                   컬_닫기($ch)
          $결과 반환
        }
       
//맞춤 메뉴 쿼리
함수 getMenu($token){
         $url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token"
         $ch = 컬_init($url)
​​​curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); //데이터 가져오기 및 반환
cur_setopt($ch, CURLOPT_BINARYTRANSFER,true); //CURLOPT_RETURNTRANSFER가 활성화되면 데이터가 검색되어 반환됩니다.
컬_setopt($ch, CURLOPT_SSL_VERIFYPEER,false)
컬_setopt($ch, CURLOPT_SSL_VERIFYHOST,false)
         $output 반환 = cur_exec($ch);                                             }
       
//맞춤 메뉴 삭제
공개 함수 deleteMenu($token){
        $url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$token
         $ch = 컬_init()
​​​ 컬_setopt($ch, CURLOPT_URL, $url)
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1)
       컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)
       컬_setopt($ch, CURLOPT_SSL_VERIFYHOST, false)
         $result = 컬_exec($ch)
        컬_닫기($ch)
         $결과 반환
}

//이벤트 메시지 처리
       비공개 함수 handlerEvent($obj){
            $content=''
              스위치($obj->이벤트){
케이스 '구독':
​​​​​​​​​ 휴식
'구독 취소' 사례:
$ 내용 = "공개 계정에 많은 관심 부탁드립니다!"; 휴식
                            기본값:
                     $content.=""
휴식
             }
               return $this->handleStr($obj,$content)
        }
       
//응답 메시지 문자열 처리
       비공개 함수 handlerStr($obj,$content='',$flag=0){
​​​​ $textTpl = ""
          return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag);         }

//서명확인 기능
개인 함수 checkSignature()
{
$signature = $_GET["서명"]
        $timestamp = $_GET["timestamp"]
                $nonce = $_GET["nonce"];                                                 $토큰 = 토큰
         $tmpArr = array($token, $timestamp, $nonce)
       sort($tmpArr, SORT_STRING)
         $tmpStr = 파열( $tmpArr )
         $tmpStr = sha1( $tmpStr )
If( $tmpStr == $signature ){
            true를 반환합니다.
        }그밖에{
             거짓 반환
         }
}
}


이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.