Home  >  Article  >  Backend Development  >  PHP version of WeChat public platform account custom menu class_PHP tutorial

PHP version of WeChat public platform account custom menu class_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:43:44649browse

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.

Apply for custom menu

Service accounts can apply for custom menus; public accounts that use QQ to log in can be upgraded to email login; public accounts that use email to log in can modify the login email; group messages can be synchronized to Tencent Weibo.

PHP version of WeChat public platform account custom menu class_PHP tutorial

WeChat public platform account api program

The code is as follows Copy code

//define your token
define("TOKEN", "chenxiang");//Change to your own TOKEN
define('APP_ID', '');//Change to your own APPID
define('APP_SECRET', '');//Change to your own 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[]= "Hello, this is an automatic reply, I am not here right now, please leave a message if you have anything, I will reply to you as soon as possible^_^";
echo $this->make_xml("text",$arr);
}

public function responseMsg()

          $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//Return reply data
If (!empty($postStr)){
                  $access_token = $this->get_access_token();//Get access_token
$ This-& gt; createmenu ($ acces_token); // Create menu
//$this->delmenu($access_token);//Delete menu
                  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                             $this->fromUsername = $postObj->FromUserName;//Sender ID
                              $this->toUsername = $postObj->ToUserName;//Receiver ID
                     $this->keyword = trim($postObj->Content);//Messages sent by users
$ This- & gt; times = time (); // Send time
                      $MsgType = $postObj->MsgType;//Message type
If($MsgType=='event'){
                          $MsgEvent = $postObj->Event;//Get the event type
If ($MsgEvent=='subscribe') {//Subscribe event
​​​​​​​​​ echo $this->make_xml("text",$arr);
exit;
                              }elseif ($MsgEvent=='CLICK') {//Click event
$ EventKey = $ POSTOBJ- & GT; Eventkey; // The customized key value of the menu can determine what the user clicks the content of the user 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 "获取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(
                                                                                                                                                                                                                                                                                                           ‘type’=>'click',
'key'=>'VCX_GUAHAPPY'
),
array(
‘name’=>urlencode("Lucky Wheel"),
'type'=>'click',
'key'=>'VCX_LUCKPAN'
)
)
),
array(
'Name' = & gt; 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;
        }
    }
}

?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/633154.htmlTechArticle微信公众平台服务号可申请自定义菜单了,其它的号暂时不支持自定义菜单了,这个不但可以使用api来操作,还可以直接在后台定义菜单与...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn