自定义菜单和高级接口-自定义菜单

官方文档

自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。

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

自定义菜单接口可实现多种类型按钮:

  1. click: 点击推事件: 微信推消息类型为event的结构给开发者,并带上按钮中开发者填写的key值.开发者可以通过自定义的key值与用户进行交互. 微信公众平台会把此次单击事件推送给接口程序。

    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[FromUser]]></FromUserName>
      <CreateTime>123456789</CreateTime>
      <MsgType><![CDATA[event]]></MsgType>
      <Event><![CDATA[CLICK]]></Event>
      <EventKey><![CDATA[EVENTKEY]]></EventKey>
    </xml>
  2. view: 跳转URL. 微信客户端打开开发者在按钮中填写的网页URL.  微信公众平台不会上报单击事件,而是直接跳转到对应的URL.
  3. scancode_push: 扫码推事件。 微信客户端将调用扫一扫工具,完成扫码操作后显示扫码结果(如果是URL,将进入URL)
    接口程序会收到XML数据包,但用户收不到这个消息,而是直接运行解码后的内容

    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[FromUser]]></FromUserName>
      <CreateTime>123456789</CreateTime>
      <MsgType><![CDATA[event]]></MsgType>
      <Event><![CDATA[scancode_push]]></Event>
      <EventKey><![CDATA[EVENTKEY]]></EventKey>
      <ScanCodeInfo>
          <ScanType><![CDATA[qrcode]]></ScanType>
        <ScanResult><![CDATA[http://www.baidu.com]]></ScanResult>
        <EventKey><![CDATA[EVENTKEY]]></EventKey>
      </ScanCodeInfo>
    </xml>
  4. scancode_waitmsg: 扫码推事件且弹出 ‘消息接收中’的提示框
    微信客户端将调用扫一扫工具,完成扫码操作后,将扫码的结果传送给开发者,同时收起‘扫一扫’功能,然后弹出‘消息接收中’的提示框

    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[FromUser]]></FromUserName>
      <CreateTime>123456789</CreateTime>
      <MsgType><![CDATA[event]]></MsgType>
      <Event><![CDATA[scancode_waitmsg]]></Event>
      <EventKey><![CDATA[EVENTKEY]]></EventKey>
      <ScanCodeInfo>
          <ScanType><![CDATA[qrcode]]></ScanType>
        <ScanResult><![CDATA[http://www.baidu.com]]></ScanResult>
        <EventKey><![CDATA[EVENTKEY]]></EventKey>
      </ScanCodeInfo>
    </xml>
  5. pic_sysphoto: 弹出系统拍照发图。 将拍摄的照片发送给开发者,并推送事件给开发者。
    单击这个类型的菜单后,没有XML数据推送过来,而拍照以后再发过来时,就收到一个图片消息:(推送什么样的事件消息,后面验证后再贴图)

    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[fromUser]]></FromUserName>
      <CreateTime>1348831860</CreateTime>
      <MsgType><![CDATA[image]]></MsgType>
      <PicUrl><![CDATA[this is a url]]></PicUrl>
      <MediaId><![CDATA[media_id]]></MediaId>
      <MsgId>1234567890123456</MsgId>
    </xml>
  6. pic_photo_or_album:弹出拍照或相册发图:
    先推送事件,再推送图片消息

    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[FromUser]]></FromUserName>
      <CreateTime>123456789</CreateTime>
      <MsgType><![CDATA[event]]></MsgType>
      <Event><![CDATA[pic_photo_or_album]]></Event>
      <EventKey><![CDATA[EVENTKEY]]></EventKey>
      <SendPicsInfo>
          <Count><![CDATA[1]]></Count>
          <PicList>
            <item>
                <PicMd5Sum><![CDATA[58f4xxxxxxxxxx]]></PicMd5Sum>
            </item>
          </PicList>
      </SendPicsInfo>
    </xml>
    
    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[fromUser]]></FromUserName>
      <CreateTime>1348831860</CreateTime>
      <MsgType><![CDATA[image]]></MsgType>
      <PicUrl><![CDATA[this is a url]]></PicUrl>
      <MediaId><![CDATA[media_id]]></MediaId>
      <MsgId>1234567890123456</MsgId>
    </xml>
  7. pic_weixin:弹出微信相册发图
    先推送事件,再推送图片消息

    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[FromUser]]></FromUserName>
      <CreateTime>123456789</CreateTime>
      <MsgType><![CDATA[event]]></MsgType>
      <Event><![CDATA[pic_weixin]]></Event>
      <EventKey><![CDATA[EVENTKEY]]></EventKey>
      <SendPicsInfo>
          <Count><![CDATA[3]]></Count>
          <PicList>
            <item>
                <PicMd5Sum><![CDATA[58f4xxxxxxxxxx]]></PicMd5Sum>
            </item>
                    <item>
                <PicMd5Sum><![CDATA[58f4xxxxxxxxxx]]></PicMd5Sum>
            </item>
                    <item>
                <PicMd5Sum><![CDATA[58f4xxxxxxxxxx]]></PicMd5Sum>
            </item>
          </PicList>
      </SendPicsInfo>
    </xml>
    
    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[fromUser]]></FromUserName>
      <CreateTime>1348831860</CreateTime>
      <MsgType><![CDATA[image]]></MsgType>
      <PicUrl><![CDATA[this is a url]]></PicUrl>
      <MediaId><![CDATA[media_id]]></MediaId>
      <MsgId>123456789012345x</MsgId>
    </xml>
    
    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[fromUser]]></FromUserName>
      <CreateTime>1348831860</CreateTime>
      <MsgType><![CDATA[image]]></MsgType>
      <PicUrl><![CDATA[this is a url]]></PicUrl>
      <MediaId><![CDATA[media_id]]></MediaId>
      <MsgId>1234567890123456</MsgId>
    </xml>
    
    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[fromUser]]></FromUserName>
      <CreateTime>1348831860</CreateTime>
      <MsgType><![CDATA[image]]></MsgType>
      <PicUrl><![CDATA[this is a url]]></PicUrl>
      <MediaId><![CDATA[media_id]]></MediaId>
      <MsgId>1234567890123456</MsgId>
    </xml>
     对于上述每个图片的消息,后台收到都能进行单独回应       
  8. location_select: 弹出地理位置选择器。 调用地理位置选择功能。
    在用户发送位置后,会再推送一个地理位置消息功能给用户

    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[FromUser]]></FromUserName>
      <CreateTime>123456789</CreateTime>
      <MsgType><![CDATA[event]]></MsgType>
      <Event><![CDATA[location_select]]></Event>
      <EventKey><![CDATA[EVENTKEY]]></EventKey>
      <SendLocationInfo>
        <Location_X><![CDATA[23.134521]]></Location_X>
        <Location_Y><![CDATA[113.358803]]></Location_Y>
        <Scale><![CDATA[20]]></Scale>
        <Label><![CDATA[位置信息]]></Label>
        <Poiname><![CDATA[]]></Poiname>
        <EventKey><![CDATA[EVENTKEY]]></EventKey>
      </SendLocationInfo>
    </xml>
    
    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[fromUser]]></FromUserName>
      <CreateTime>1351776360</CreateTime>
      <MsgType><![CDATA[location]]></MsgType>
      <Location_X>23.134521</Location_X>
      <Location_Y>113.358803</Location_Y>
      <Scale>20</Scale>
      <Label><![CDATA[位置信息]]></Label>
      <MsgId>1234567890123456</MsgId>
    </xml>
  9. media_id: 下发消息(除文本消息)用户点击media_id类型按钮后,微信服务器将开发者填写的永久素材id 对应的素材下发给用户。永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。
  10. view_limited: 跳转图文消息URL 。微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。 ?

9和10,是专门给第三方平台旗下未微信认证(具体而言,是资质认证未通过)的订阅号准备的事件类型,它们是没有事件推送的,能力相对受限,其他类型的公众号不必使用。

创建菜单:

  接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

  返回:{"errcode":0,"errmsg":"ok"} 或 {"errcode":40018,"errmsg":"invalid button name size"}


def create_menu(access_token,json_menu):    print(json_menu)    headers = {        ‘content_type‘: "application/json"    }    json_menu = json.dumps(json_menu,ensure_ascii=False)    create_url = ‘https://api.weixin.qq.com/cgi-bin/menu/create?access_token={0}‘.format(access_token)    response = requests.post(create_url,json_menu.encode(‘utf-8‘),headers=headers)    return json.loads(response.text)
注意:这个debug了好久。首先需要将 python的 dict转化为json 数据,然后在传入post 参数时进行 utf-8封装。不然 就是创建不成功,总是返回:{‘errcode‘: 40016, ‘errmsg‘: ‘invalid button size hint

menu_data:

menu_data = {
    "button": [
        {
            "name": "新手",
            "sub_button": [
                {
                    "type": "click",
                    "name": "点击拉歌曲",
                    "key": "click_music"
                },
                {
                    "type": "view",
                    "name": "查看百度",
                    "url": "http://www.baidu.com"
                },
                {
                    "type": "scancode_waitmsg",
                    "name": "扫码等消息",
                    "key": "scancode_waitmsg_event"
                },
                {
                    "type": "pic_sysphoto",
                    "name": "系统相册",
                    "key": "pic_sysphoto_event"
                }
            ]
        },
        {
            "name": "其他",
            "sub_button": [
                {
                    "type": "scancode_push",
                    "name": "扫码推事件",
                    "key": "scancode_push_event"
                },
                {
                    "type": "pic_photo_or_album",
                    "name": "拍照或选照片",
                    "key": "pic_photo_or_album_event"
                },
                {
                    "type": "pic_weixin",
                    "name": "微信相册",
                    "key": "pic_weixin_event"
                },
                {
                    "type": "location_select",
                    "name": "发送位置",
                    "key": "location_select_event"
                }
            ]
        }
    ]
}

查询菜单:

  接口: http请求方式: GET(请使用https协议)https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=ACCESS_TOKEN

  返回:https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Querying_Custom_Menus.html

alue、url、key等字段    对于不同的菜单类型,value的值意义不同。官网上设置的自定义菜单: Text:保存文字到value; Img、voice:保存mediaID到value;             Video:保存视频下载链接到value; News:保存图文消息到news_info,同时保存mediaID到value; View:保存链接到url。             使用API设置的自定义菜单: click、scancode_push、scancode_waitmsg、pic_sysphoto、pic_photo_or_album、                pic_weixin、location_select:保存值到key;view:保存链接到url
def query_menu(access_token):
    query_url = ‘https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=%s‘% access_token
    response = requests.get(query_url)
    return json.loads(response.content)

删除菜单:

   接口: http请求方式:GET https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN

  返回:对应创建接口,正确的Json返回结果:{"errcode":0,"errmsg":"ok"} 

  注意: 在个性化菜单时,调用此接口会删除默认菜单及全部个性化菜单。

def delete_menu(access_token):
    delete_url = ‘https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=%s‘% access_token
    response = requests.get(delete_url)
    return json.loads(response.text)

原文地址:https://www.cnblogs.com/ahMay/p/12047826.html

时间: 2024-10-28 14:17:43

自定义菜单和高级接口-自定义菜单的相关文章

微信公众平台自定义菜单及高级接口PHP SDK

本文介绍介绍微信公众平台自定义菜单及高级接口的PHP SDK及使用方法. 作者 方倍工作室 修正记录: 2014.05.03 v1.0 方倍工作室 http://www.cnblogs.com/txw1958/ SDK 源码: 1 /* 2 方倍工作室 http://www.cnblogs.com/txw1958/ 3 CopyRight 2014 www.doucube.com All Rights Reserved 4 */ 5 6 class class_weixin_adv 7 { 8

自定义菜单和高级接口-获取Access Token

自定义菜单和高级接口都需要使用APPID和AppSecret来创建. 对应暂时没有这些权限的微信公众账号,开发者可以申请测试账号来体验和测试体验微信公众平台的所有高级接口的功能.链接 https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Requesting_an_API_Test_Account.html 获取Access Token: access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需

[c#]asp.net开发微信公众平台(8)微信9大高级接口,自定义菜单

前7篇把最基础的消息接收和回复全做完了,  也把高级接口的入口和分拆处理写好了空方法,  此篇接着介绍微信的9大高级接口, 并着重讲解其中的自定义菜单. 微信9大接口为: 1.语音识别接口 2.客服接口 3.OAuth2.0 网页授权接口 4.生成带参数的二维码接口 5.获取用户地理位置接口 6.获取用户基本信息接口 7.获取关注者列表接口 8.用户分组接口 9.上传下载多媒体文件接口 具体介绍: 1. 语音识别 功能描述:通过语音识别接口,用户发送的语音,将同时给出语音识别出的文本内容. 实用

java 微信自定义菜单 java微信接口开发 公众平台 SSM redis shiro 多数据源

获取[下载地址]   QQ: 313596790官网 http://www.fhadmin.org/A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都

WIN32窗口子类化----自定义Edit控件的右键菜单

前言 Win32应用程序中,子控件的消息都是分发到其父窗口的消息处理函数中去了,这对于我们需要自定义子控件的某些特性时时十分不方便的,还好,Windows为我们提供了控件子类化的相关接口API.核心的思想是:通过获取子控件的消息处理函数地址,设置子控件的消息处理函数到自己定义的函数里,也就是Get/SetWindowLong API的使用. 测试代码 这里是一个简单的测试程序,在控制台程序中创建一个对话框,然后对话框上有一个EDIT控件(资源编辑器里拖入的,不多说),子类化EDIT控件,右键弹出

用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)

     用PopupWindow实现弹出菜单是一个比较好的方式.当然我们还有一个类PopupMenu也能实现弹出菜单,但那个太过于局限了,所以不是很推荐. 这个实例的效果是这样的:点击按钮后,一个菜单从屏幕的右边滑入到屏幕中,点击按钮/空白处后菜单消失. 布局文件时一个按钮,我就不贴出代码了.下面是菜单的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&

很酷的伸缩导航菜单效果,可自定义样式和菜单项。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

Android自定义View之仿QQ侧滑菜单实现

最近,由于正在做的一个应用中要用到侧滑菜单,所以通过查资料看视频,学习了一下自定义View,实现一个类似于QQ的侧滑菜单,顺便还将其封装为自定义组件,可以实现类似QQ的侧滑菜单和抽屉式侧滑菜单两种菜单. 下面先放上效果图: 我们这里的侧滑菜单主要是利用HorizontalScrollView来实现的,基本的思路是,一个布局中左边是菜单布局,右边是内容布局,默认情况下,菜单布局隐藏,内容布局显示,当我们向右侧滑,就会将菜单拉出来,而将内容布局的一部分隐藏,如下图所示: 下面我们就一步步开始实现一个

可自定义滑动速度的下滑展开菜单

<!DOCTYPE html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>jQuery动感滑动下拉菜单</title><script type="text/javascript" src="/ajaxjs/jquery-1.6.2.min.js"