>  기사  >  백엔드 개발  >  PHP는 WeChat 공개 플랫폼 계정 사용자 정의 메뉴 class_php 기술을 구현합니다.

PHP는 WeChat 공개 플랫폼 계정 사용자 정의 메뉴 class_php 기술을 구현합니다.

WBOY
WBOY원래의
2016-05-16 20:29:21875검색

이 기사의 예에서는 WeChat 공개 플랫폼 계정의 사용자 정의 메뉴 클래스를 PHP로 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

WeChat 공개 플랫폼 서비스 계정은 맞춤 메뉴를 신청할 수 있습니다. 다른 계정은 당분간 맞춤 메뉴를 지원하지 않습니다. 이는 API를 사용하여 작동할 수 있을 뿐만 아니라 메뉴와 매개변수를 백그라운드에서 직접 정의할 수도 있습니다.

맞춤메뉴 신청

서비스 계정은 사용자 정의 메뉴를 신청할 수 있습니다. QQ를 사용하여 로그인하는 공식 계정은 이메일 로그인으로 업그레이드할 수 있습니다. 이메일을 사용하여 로그인하는 공식 계정은 로그인 이메일 주소를 수정할 수 있으며, 그룹 메시지는 Tencent Weibo에 동기화될 수 있습니다. .

WeChat 공개 플랫폼 계정 API 프로그램

코드 복사 코드는 다음과 같습니다.
//토큰 정의
Define("TOKEN", "chenxiang");//改成自己的TOKEN
Define('APP_ID', '');//자체 APPID
Define('APP_SECRET', '');//자체 APPSECRET
 
$wechatObj = 새로운 wechatCallbackapiTest(APP_ID,APP_SECRET);
$wechatObj->실행();
 
wechatCallbackapiTest 클래스
{
    개인 $fromUsername;
    개인 $toUsername;
    비공개 $times;
    개인 $키워드;
    비공개 $app_id;
    비공개 $app_secret;
    
    공개 함수 __construct($appid,$appsecret)
    {
        # 코드...
        $this->app_id = $appid;
        $this->app_secret = $appsecret;
    }
    공개 함수 valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            에코 $echoStr;
            출구;
        }
    }
    /**
* 프로그램 실행
* @param string $value [설명]
​​*/
    공개 함수 Run()
    {
        $this->responseMsg();
        $arr[]= "당신이 스스로를 죽였을 때, 나는 지금 존재하지 않으며, 모든 정보가 없습니다. 나는 당신의 이름을 따왔습니다^_^";
        echo $this->make_xml("text",$arr);
    }
    공개 함수 responseMsg()
    {   
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//返回回复数据
        if (!emptyempty($postStr)){
                $access_token = $this->get_access_token();//접근액세스 토큰
                $this->createmenu($access_token);//创建菜单
                //$this->delmenu($access_token);//删除菜单
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $this->fromUsername = $postObj->FromUserName;//发送消息方ID
                $this->toUsername = $postObj->ToUserName;//接收消息方ID
                $this->keyword = Trim($postObj->Content);//사용용户发送的消息
                $this->times = time();//发送时间
                $MsgType = $postObj->MsgType;//消息类型
                if($MsgType=='이벤트'){
                    $MsgEvent = $postObj->Event;//获取事件类型
                    if ($MsgEvent=='subscribe') {//订阅事件
                        $arr[] = "내가 여기 있습니다. xxx, 내가 여기 있습니다![愉快][玫瑰]";
                        echo $this->make_xml("text",$arr);
                        출구;
                             }elseif ($MsgEvent=='CLICK') {//클릭 이벤트
$ EventKey = $ POSTOBJ- & GT; // 메뉴의 사용자 정의 키 값은 이 값을 기반으로 사용자가 클릭하는 내용을 결정하여 다른 정보를 푸시할 수 있습니다
                                  $arr[] = $EventKey
echo $this->make_xml("text",$arr)
종료
~                                                 ~           }else {
echo "weixin API용 파일입니다!"; 종료
           }
}
/**
* access_token 받기
​​*/
비공개 함수 get_access_token()
{
           $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->app_id."&secret=".$this->app_secret
           $data = json_decode(file_get_contents($url),true)
If($data['access_token']){
                $data['access_token'] 반환
         }그 외{
                "access_token 가져오기 오류"를 반환합니다.
           }
}
/**
*메뉴 만들기
* @param $access_token ACCESS_TOKEN 획득
​​*/
공개 함수 생성 메뉴($access_token)
{
          $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token
                $arr = 배열(                                         '버튼' =>배열(
배열(
'name'=>urlencode("Life Query"),
'sub_button'=>배열(
배열(
'name'=>urlencode("날씨 쿼리"),
'유형'=>'클릭',
'키'=>'VCX_WEATHER'
),
배열(
'name'=>urlencode("신분증 조회"),
'유형'=>'클릭',
'키'=>'VCX_IDENT'
)                                             )
),
배열(
'이름' = & gt; urlencode ("쉬운 엔터테인먼트"),
'sub_button'=>배열(
배열(
'이름' = & gt; urlencode ("스크래핑 음악"),
'유형'=>'클릭',
'키'=>'VCX_GUAHAPPY'
),
배열(
'name'=>urlencode("행운의 바퀴"),
'유형'=>'클릭',
'키'=>'VCX_LUCKPAN'
)                                             )
),
배열(
'name'=>urlencode("내 정보"),
'sub_button'=>배열(
배열(
'name'=>urlencode("내 정보"),
'유형'=>'클릭',
'키'=>'VCX_ABOUTME'
),
배열(
'name'=>urlencode("작업 ​​정보"),
'유형'=>'클릭',
                            '키'=>'VCX_JOBINFORMATION'
                        )
                    )
                )
            )
        );
        $jsondata = urldecode(json_encode($arr));
        $ch = 컬_초기화();
        컬_setopt($ch,CURLOPT_URL,$url);
        컬_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        컬_setopt($ch,CURLOPT_POST,1);
        컬_setopt($ch,CURLOPT_POSTFIELDS,$jsondata);
        컬_exec($ch);
        컬_닫기($ch);
    }
    /**
* 쿼리 메뉴
* @param $access_token ACCESS_TOKEN 획득
​​*/
    
    개인 함수 getmenu($access_token)
    {
        # 코드...
        $url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=".$access_token;
        $data = file_get_contents($url);
        $data를 반환합니다.
    }
    /**
* 메뉴 삭제
* @param $access_token ACCESS_TOKEN 획득
​​*/
    
    개인 함수 delmenu($access_token)
    {
        # 코드...
        $url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$access_token;
        $data = json_decode(file_get_contents($url),true);
        if ($data['errcode']==0) {
            # 코드...
            사실을 반환;
        }그밖에{
            거짓을 반환;
        }
    }
        
    /**
*@param 유형: 텍스트 텍스트 유형, 뉴스 그래픽 유형
*@param value_arr 배열(내용),배열(ID)
*@param o_arr array(array(제목, 소개, 그림, 하이퍼링크),...10개 항목 미만), array(항목 수, ID)
​​*/
    
    개인 함수 make_xml($type,$value_arr,$o_arr=array(0)){
        //=================xml 헤더============
        $con="
                    fromUsername}]]>
                    toUsername}]]>
                    {$this->times}
                    ";
                    
          //=================컨텐츠 유형============
        스위치($type){
          
            대소문자 "텍스트": 
                $con.="
                    {$o_arr}";  
            부서지다;
            
            사례 "뉴스": 
                $con.="{$o_arr[0]}
                     <기사>";
                foreach($value_arr as $id=>$v){
                    if($id>=$o_arr[0]) 중단; 그렇지 않으면 null; //判断数组数不超过设置数
                    $con.="<항목>
                         <제목> 
                         <설명>
                        
                        
                         ";
                }
                $con.="
                     {$o_arr[1]}";  
            부서지다;
        } //스위치 종료
         //=================반환 종료============
        $con.="
";
        $con을 반환합니다.
    }
 
    개인 함수 checkSignature()
    {
        $signature = $_GET["서명"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];    
                
        $토큰 = 토큰;
        $tmpArr = array($token, $timestamp, $nonce);
        정렬($tmpArr);
        $tmpStr = 파열( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        
        if( $tmpStr == $signature ){
            사실을 반환;
        }그밖에{
            거짓을 반환;
        }
    }
}
?>

이 글이 모든 분들의 PHP 기반 위챗 개발에 도움이 되기를 바랍니다.

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