The example in this article describes the method of implementing the custom menu class of the WeChat public platform account in PHP. Share it with everyone for your reference. The specific analysis is as follows:
WeChat public platform service accounts can apply for custom menus. Other accounts do not support custom menus for the time being. This can not only be operated using the API, but also the menus and parameters can be defined directly in the background.
Service accounts can apply for custom menus. Official accounts that use QQ to log in can be upgraded to email login. Official accounts that use email to log in can modify the login email address, and group messages can be synchronized to Tencent Weibo.
WeChat public platform account api program
//define your token
define("TOKEN", "chenxiang");//改成自己的TOKEN
define('APP_ID', '');//改成自己的APPID
define('APP_SECRET', '');//改成自己的APPSECRET
$wechatObj = new wechatCallbackapiTest(APP_ID,APP_SECRET);
$wechatObj->Run();
class wechatCallbackapiTest
{
private $fromUsername;
private $toUsername;
private $times;
private $keyword;
private $app_id;
private $app_secret;
public function __construct($appid,$appsecret)
{
# code...
$this->app_id = $appid;
$this->app_secret = $appsecret;
}
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
/**
* Run the program
* @param string $value [description]
*/
public function Run()
{
$this->responseMsg();
$arr[]= "您好,这是自动回复,我现在不在,有事请留言,我会尽快回复你的^_^";
echo $this->make_xml("text",$arr);
}
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//返回回复数据
if (!emptyempty($postStr)){
$access_token = $this->get_access_token();//获取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=='event'){
$MsgEvent = $postObj->Event;//获取事件类型
if ($MsgEvent=='subscribe') {//订阅事件
$arr[] = "你好,我是xxx,现在我们是好友咯![愉快][玫瑰]";
echo $this->make_xml("text",$arr);
exit;
}elseif ($MsgEvent=='CLICK') {//Click event
$ EventKey = $ POSTOBJ- & GT; EventKey; // The custom key value of the menu can determine what the user clicks the user's clicks based on this value, so as to push different information
$arr[] = $EventKey;
echo $this->make_xml("text",$arr);
exit;
}else {
echo "this a file for weixin API!";
exit;
}
}
/**
* Get access_token
*/
Private function 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']){
return $data['access_token'];
}else{
return "Error getting access_token";
}
}
/**
*Create menu
* @param $access_token Obtained ACCESS_TOKEN
*/
Public function createmenu($access_token)
{
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$arr = array(
'button' =>array(
array(
'name'=>urlencode("Life Query"),
‘sub_button’=>array(
array(
'name'=>urlencode("Weather Query"),
'type'=>'click',
'key'=>'VCX_WEATHER'
),
array(
‘name’=>urlencode("ID card query"),
'type'=>'click',
'key'=>'VCX_IDENT'
)
)
),
array(
'Name' = & gt; urlencode ("Easy Entertainment"),
‘sub_button’=>array(
array(
'Name' = & gt; urlencode ("scraping music"),
'type'=>'click',
'key'=>'VCX_GUAHAPPY'
),
array(
'name'=>urlencode("Lucky Wheel"),
'type'=>'click',
'key'=>'VCX_LUCKPAN'
)
)
),
array(
'name'=>urlencode("My information"),
‘sub_button’=>array(
array(
'name'=>urlencode("About me"),
'type'=>'click',
'key'=>'VCX_ABOUTME'
),
array(
'name'=>urlencode("Job Information"),
'type'=>'click',
'key'=>'VCX_JOBINFORMATION'
)
)
)
)
);
$jsondata = urldecode(json_encode($arr));
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$jsondata);
curl_exec($ch);
curl_close($ch);
}
/**
* Query menu
* @param $access_token Obtained ACCESS_TOKEN
*/
private function getmenu($access_token)
{
# code...
$url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=".$access_token;
$data = file_get_contents($url);
return $data;
}
/**
* Delete menu
* @param $access_token Obtained ACCESS_TOKEN
*/
private function delmenu($access_token)
{
# code...
$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) {
# code...
return true;
}else{
return false;
}
}
/**
*@param type: text text type, news graphic type
*@param value_arr array(content),array(ID)
*@param o_arr array(array(title, introduction, picture, hyperlink),... less than 10 items), array(number of items, ID)
*/
private function make_xml($type,$value_arr,$o_arr=array(0)){
//=================xml header============
$con="
fromUsername}]]>
toUsername}]]>
{$this->times}
";
//=================type content============
switch($type){
case "text" :
$con.="
{$o_arr}";
break;
case "news" :
$con.="{$o_arr[0]}
";
foreach($value_arr as $id=>$v){
if($id>=$o_arr[0]) break; else null; //判断数组数不超过设置数
$con.="-
";
}
$con.="
{$o_arr[1]}";
break;
} //end switch
//=================end return============
$con.="";
return $con;
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>
I hope this article will be helpful to everyone’s WeChat development based on PHP.