이 기사의 예에서는 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 기반 위챗 개발에 도움이 되기를 바랍니다.