public $appid = "填写你的id"; public $appsecret = "填写你的secret"; //获得凭证接口 //返回数组,access_token 和 time 有效期 public function access_token() { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appid}&secret={$this->appsecret}"; $cont = file_get_contents($url); return json_decode($cont, 1); }
你首先开启开发模式。
第一步,查询下当前菜单:
string url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/get?access_token={0}", AccessToken);
知道了当前菜单后
第二步,删除当前菜单;
string url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token={0}", AccessToken);
删除成功后
第三步,创建新的菜单
string url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/create?access_token={0}", AccessToken);
这样根据服务器返回的状态码,来操作
自定义菜单的创建步骤
1、找到AppId和AppSecret。自定义菜单申请成功后,在“高级功能”-“开发模式”-“接口配置信息”的最后两项就是;
2、根据AppId和AppSecret,以https get方式获取访问特殊接口所必须的凭证access_token;
3、根据access_token,将json格式的菜单数据通过https post方式提交。
前段页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="Access-Control-Allow-Origin" content="*" /> <title>微信自定义菜单发布</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content=""> <meta name="author" content=""> <!-- Le styles --把下面的两个链接换成你自己的> <link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> <link href="../bootstrap/css/bootstrap.css" rel="stylesheet"> <!-- <link href="../bootstrap-editable-1.4.4/bootstrap-editable/css/bootstrap-editable.css" rel="stylesheet"> --><style type="text/css"> body { padding-top: 60px; padding-bottom: 40px; } .sidebar-nav { padding: 9px 0; } @media (max-width: 980px) { /* Enable use of floated navbar text */ .navbar-text.pull-right { float: none; padding-left: 5px; padding-right: 5px; } } </style> <style> .table{ margin-top: 10px; } .table th,.table td{ text-align: center; vertical-align: middle; font-size: 12px; } .explain { background-color: #FF9900; } body{font-family:"微软雅黑",Arial,"宋体";-webkit-text-size-adjust:none;} </style> <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> <!--[if lt IE 9]> <script src="../assets/js/html5shiv.js"></script> <![endif]--> <!-- Fav and touch icons --> </head> <body> <table width="90%" border="1" cellspacing="0" cellpadding="5" align ='center'> <!--<tr > <td align = "center" colspan = 2>欢迎加入微信公众号运行讨论群,群号码:8469496.</td></tr>--> <tr > <td align = "right">AppId:</td><td scope="col" align = "left"><input name ="client" id = "appid" value ="" size="60" placeholder="AppID"></td></tr> <tr > <td align = "right">AppSecret:</td><td scope="col" align = "left"><input name ="client" id = "appsecret" value ="" size="60" placeholder="AppSecret"></td></tr> <tr > <td align = "right">菜单:</td><td scope="col" align = "left"><textarea name ="client" id = "menu" cols="10" rows="20" ></textarea></td></tr> <tr > <td align = "center" colspan = 2> <button name ="fabu" class="btn btn-small btn-inverse">发布菜单</button> <button name ="get" class="btn btn-small btn-inverse">获取菜单</button> <button name ="delete" class="btn btn-small btn-inverse">删除菜单</button></td></tr> </table> <body> <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script> <script src="http://libs.baidu.com/bootstrap/2.0.4/js/bootstrap.min.js"></script> <script> $(document).ready(function(){ //发布菜单 $('button[name="fabu"]').click(function(){ var $appid=$("#appid").val(); var $appsecret=$("#appsecret").val(); var $menu=$("#menu").val(); if($appid == "" ){ alert("APPID不能为空!"); return false; }else if($appsecret == ""){ alert("APPSECRET不能为空!"); return false; }else if($menu == ""){ alert("菜单内容不能为空!"); return false; } var butt = $(this); butt.attr('disabled',true); var param = { action:'create', appid: $appid, appsecret: $appsecret, menu:$menu }; $.post("../public/proc_menu.php",param,function(data){ if(data.success == true){ alert ("发布成功,菜单将于二十四小时后生效。您也可以取消然后重新关注以查看菜单效果。"); } else { alert ("发布失败,失败原因->"+data.msg+"."); } butt.removeAttr("disabled"); },"json"); }); //获取菜单 $('button[name="get"]').click(function(){ var $appid=$("#appid").val(); var $appsecret=$("#appsecret").val(); if($appid == "" ){ alert("APPID不能为空!"); return false; }else if($appsecret == ""){ alert("APPSECRET不能为空!"); return false; } var butt = $(this); butt.attr('disabled',true); var param = { action:'get', appid: $appid, appsecret: $appsecret }; $.post("../public/proc_menu.php",param,function(data){//alert(data); //var menu = eval("("+data+")"); //$("#menu").text(menu.menu); var menu = JSON.stringify(data.menu); if(menu != ""){ alert("菜单获取成功!"); $("#menu").text(menu); }else{ alert ("菜单获取失败!"); } /* if(data.success == true){ alert ("获取成功。");alert(data.menu); $("#menu").val(data.menu); } else { alert ("获取失败,失败原因->"+data.msg+"."); }*/ butt.removeAttr("disabled"); },"json"); }); //删除菜单 $('button[name="delete"]').click(function(){ var $appid=$("#appid").val(); var $appsecret=$("#appsecret").val(); if($appid == "" ){ alert("APPID不能为空!"); return false; }else if($appsecret == ""){ alert("APPSECRET不能为空!"); return false; } var butt = $(this); butt.attr('disabled',true); var param = { action:'delete', appid: $appid, appsecret: $appsecret }; $.post("../public/proc_menu.php",param,function(data){ if(data.success == true){ alert ("菜单删除成功。"); } else { alert ("删除失败,失败原因->"+data.msg+"."); } butt.removeAttr("disabled"); },"json"); }); }); </script>
//后端代码 <?php header("Content-type: text/html; charset=utf-8"); $appid = $_POST["appid"]; $appsecret = $_POST["appsecret"]; $menu = $_POST["menu"]; $action = $_POST["action"]; $header = "Content-type: text/xml";//定义content-type为xml $token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret; $cu = curl_init(); //初始化curl curl_setopt($cu, CURLOPT_URL, $token_url); curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1); $access_token_json = curl_exec($cu); curl_close($cu); $access_token = json_decode($access_token_json); if($access_token->errcode != ""){//获取access_token失败 $s = "{\"success\": false,\"msg\":\"".$access_token->errmsg."\" }"; echo $s; }else{ if($action == "create"){//创建菜单 $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token->access_token; $ch = curl_init(); //初始化curl curl_setopt($ch, CURLOPT_URL, $url);//设置链接 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置是否返回信息 curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//设置HTTP头 curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $menu);//POST数据 $response_json = curl_exec($ch);//接收返回信息 if(curl_errno($ch)){//出错则显示错误信息 $s = "{\"success\": false,\"msg\":\"".curl_error($ch)."\" }"; echo $s; }else{ $response = json_decode($response_json); if($response->errcode != ""){//报错 $s = "{\"success\": false,\"msg\":\"".$response->errmsg."\" }"; echo $s; }else{ $s = "{\"success\": true}"; echo $s; } } curl_close($ch); //关闭curl链接 }elseif($action == "get"){//获取菜单 $url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=".$access_token->access_token; $cu = curl_init(); //初始化curl curl_setopt($cu, CURLOPT_URL, $url); curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1); $menu_json = curl_exec($cu); $menu = json_decode($menu_json); curl_close($cu); echo $menu_json ; }elseif($action == "delete"){//获取菜单 $url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$access_token->access_token; $cu = curl_init(); //初始化curl curl_setopt($cu, CURLOPT_URL, $url); curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1); $menu_json = curl_exec($cu); $menu = json_decode($menu_json); curl_close($cu); if($menu->errcode == "0"){ $s = "{\"success\": true}"; echo $s; }else{ $s = "{\"success\": false}"; echo $s; } }else{ } } ?>