当前位置:首页 > PHP教程 > php应用 > 列表

php实现微信公众平台账号自定义菜单类

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-20 00:17:28 浏览: 评论:0 

微信公众平台服务号可申请自定义菜单了,其它的号暂时不支持自定义菜单了,这个不但可以使用api来操作,还可以直接在后台定义菜单与参数哦。

服务号可以申请自定义菜单;使用QQ登录的公众号,可以升级为邮箱登录;使用邮箱登录的公众号,可以修改登录邮箱;群发消息可以同步到腾讯微博。微信公众平台升级:服务号可申请自定义菜单

wx_menu.php

  1. <?php 
  2. //define your token 
  3. define("TOKEN", "chenxiang");//改成自己的TOKEN 
  4. define('APP_ID', '');//改成自己的APPID 
  5. define('APP_SECRET', '');//改成自己的APPSECRET 
  6.    
  7. $wechatObj = new wechatCallbackapiTest(APP_ID,APP_SECRET); 
  8. $wechatObj->Run(); 
  9.    
  10. class wechatCallbackapiTest 
  11. { 
  12.   private $fromUsername; 
  13.   private $toUsername; 
  14.   private $times; 
  15.   private $keyword; 
  16.   private $app_id; 
  17.   private $app_secret; 
  18.    
  19.    
  20.   public function __construct($appid,$appsecret) 
  21.   { 
  22. # code... 
  23.     $this->app_id = $appid; 
  24.     $this->app_secret = $appsecret; 
  25.   } 
  26.   public function valid() 
  27.   { 
  28.     $echoStr = $_GET["echostr"]; 
  29.     if($this->checkSignature()){ 
  30.       echo $echoStr; 
  31.       exit; 
  32.     } 
  33.   } 
  34.   /** 
  35.    * 运行程序 
  36.    * @param string $value [description] 
  37.    */ 
  38.   public function Run() 
  39.   { 
  40.     $this->responseMsg(); 
  41.     $arr[]= "您好,这是自动回复,我现在不在,有事请留言,我会尽快回复你的^_^"; 
  42.     echo $this->make_xml("text",$arr); 
  43.   } 
  44.   public function responseMsg() 
  45.   {   
  46.     $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//返回回复数据 
  47.     if (!emptyempty($postStr)){ 
  48.       $access_token = $this->get_access_token();//获取access_token 
  49.       $this->createmenu($access_token);//创建菜单 
  50.       //$this->delmenu($access_token);//删除菜单 
  51.       $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 
  52.       $this->fromUsername = $postObj->FromUserName;//发送消息方ID 
  53.       $this->toUsername = $postObj->ToUserName;//接收消息方ID 
  54.       $this->keyword = trim($postObj->Content);//用户发送的消息 
  55.       $this->times = time();//发送时间 
  56.       $MsgType = $postObj->MsgType;//消息类型 
  57.       if($MsgType=='event'){ 
  58.         $MsgEvent = $postObj->Event;//获取事件类型 
  59.         if ($MsgEvent=='subscribe') {//订阅事件 
  60.           $arr[] = "你好,我是xxx,现在我们是好友咯![愉快][玫瑰]"; 
  61.           echo $this->make_xml("text",$arr); 
  62.           exit; 
  63.         }elseif ($MsgEvent=='CLICK') {//点击事件 
  64.           $EventKey = $postObj->EventKey;//菜单的自定义的key值,可以根据此值判断用户点击了什么内容,从而推送不同信息 
  65.           $arr[] = $EventKey; 
  66.           echo $this->make_xml("text",$arr); 
  67.           exit; 
  68.         } 
  69.       } 
  70.     }else { 
  71.       echo "this a file for weixin API!"; 
  72.       exit; 
  73.     } 
  74.   } 
  75.   /** 
  76.    * 获取access_token 
  77.    */ 
  78.   private function get_access_token() 
  79.   { 
  80.     $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->app_id."&secret=".$this->app_secret; 
  81.     $data = json_decode(file_get_contents($url),true); 
  82.     if($data['access_token']){ 
  83.       return $data['access_token']; 
  84.     }else{ 
  85.       return "获取access_token错误"; 
  86.     } 
  87.   } 
  88.   /** 
  89.    * 创建菜单 
  90.    * @param $access_token 已获取的ACCESS_TOKEN 
  91.    */ 
  92.   public function createmenu($access_token) 
  93.   { 
  94.     $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token; 
  95.     $arr = array(  
  96.         'button' =>array( 
  97.           array( 
  98.             'name'=>urlencode("生活查询"), 
  99.             'sub_button'=>array( 
  100.               array( 
  101.                 'name'=>urlencode("天气查询"), 
  102.                 'type'=>'click', 
  103.                 'key'=>'VCX_WEATHER' 
  104.                 ), 
  105.               array( 
  106.                 'name'=>urlencode("身份证查询"), 
  107.                 'type'=>'click', 
  108.                 'key'=>'VCX_IDENT' 
  109.                 ) 
  110.               ) 
  111.             ), 
  112.           array( 
  113.             'name'=>urlencode("轻松娱乐"), 
  114.             'sub_button'=>array( 
  115.               array( 
  116.                 'name'=>urlencode("刮刮乐"), 
  117.                 'type'=>'click', 
  118.                 'key'=>'VCX_GUAHAPPY' 
  119.                 ), 
  120.               array( 
  121.                 'name'=>urlencode("幸运大转盘"), 
  122.                 'type'=>'click', 
  123.                 'key'=>'VCX_LUCKPAN' 
  124.                 ) 
  125.               ) 
  126.             ), 
  127.           array( 
  128.               'name'=>urlencode("我的信息"), 
  129.               'sub_button'=>array( 
  130.                 array( 
  131.                   'name'=>urlencode("关于我"), 
  132.                   'type'=>'click', 
  133.                   'key'=>'VCX_ABOUTME' 
  134.                   ), 
  135.                 array( 
  136.                   'name'=>urlencode("工作信息"), 
  137.                   'type'=>'click', 
  138.                   'key'=>'VCX_JOBINFORMATION' 
  139.                   ) 
  140.                 ) 
  141.              ) 
  142.             ) 
  143.             ); 
  144.     $jsondata = urldecode(json_encode($arr)); 
  145.     $ch = curl_init(); 
  146.     curl_setopt($ch,CURLOPT_URL,$url); 
  147.     curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
  148.     curl_setopt($ch,CURLOPT_POST,1); 
  149.     curl_setopt($ch,CURLOPT_POSTFIELDS,$jsondata); 
  150.     curl_exec($ch); 
  151.     curl_close($ch); 
  152.   } 
  153.   /** 
  154.    * 查询菜单 
  155.    * @param $access_token 已获取的ACCESS_TOKEN 
  156.    */ 
  157.    
  158.   private function getmenu($access_token) 
  159.   { 
  160. # code... 
  161.     $url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=".$access_token; 
  162.     $data = file_get_contents($url); 
  163.     return $data; 
  164.   } 
  165.   /** 
  166.    * 删除菜单 
  167.    * @param $access_token 已获取的ACCESS_TOKEN 
  168.    */ 
  169.    
  170.   private function delmenu($access_token) 
  171.   { 
  172. # code... 
  173.     $url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$access_token; 
  174.     $data = json_decode(file_get_contents($url),true); 
  175.     if ($data['errcode']==0) { 
  176. # code... 
  177.       return true; 
  178.     }else{ 
  179.       return false; 
  180.     } 
  181.   } 
  182.    
  183.   /** 
  184.    *@param type: text 文本类型, news 图文类型 
  185.    *@param value_arr array(内容),array(ID) 
  186.    *@param o_arr array(array(标题,介绍,图片,超链接),...小于10条),array(条数,ID) 
  187.    */ 
  188.    
  189.   private function make_xml($type,$value_arr,$o_arr=array(0)){ 
  190.     //=================xml header============ 
  191.     $con="<xml> 
  192.       <ToUserName><![CDATA[{$this->fromUsername}]]></ToUserName> 
  193.       <FromUserName><![CDATA[{$this->toUsername}]]></FromUserName> 
  194.       <CreateTime>{$this->times}</CreateTime> 
  195.       <MsgType><![CDATA[{$type}]]></MsgType>"; 
  196.    
  197.     //=================type content============ 
  198.     switch($type){ 
  199.    
  200.       case "text" :  
  201.         $con.="<Content><![CDATA[{$value_arr[0]}]]></Content> 
  202.           <FuncFlag>{$o_arr}</FuncFlag>";  
  203.           break; 
  204.    
  205.       case "news" :  
  206.         $con.="<ArticleCount>{$o_arr[0]}</ArticleCount> 
  207.           <Articles>"; 
  208.         foreach($value_arr as $id=>$v){ 
  209.           if($id>=$o_arr[0]) break; else null; //判断数组数不超过设置数 
  210.           $con.="<item> 
  211.             <Title><![CDATA[{$v[0]}]]></Title>  
  212.             <Description><![CDATA[{$v[1]}]]></Description> 
  213.             <PicUrl><![CDATA[{$v[2]}]]></PicUrl> 
  214.             <Url><![CDATA[{$v[3]}]]></Url> 
  215.             </item>"; 
  216.         } 
  217.         $con.="</Articles> 
  218.           <FuncFlag>{$o_arr[1]}</FuncFlag>";  
  219.           break; 
  220.    
  221.     } //end switch 
  222.    
  223.     //=================end return============ 
  224.     $con.="</xml>"; 
  225.    
  226.     return $con; 
  227.   } 
  228.    
  229.    
  230.   private function checkSignature() 
  231.   { 
  232.     $signature = $_GET["signature"]; 
  233.     $timestamp = $_GET["timestamp"]; 
  234.     $nonce = $_GET["nonce"];   
  235.    
  236.     $token = TOKEN; 
  237.     $tmpArr = array($token, $timestamp, $nonce); 
  238.     sort($tmpArr); 
  239.     $tmpStr = implode( $tmpArr ); 
  240.     $tmpStr = sha1( $tmpStr ); 
  241.    
  242.     if( $tmpStr == $signature ){ 
  243.       return true; 
  244.     }else{ 
  245.       return false; 
  246.     } 
  247.   } 
  248. } 
  249. ?>

Tags: php自定义菜单类

分享到: