之前的文章如下:

这篇文章记录如何创建自定一次菜单,至于查询现有的自定义菜单或者是为菜单增加动作可以具体参照微信文档:

文档:http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html

一、必要性

微信公众平台自己的自定义消息回复以及自定义菜单已经很好用了,但是接入服务器配置之后,自定义消息回复以及自定义菜单都失效了,因此就要自己去自定义消息被动回复和自定义菜单开发。

当然,也有解决的办法就是将公众号同时委托给第三方管理,通过第三方设置自定义消息回复和菜单管理还是可以使用的。

官方给出的注意事项

  • 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
  • 一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。
  • 创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。

二、菜单创建的方法

1、接口

2、发送post请求,且参数应为json

下面是我用的封装函数,使用curl,请确认支持curl的

有一个好的函数很重要,之前我就是因为函数的问题,项目迁移到别的服务器的时候,公众号发送客服消息一直失败。

////PHP发送post请求 发送内容为json数据

    function http_post_json($url,$data)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($curl);
        if (curl_errno($curl)) {
            return 'Errno'.curl_error($curl);
        }
        curl_close($curl);
        return $result;
    }

3、json 的格式

一个简单是自定义菜单json示例(都是url的跳转)


//菜单的构建
$menu='{
    "button":[
     {
          "name":"导航",
          "sub_button":[
           {
               "type":"view",
               "name":"首页",
               "url":"http://www.ptbird.cn"
            },
            {
               "type":"view",
               "name":"个人",
               "url":"http://person.ptbird.cn"
            },
              {
                 "type":"view",
                  "name":"作品",
                  "url":"http://work.ptbird.cn"
              } ]
      },
       {
         "type":"view",
          "name":"联系",
          "url":"http://contact.ptbird.cn"
      },
      {
         "type":"view",
          "name":"5CUP",
          "url":"http://www.tsingwa.com/cupcafe/Home/User/index.html"
      }]
 }';

参数说明:
(微信文档给的很详细)

参数 是否必须说明
button 一级菜单数组,个数应为1~3个
sub_button 二级菜单数组,个数应为1~5个
type 是/td> 菜单的响应动作类型
name 是/td> 菜单标题,不超过16个字节,子菜单不超过40个字节
key click等点击类型必须/td> 菜单KEY值,用于消息接口推送,不超过128字节
url view类型必须/td> 网页链接,用户点击菜单可打开链接,不超过1024字节
media_id media_id类型和view_limited类型必须 调用新增永久素材接口返回的合法media_id

三、效果

postbird-weixin