自定义菜单和高级接口

自定义菜单和高级接口都需要使用AppID和AppSecret来创建,对于暂时没有这些权限的微信公众账号,开发者可以申请测试账号来体验、测试微信公众平台的所有高级接口功能。

access Tokenaccess Token概述

在微信公众平台接口开发中,access_token相当于进入各种接口的钥匙,拿到这个钥匙才有调用其他各种特殊接口的权限。

access_token是微信公众账号的全局唯一凭证,微信公众账号调用各接口时需要使用access_token。正常情况下,access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。

可以使用AppID和AppSecret调用接口来获取access_token,AppID和AppSecret可以在开发模式中获得,注意调用所有微信接口时均需要使用HTTPS协议。

接口调用请求说明

获取access_token的接口地址如下:

access_token接口的参数说明见下表:

正常情况下,微信会返回下述JSON数据包给公众号:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

返回结果的参数说明见下表:

错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):

{"errcode":40013,"errmsg":"invalid appid"}

实现代码自定义菜单

自定义菜单能够帮助微信公众账号丰富界面,增强用户与微信公众账号互动。

自定义菜单介绍

自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。

一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以"..."代替。

创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。

按钮类型

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

Click——单击事件推

用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;

View——跳转URL

跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。

scancode_push——扫码推事件

用户点击按钮后,微信客户端将调用"扫一扫"工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。

scancode_waitmsg——扫码推事件且弹出"消息接收中"提示框

用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起

用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出"消息接收中"提示框,随后可能会收到开发者下发的消息。

pic_sysphoto——弹出系统拍照发图

用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。

pic_photo_or_album——弹出拍照或者相册发图

用户点击按钮后,微信客户端将弹出选择器供用户选择"拍照"或者"从手机相册选择"。用户选择后即走其他两种流程。

pic_weixin——弹出微信相册发图器

用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。

location_select——弹出地理位置选择器

用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。

media_id——下发消息(除文本消息)

用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在"素材管理/新增永久素材"接口上传后获得的合法id。

view_limited——跳转图文消息URL

用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在"素材管理/新增永久素材"接口上传后获得的合法id。

请注意,3到8的所有事件,仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送。9和10,是专门给第三方平台旗下未微信认证(具体而言,是资质认证未通过)的订阅号准备的事件类型,它们是没有事件推送的,能力相对受限,其他类型的公众号不必使用。

创建菜单

创建菜单接口调用请求说明

http请求方式:POST(使用https协议)

创建菜单时,需要将菜单内容组织成如下结构,以POST方式向微信服务器提交。

自定义菜单内容的参数说明见下表:

给微信公众号创建自定义菜单的代码实现如下所示:

正确时返回JSON数据包如下:

{"errorcode":0,"errormsg":"ok"}

错误时返回JSON数据包如下(示例为无效菜单名长度):

{"errorcode":40018,"errormsg":"invalid button name size"}

查询菜单

使用接口创建自定义菜单后,开发者还可使用接口查询自定义菜单的结构。另外请注意,在设置了个性化菜单后,使用本自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息。

查询菜单接口调用请求说明

http请求方式:GET(使用https协议)

查询自定义菜单代码实现如下所示:

正确时返回JSON数据包如下:

删除菜单

使用接口创建自定义菜单后,开发者还可使用接口删除当前使用的自定义菜单。另请注意,在个性化菜单时,调用此接口会删除默认菜单及全部个性化菜单。

删除菜单的接口调用请求说明:

http请求方式:GET(使用https协议)

菜单事件推送

用户点击自定义菜单后,微信会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。如果菜单类型为click,则微信公众平台会把此次单击事件推送给接口程序;按钮类型为view的菜单单击后不会上报,而是直接跳转到对应的URL。

单击click类型的菜单时,接口程序收到的XML数据包如下所示

toUser

FromUser

event

CLICK

EVENTKEY

自定义菜单推送参数说明(click类型)

单击view类型的菜单时,接口程序收到的XML数据包如下所示

toUser

FromUser

event

VIEW

www.qq.com

MENUID

自定义菜单推送参数说明(view类型)

单击scancode_push类型的菜单时,接口程序接收到的XML数据包如下所示

gh_e136c6e50636

oMgHVjngRipVsoxg6TuX3vz6glDg

event

scancode_push

6

qrcode

1

微信会返回该XML给接口程序,但用户收不到这个消息,而是直接运行解码后的内容,比如直接进入关注界面。

自定义菜单推送参数说明(scancode_push类型)

单击scancode_waitmsg类型的菜单时,接口程序接收到的XML数据包如下所示

gh_e136c6e50636

oMgHVjngRipVsoxg6TuX3vz6glDg

event

scancode_waitmsg

6

qrcode

2

自定义菜单推送参数说明(scancode_waitmsg类型):

单击pic_sysphoto类型的菜单时,接口程序接收到的XML数据包如下所示

gh_e136c6e50636

oMgHVjngRipVsoxg6TuX3vz6glDg

event

pic_sysphoto

6

1

1b5f7c23b5bf75682a53e7b6d163e185

单击pic_sysphoto类型的菜单后没有XML数据推送过来,它调用的是手机里面的照相机功能,而拍照以后再发过来时就收到一个图片消息。

自定义菜单推送参数说明(pic_sysphoto类型)

单击pic_photo_or_album类型的菜单时,接口程序接收到的XML数据包格式如下所示

gh_e136c6e50636

oMgHVjngRipVsoxg6TuX3vz6glDg

event

pic_photo_or_album

6

1

5a75aaca956d97be686719218f275c6b

toUser

fromUser

image

this is a url

media_id

单击pic_photo_or_album类型的菜单之后,和pic_weixin一样,先推送菜单事件,再推送图片消息。

自定义菜单推送参数说明(pic_photo_or_album类型)

单击pic_weixin类型的菜单时,接口程序接收到的XML数据包格式如下所示

单击pic_weixin类型的菜单时,微信客户端将调用微信相册,用户可以选择已有照片,微信会将照片发送给开发者。下面是一次选择3张照片时的XML数据。

gh_e136c6e50636

oMgHVjngRipVsoxg6TuX3vz6glDg

event

pic_weixin

6

3

5a75aaca956d97be686719218f275c6b

5a75aaca956d97be686719218f275c6b

5a75aaca956d97be686719218f275c6b

上述XML数据下发后,微信会推送3个图片消息给接口:

toUser

fromUser

image

this is a url

media_id

toUser

fromUser

image

this is a url

media_id

toUser

fromUser

image

this is a url

media_id

对于上述每个图片的消息,后台收到都能进行单独回应,用户可以收到响应消息。

自定义菜单推送参数说明(pic_weixin类型)

单击location_select类型的菜单时,接口程序接收到的XML数据包格式如下所示

单击location_select类型的菜单之后,将会调用发送位置功能,在用户发送位置之后,会再推送一个地理位置消息功能给用户,两个消息的XML数据分别如下所示:

gh_e136c6e50636

oMgHVjngRipVsoxg6TuX3vz6glDg

event

location_select

6

23

113

15

广州市海珠区客村艺苑路 106号

toUser

fromUser

location

20

广州市海珠区客村艺苑路 106号 7 days inn 便利店

自定义菜单推送参数说明(location_select类型)

消息接口中,响应自定义菜单单击事件的核心代码如下所示:

语音识别接收识别结果处理识别消息客服接口客服接口实现消息接口与客服接口相结合客服接口的意义OAuth2.0网页授权Oauth2.0授权过程详细步骤效果展示生成带参数的二维码场景二维码创建二维码ticket通过ticket换取二维码下载二维码扫描带参数二维码事件获取用户地理位置获取用户地理位置的方式转换坐标到地址用户地理位置的意义获取用户基本信息获取用户基本信息的方式制作个性欢迎语获取关注者列表获取关注者列表的方式分批获取用户分组管理创建分组查询所有分组查询用户所在组修改分组名移动用户分组上传/下载多媒体文件上传多媒体文件下载多媒体文件高级群发接口准备群发内容选择群发对象执行群发接收群发结果模板消息添加模板模板消息开发附录 错误提示Q1:查询菜单时提示accessToken故障

使用自定义菜单查询接口查询菜单时,返回如下错误提示:

打开网易新闻 查看精彩图片

解决方法:

经排查、分析,原因是accessToken获取的不正确,修改代码,accessToken获取正确后,再次查询,返回如下信息:

打开网易新闻 查看精彩图片

菜单显示不完整

使用自定义菜单查询接口查询菜单,总共有三个一级菜单,但查询后返回的却只用两个一级菜单,在手机微信端也只能看到两个一级菜单

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

下面是微信上的截图,可以看到只显示了两个菜单项。

打开网易新闻 查看精彩图片

解决方法: