PHP implements WeChat public platform account custom menu class, public account_PHP tutorial

WBOY
Release: 2016-07-13 10:12:38
Original
1317 people have browsed it

php implements WeChat public platform account custom menu class, public account

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.

Apply for custom menu

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

Copy code The code is as follows:
//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.="
                         <![CDATA[{$v[0]}]]> 
                        
                        
                        
                        
";
                }
                $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.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/920611.htmlTechArticlephp implements the WeChat public platform account custom menu class, public account This article tells the example of php implementing the WeChat public platform account customization Define the method of the menu class. Share it with everyone for your reference. ...
Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template