接口说明通过POST一个特定结构体,实现在微信客户端创建自定义菜单。 http请求方式:POST
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN请求示例 {
     "button":[
     {
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "type":"click",
           "name":"歌手简介",
           "key":"V1001_TODAY_SINGER"
      },
      {
           "name":"菜单",
           "sub_button":[
            {
               "type":"click",
               "name":"hello word",
               "key":"V1001_HELLO_WORLD"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }http://mp.weixin.qq.com/wiki/index.php?title=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E6%8E%A5%E5%8F%A3
这个是微信自定义菜单借口文档。问下哪位大神知道微信那边接受post参数是什么?

解决方案 »

  1.   

    楼主解决没,
    不知道你有没获取到 通用接口里的access_token
    你需要在这里(http://mp.weixin.qq.com/wiki/index.php?title=%E9%80%9A%E7%94%A8%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3)获取access_token
    我没获取成功,楼主你试试吧,获取成功的话分享下
      

  2.   

    我获得了token,但是还是错误,错误值40016,不知道为啥,谁能直接贴一个代码.....
      

  3.   

    我也卡到这里了,成功获得了access_token 但不知道通过POST一个特定结构体,实现在微信客户端创建自定义菜单。 怎么实现~
      

  4.   

    public static void a3(){
    String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=你获得的token";
    /**
     * 设置菜单
     * 在为什么用\"你懂得,这是java代码
     */
    String responeJsonStr = "{"+
    "\"button\":["+
    "{\"name\":\"菜单名称1\","+
    "\"type\":\"click\"," +
    "\"key\":\"V01_S01\"" +
    "},"+
    "{\"name\":\"菜单名称2\","+
    "\"type\":\"click\"," +
    "\"key\":\"V02_S01\"" +
    "},"+
    "{\"name\":\"菜单名称1\","+
    "\"type\":\"click\"," +
    "\"key\":\"V03_S01\"" +
    "}"+
    "]"+
    "}";

    //构建http构建[使用HttpClient的jar,怎么获得自己百度]
    HttpClient client = new HttpClient();
    PostMethod post = new PostMethod(url);
    post.setRequestBody(responeJsonStr);
    post.getParams().setContentCharset("utf-8");
    //发送http请求
    String respStr = "";
    try {
    client.executeMethod(post);
    respStr = post.getResponseBodyAsString();
    } catch (HttpException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    System.out.println(responeJsonStr);
    System.out.println(respStr);
    }
      

  5.   

    这么做有 I/O exception (javax.net.ssl.SSLException) caught when processing request: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty yq32.javaruntime 
    的异常,关于https部分的,在client.executeMethod(post);抛出,ls的大侠解决了没?
      

  6.   

    微信自定义菜单怎么搞。楼上的那位大哥。那个方法放在哪里调用的。如何实现他。麻烦讲一下‘public static void a3(){
    String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=你获得的token";
    /**
     * 设置菜单
     * 在为什么用\"你懂得,这是java代码
     */
    String responeJsonStr = "{"+
    "\"button\":["+
    "{\"name\":\"菜单名称1\","+
    "\"type\":\"click\"," +
    "\"key\":\"V01_S01\"" +
    "},"+
    "{\"name\":\"菜单名称2\","+
    "\"type\":\"click\"," +
    "\"key\":\"V02_S01\"" +
    "},"+
    "{\"name\":\"菜单名称1\","+
    "\"type\":\"click\"," +
    "\"key\":\"V03_S01\"" +
    "}"+
    "]"+
    "}";

    //构建http构建[使用HttpClient的jar,怎么获得自己百度]
    HttpClient client = new HttpClient();
    PostMethod post = new PostMethod(url);
    post.setRequestBody(responeJsonStr);
    post.getParams().setContentCharset("utf-8");
    //发送http请求
    String respStr = "";
    try {
    client.executeMethod(post);
    respStr = post.getResponseBodyAsString();
    } catch (HttpException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    System.out.println(responeJsonStr);
    System.out.println(respStr);
    }
      

  7.   

    关键在于https改成http再post
      

  8.   

    import java.io.IOException;import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpException;
    import org.apache.commons.httpclient.methods.PostMethod;
    public class wx_menu
    {
      
    public static void main(String[] args){
    String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=这里是你的TOKEN";
    /**
     * 设置菜单
     * 在为什么用\"你懂得,这是java代码
     */
    String responeJsonStr = "{"+
    "\"button\":["+
    "{\"name\":\"菜单名称1\","+
    "\"type\":\"click\"," +
    "\"key\":\"V01_S01\"" +
    "},"+
    "{\"name\":\"菜单名称2\","+
    "\"type\":\"click\"," +
    "\"key\":\"V02_S01\"" +
    "},"+
    "{\"name\":\"菜单名称1\","+
    "\"type\":\"click\"," +
    "\"key\":\"V03_S01\"" +
    "}"+
    "]"+
    "}";


    HttpClient client = new HttpClient();
    PostMethod post = new PostMethod(url);
    post.setRequestBody(responeJsonStr);
    post.getParams().setContentCharset("utf-8");
    //发送http请求
    String respStr = "";
    try {
    client.executeMethod(post);
    respStr = post.getResponseBodyAsString();
    } catch (HttpException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    System.out.println(responeJsonStr);
    System.out.println(respStr);
    }

    }这段代码亲测可用,谢谢6楼的
      

  9.   

    我用了楼上的代码试了一下。还是报错:
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:101)
    at Test.main(Test.java:37)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory还有这个 post.getParams().setContentCharset("utf-8");是也报错:该方法getParams()是未定义的类型PostMethod
    我的access_token是没有问题的。也导了commons-httpclient.jar
      

  10.   

    PHP版请访问:http://liyandong.duapp.com/?m=study
    (感谢支持)
      

  11.   

    你这个可以才出怪事了,https的可以这样访问吗,访问的时候会抛异常的!!!!
      

  12.   

    <?php;header("Content-type: text/html; charset=utf-8");  
    header("Content-type: text/html; charset=gb2312");  
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=***&secret=***";$content = file_get_contents($url);$info = json_decode($content);print_r($info);echo $info->access_token; $ACCESS_TOKEN=$info->access_token;
      
     $data = '{
         "button":[
         {
              "type":"click",
              "name":"Find",
              "key":"find"
          },
          {
               "type":"click",
               "name":"Check",
               "key":"lock_acount"
          },
          {
               "type":"click",
       "name":"About",
       "key":"other"
          }]
     }'; $ch = curl_init(); 
     
     curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={$ACCESS_TOKEN}"); 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     curl_setopt($ch, CURLOPT_AUTOREFERER, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     $tmpInfo = curl_exec($ch); 
     if (curl_errno($ch)) {  
    echo 'Errno'.curl_error($ch);
     }
     
     curl_close($ch); 
     var_dump($tmpInfo);  
     ?>
    -------------
    这是我测试通过的代码,分享给大家。
    欢迎qq交流:25414801测试微信号:parkmap
      

  13.   

    不错这个可以用,还是这里牛人多啊,微信接口开发 qq245680196 微信公众号web0311com ,欢迎交流
      

  14.   

    给大家发布个PHP版本的。
    前段页面:
    <!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>
      

  15.   

    //后端代码<?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{
       
      }
    }
    ?>
      

  16.   

    上面发布的有些问题再发一下,希望对大家有用,如果你不想写代码只是想用一下,可以访问下面的链接
    http://www.vxinyun.com/public/cm.php
    前台页面:
    <!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{
       
      }
    }
    ?>
      

  17.   

    curl 版url -d ' {"button":[{"type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC"}, {"type":"click", "name":"歌手简介", "key":"V1001_TODAY_SINGER"}, {"name":"菜单", "sub_button":[{"type":"click", "name":"hello word", "key":"V1001_HELLO_WORLD"}, {"type":"click", "name":"赞一下我们", "key":"V1001_GOOD"}] }] }'  https://api.weixin.qq.com/cgi-bin/menu/create?access_token=your_token.
      

  18.   

    我请问一下   我的自定义菜单  返回结果正确  为什么还是看不见菜单呢 24小时已经过了  取消重新关注也不看不见效果  返回结果是{"errcode":0,"errmsg":"ok"}
      

  19.   

    我用了楼上的代码试了一下。还是报错:
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:101)
    at Test.main(Test.java:37)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory还有这个 post.getParams().setContentCharset("utf-8");是也报错:该方法getParams()是未定义的类型PostMethod
    我的access_token是没有问题的。也导了commons-httpclient.jar
      

  20.   

    我开通了微信公众帐号开发者,怎么获取不到appid和appsecret,请大伙帮帮忙
      

  21.   

    返回成功的时候,是要等一段时间才能看到的,我的刚才也是,c#的自定义菜单,最简单的方法就是拼接字符串,把需要post的参数拼成字符串传过去,然后调用一个post请求的类,就可以了
      

  22.   

    一如既往的,关于微信公众平台的开发,不算出自大牛的代码,但是简单易懂适合刚入门的朋友。
    首先先介绍一下逻辑,因为发现很多朋友都不能看懂微信官方的文档,当然啦,这跟你是否认真看有关的,认真看总能看懂的,废话不说了。此时,我当你已经有一个已经申请到自定义菜单开发权限的微信服务号。首先,你要在后台开发模式下面找到你的AppId 还有 AppSecret并且记下来,然后通过这两个官方发放给你的ID去获取一个ACCESS_TOKEN【官方解释是:第三方访问api资源的票据】,稍后会通过这个ACCESS_TOKEN,提交你的菜单。
    下面教你怎么获取这个ACCESS_TOKEN:
    访问这个链接 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET   但是访问之前,把刚才让你记下来的AppId 还有 AppSecret 替换到链接里面,然后复制到浏览器地址栏,一访问,就返回几个数据,里面最长的那段就是我们要的ACCESS_TOKEN了。【当然,如果你还是不明白这个链接怎么替换,那我只能再写明白点了就是下面https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的APPID&secret=你的APPSECRET 】
    要注意的是,这个ACCESS_TOKEN 是有时间限制的,超过了一定时间就会失效。就要重新获取;另外,如果你刚获取之后,又不小心获取了一次,那么前一次获取到的值会失效,第二次的值生效。
    接下来教大家怎么创建菜单,代码如下:
    <?php
    header("Content-type: text/html; charset=utf-8");define("ACCESS_TOKEN", 'NYD-0s6f4yBJecqJ6QAiH7Nivh_gnWhbjs5vY1BZ9zViZAkYfw0QL5cO5ILK7lS3BkUCUrwqlDqzU9OVMaDO44Vuju7ZhXjdpJk8PxHgNf7cTs7rp6dvm-KJSkdiufqbL5niZwHM0uWJVi0mnSLGZg');//创建菜单
    function createMenu($data){
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".ACCESS_TOKEN);
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     $tmpInfo = curl_exec($ch);
     if (curl_errno($ch)) {
      return curl_error($ch);
     }
     curl_close($ch);
     return $tmpInfo;
    }$data = ' {
         "button":[
         
          {
               "name":"时讯",
               "sub_button":[
                {
                   "type":"click",
                   "name":"即时新闻",
                   "key":"jsxw"
                },
                {
                   "type":"click",
                   "name":"财经早餐",
                   "key":"cjzc"
                },
    {
                   "type":"click",
                   "name":"焦点话题",
                   "key":"jdht"
                },
    {
                   "type":"view",
                   "name":"财经日历",
                   "url":"http://stock1.sina.cn/dpool/stockv2/universal_calendar.php?vt=4"
                }]
           },
       {
               "name":"说市",
               "sub_button":[
                {
                   "type":"click",
                   "name":"今日看盘",
                   "key":"jrkp"
                },
                {
                   "type":"view",
                   "name":"行情刷新",
                   "url":"http://XX/index.php/et/index"
                },
    {
                   "type":"click",
                   "name":"交易策略",
                   "key":"jycl"
                },
    {
                   "type":"click",
                   "name":"投资天地",
                   "key":"tztd"
                },
    {
                   "type":"click",
                   "name":"投资文库",
                   "key":"tzwk"
                }]
           },
       {
               "name":"北鼎在线",
               "sub_button":[
                {
                   "type":"view",
                   "name":"关于我们",
                   "url":"http://www.index.php/article/index/id/114"
                },
                {
                   "type":"view",
                   "name":"最新活动",
                   "url":"http://www.index.php/article/index/id/115"
                },
    {
                   "type":"view",
                   "name":"参与爆料",
                   "url":"http://www.index.php/message"
                }
    ]
           }
       
       
       
       
       ]
     }';
    echo createMenu($data);//创建菜单
    ?>
    如代码所示,菜单有两种,一种是直接跳转到URL页面,即view;另一种,是发送指令,即click,说白了就是在客户端辅助用户的,可以看成一键发关键词。第一种很好做,填写好URL就完事了,用户点击菜单按钮,然后跳转到你填写的URL地址,缺点是URL地址不变,不够灵活。另一种就是发送指令,可以在公众账号接口开发(注意跟自定义菜单区别开)的时候,判断指令的内容,灵活处理并且动态输出不同的数据。
    通过POST方式把菜单的数据发送到微信服务器,在浏览器中看到的返回提示中,你看到OK的字眼,那么就证明已经成功了。创建完菜单之后,由于微信客户端的缓存要24小时才清理一次,所以你要马上看到效果就需要重新关注你的公众账号。此时,你已经尝试到胜利的果实了。

    下一次,我将告诉大家怎么利用自定义菜单动态获取图文。内容:1、一个THINKPHP搭建的微网站 2、自定义接口开发技术  3、自定义菜单   关键词:THINKPHP、 微网站、XML 微信自定义接口  微信自定义菜单    描述:用户在微信端选择指定栏目,自动获取微网站相关的若干条图文内容,每次更新都可以获取到不同的内容
      

  23.   

    .net中如何获取到自定义菜单的key值啊。有没有会的。
      

  24.   

    JSON
    {
        "button": [
            {
                "name": "线路查询",
                "type": "click",
                "key": "线路查询"
            },
            {
                "name": "热门推荐",
                "type": "click",
                "key": "热门推荐"
            },
            {
                "name": "服务网点",
                "sub_button": [
                    {
                        "type": "click",
                        "name": "扬州直营店",
                        "key": "扬州直营店"
                    },
                    {
                        "type": "click",
                        "name": "江都直营店",
                        "key": "江都直营店"
                    }
                ]
            }
        ]
    }PHP代码$url='http://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$json->access_token;
    $ret=$this->api_notice_increment($url,$data);
    $json=json_decode($ret);
    dump($json->errcode);exit;function api_notice_increment($url, $data){
     $ch = curl_init();//初始化curl 
     $header = "Accept-Charset: utf-8";
     //$header = "Content-type: text/xml";//定义content-type为xml
     curl_setopt($ch, CURLOPT_URL, $url);//设置链接
     //curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     //curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//设置HTTP头
     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     curl_setopt($ch, CURLOPT_AUTOREFERER, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//POST数据
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//设置是否返回信息  $tmpInfo = curl_exec($ch);
     return $tmpInfo;
    }以上代码总是返回45010,和上面测试成功的对比,应该没有问题。
      

  25.   

    其实没有多麻烦的 ;只要一个account_token ; 和一个json的字符串;往接口一扔。就可以了;
      

  26.   

    弱弱的问下:有了代码怎么弄,将代码添加到index.php中,再上传到服务器上面?还是怎么弄啊。
      

  27.   

    有没有人用java做的?
      

  28.   

    post只需要将设计好的json字符串($jsonstr)直接发送给微信接口就可以了,不需要post数组形式array('body'=>$jsonstr)
    我试过,成功..