이 기사의 예에서는 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 프로그래밍 설계에 도움이 되기를 바랍니다.