微信上的实现方法
原创第一种方法是静态超链接。这是目前网站中使用较多的方法,也最简单。它的好处在于容易实现,不需要额外开发。然而,它却不容易维护和管理,因为在一个完全使用 HTTP 访问的 Web 应用里,每个资源都存放在该应用特定根目录下的各个子目录里,资源的链接路径都使用相对路径,这样做是为了方便应用的迁移,并且易于管理。但假如该应用的某些资源要用到 HTTPS,引用的链接就必须使用完整的路径,所以当应用迁移或需要更改 URL 中所涉及的任何部分时,如域名、目录、文件名等,维护者都需要对每个超链接进行修改,工作量之大可想而知。再者,如果客户在浏览器地址栏里手工输入 HTTPS 的资源,那么所有敏感机密数据在传输中就得不到保护,很容易被黑客截获和篡改。
第二种方法是资源访问限制。为了保护 Web 应用中的敏感数据,防止资源的非法访问,保证传输的安全性,Java Servlet 2.2 规范定义了安全约束(Security-Constraint)元件,它用于指定一个或多个 Web 资源集的安全约束条件;用户数据约束(User-Data-Constraint)元件是安全约束元件的子类,它用于指定在客户端和容器之间传输的数据是如何被保护的。
用户数据约束元件还包括了传输保证(Transport-Guarantee)元件,它规定了客户机和服务器之间的通信必须是以下三种模式之一:None、Integral、Confidential。None 表示被指定的 Web 资源不需要任何传输保证;Integral 表示客户机与服务器之间传送的数据在传送过程中不会被篡改;Confidential 表示数据在传送过程中被加密。大多数情况下,Integral 或 Confidential 是使用 SSL 实现的。
第三种方法是链接重定向。综观目前商业网站资源数据的交互访问情况,要求严格加密传输的数据只占其中一小部分,也就是说,在一个具体 Web 应用中需要使用 SSL 的服务程序只占整体的一小部分。那么,人们可以从应用开发方面考虑解决方法,对需要使用 HTTPS 的那部分代码进行处理,使程序本身在接收到访问请求时首先判断该请求使用的协议是否符合本程序的要求,即来访请求是否使用 HTTPS,如果不是,就将其访问协议重定向为 HTTPS,这样就避免了客户使用 HTTP 访问要求使用 HTTPS 的 Web 资源时,看到错误提示信息而无所适从的情况,这些处理对 Web 客户来说是透明的。
自定义菜单接口 自定义菜单创建接口自定义菜单能够帮助公众号丰富界面,让用户更好、更快地理解公众号的功能。开启自定义菜单后,用户单击公众号进入公众号界面,这是微信商学院的公众号,如图 3-1 所示。

图 3-1 微信商学院公众平台
请注意以下内容。
(1)自定义菜单最多包括 3 个一级菜单,每个一级菜单最多包含 5 个二级菜单。
(2)一级菜单最多 4 个汉字,二级菜单最多 7 个汉字,多出来的部分将会以「...」代替。
自定义菜单接口可实现多种类型按钮,目前共有 10 种类型,最初只有 click 和 view 两种,后面 8 种为新增类型。10 种类型具体如下。
1. click:单击推事件
用户单击 click 类型按钮后,微信服务器会通过消息接口推送消息类型为 event 的结构给开发者,并且带上按钮中开发者填写的 key 值,开发者可以通过自定义的 key 值与用户进行交互。
2. view:跳转 URL
用户单击 view 类型按钮后,微信客户端将会打开开发者在按钮中填写的网页 URL,可与网页授权获取用户基本信息的接口结合,获得用户基本信息。
3. scancode_push:扫码推事件
用户单击按钮后,微信客户端将调起扫一扫工具。完成扫码操作后显示扫描结果(如果是 URL,将进入 URL),且会将扫码的结果传给开发者,开发者可以下发消息。
4. scancode_waitmsg:扫码推事件且弹出「消息接收中」提示框
用户单击按钮后,微信客户端将调起扫一扫工具。完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出「消息接收中」提示框,随后可能会收到开发者下发的消息。
5. pic_sysphoto:系统拍照并发图
用户单击按钮后,微信客户端将调起系统相机。完成拍照操作后,会将拍摄的照片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。
6. pic_photo_or_album:拍照或者从相册发图
用户单击按钮后,微信客户端将弹出选择器供用户「拍照」或者「从手机相册选择」。
7. pic_weixin:弹出微信相册发图器
用户单击按钮后,微信客户端将调起微信相册。完成选择操作后,将选择的照片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。
8. location_select:弹出地理位置选择器
用户单击按钮后,微信客户端将调起地理位置选择工具。完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。
9. media_id:下发消息(除文本消息)
用户单击 media_id 类型按钮后,微信服务器会将开发者填写的永久素材 ID 对应的素材下发给用户。永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材 ID 必须是在「素材管理/新增永久素材」接口上传后获得的合法 ID。
10. view_limited:跳转图文消息 URL
用户单击 view_limited 类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材 ID 对应的图文消息 URL。这里的永久素材类型只支持图文消息。请注意:永久素材 ID 必须是在「素材管理/新增永久素材」接口上传后获得的合法 ID。
请注意,3~8 的所有事件,仅支持微信 iOS 5.4.1 以上版本和 Android 5.4 以上版本的微信用户,旧版本微信用户单击后将没有回应,开发者也不能正常接收到事件推送。9 和 10 是专门给第三方平台旗下未通过微信认证(具体而言,是资质认证未通过)的订阅号准备的事件类型,它们是没有事件推送的,功能相对受限,其他类型的公众号不必使用。
• 创建自定义菜单接口请求说明。
HTTP 请求方式:POST(使用 HTTPS)。
https://www.wechatadd.com
click 和 view 的请求示例代码如下:
1. { 2. 「button」:[ 3. { 4. 「type」:「click」, 5. 「name」:「今日歌曲」, 6. 「key」:「V1001_TODAY_MUSIC」 7. }, 8. { 9. 「name」:「菜单」, 10. 「sub_button」:[ 11. { 12. 「type」:「view」, 13. 「name」:「搜索」, 14. 「url」:「https://www.wechatadd.com/」 15. }, 16. { 17. 「type」:「view」, 18. 「name」:「视频」, 19. 「url」:「https://www.wechatadd.com/」 20. }, 21. { 22. 「type」:「click」, 23. 「name」:「赞一下我们」, 24. 「key」:「V1001_GOOD」 25. }] 26. }] 27. }
其他新增按钮类型的请求示例按钮如下:
1. { 2. 「button」: [ 3. { 4. 「name」: 「扫码」, 5. 「sub_button」: [ 6. { 7. 「type」: 「scancode_waitmsg」, 8. 「name」: 「扫码带提示」, 9. 「key」: 「rselfmenu_0_0」, 10. 「sub_button」: [ ] 11. }, 12. { 13. 「type」: 「scancode_push」, 14. 「name」: 「扫码推事件」, 15. 「key」: 「rselfmenu_0_1」, 16. 「sub_button」: [ ] 17. } 18. ] 19. }, 20. { 21. 「name」: 「发图」, 22. 「sub_button」: [ 23. { 24. 「type」: 「pic_sysphoto」, 25. 「name」: 「系统拍照发图」, 26. 「key」: 「rselfmenu_1_0」, 27. 「sub_button」: [ ] 28. }, 29. { 30. 「type」: 「pic_photo_or_album」, 31. 「name」: 「拍照或者相册发图」, 32. 「key」: 「rselfmenu_1_1」, 33. 「sub_button」: [ ] 34. }, 35. { 36. 「type」: 「pic_weixin」, 37. 「name」: 「微信相册发图」, 38. 「key」: 「rselfmenu_1_2」, 39. 「sub_button」: [ ] 40. } 41. ] 42. }, 43. { 44. 「name」: 「发送位置」, 45. 「type」: 「location_select」, 46. 「key」: 「rselfmenu_2_0」 47. }, 48. { 49. 「type」: 「media_id」, 50. 「name」: 「图片」, 51. 「media_id」: 「MEDIA_ID1」 52. }, 53. { 54. 「type」: 「view_limited」, 55. 「name」: 「图文消息」, 56. 「media_id」: 「MEDIA_ID2」 57. } 58. ] 59. } 60.
表 3-1 对所用参数进行了说明,包括 7 个参数。
表 3-1 自定义菜单创建接口参数说明

• 创建自定义菜单后返回结果。
正确时返回的 JSON 数据包代码如下:
1. { 2. "errcode":0,"errmsg":"ok" 3. }
错误时返回的 JSON 数据包代码如下(示例为无效菜单名长度):
1. { 2. "errcode":40018,"errmsg":"invalid button name size" 3. }
使用接口创建自定义菜单后,开发者还可使用接口查询自定义菜单的结构。另外请注意,在设置了个性化菜单后,使用该自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息。
• 请求说明。
HTTP 请求方式:GET。
https://www.wechatadd.com
• 返回说明(无个性化菜单时)。
正确的 JSON 返回结果的代码如下:
1. { 2. 「menu」: { 3. 「button」: [ 4. { 5. 「type」: 「click」, 6. 「name」: 「今日歌曲」, 7. 「key」: 「V1001_TODAY_MUSIC」, 8. 「sub_button」: [] 9. }, 10. { 11. 「type」: 「click」, 12. 「name」: 「歌手简介」, 13. 「key」: 「V1001_TODAY_SINGER」, 14. 「sub_button」: [] 15. }, 16. { 17. 「name」: 「菜单」, 18. 「sub_button」: [ 19. { 20. 「type」: 「view」, 21. 「name」: 「搜索」, 22. 「url」: 「https://www.wechatadd.com/」, 23. 「sub_button」: [] 24. }, 25. { 26. 「type」: 「view」, 27. 「name」: 「视频」, 28. 「url」: 「https://www.wechatadd.com/」, 29. 「sub_button」: [] 30. }, 31. { 32. 「type」: 「click」, 33. 「name」: 「赞一下我们」, 34. 「key」: 「V1001_GOOD」, 35. 「sub_button」: [] 36. } 37. ] 38. } 39. ] 40. } 41. }
• 返回说明(有个性化菜单时)。
对应创建有个性化菜单的接口,正确的 JSON 返回结果的代码如下:
1. { 2. 「menu」: { 3. 「button」: [ 4. { 5. 「type」: 「click」, 6. 「name」: 「今日歌曲」, 7. 「key」: 「V1001_TODAY_MUSIC」, 8. 「sub_button」: [ ] 9. } 10. ], 11. 「menuid」: 208396938 12. }, 13. 「conditionalmenu」: [ 14. { 15. 「button」: [ 16. { 17. 「type」: 「click」, 18. 「name」: 「今日歌曲」, 19. 「key」: 「V1001_TODAY_MUSIC」, 20. 「sub_button」: [ ] 21. }, 22. { 23. 「name」: 「菜单」, 24. 「sub_button」: [ 25. { 26. 「type」: 「view」, 27. 「name」: 「搜索」, 28. 「url」: 「https://www.wechatadd.com/」, 29. 「sub_button」: [ ] 30. }, 31. { 32. 「type」: 「view」, 33. 「name」: 「视频」, 34. 「url」: 「https://www.wechatadd.com/」, 35. 「sub_button」: [ ] 36. }, 37. { 38. 「type」: 「click」, 39. 「name」: 「赞一下我们」, 40. 「key」: 「V1001_GOOD」, 41. 「sub_button」: [ ] 42. } 43. ] 44. } 45. ], 46. 「matchrule」: { 47. 「group_id」: 2, 48. 「sex」: 1, 49. 「country」: 「中国」, 50. 「province」: 「广东」, 51. 「city」: 「广州」, 52. 「client_platform_type」: 2 53. }, 54. 「menuid」: 208396993 55. } 56. ] 57. }
注:menu 为默认菜单,conditionalmenu 为个性化菜单列表。字段说明请见个性化菜单接口页的说明。
自定义菜单删除接口使用接口创建自定义菜单后,开发者还可使用接口删除当前使用的自定义菜单。另外请注意,在设置了个性化菜单后,调用此接口会删除默认菜单及全部个性化菜单。
• 请求说明。
HTTP 请求方式:GET。
https://www.wechatadd.com
• 返回说明。
对应创建接口,正确的 JSON 返回结果的代码如下:
1. { 2. "errcode":0,"errmsg":"ok" 3. }
用户单击自定义菜单后,微信会把单击事件推送给开发者。请注意,单击菜单弹出子菜单,不会产生上报;3.2.1 小节的第 3~8 个的事件,仅支持微信 iOS 5.4.1 以上版本和 Android 5.4 以上版本的微信用户,旧版本微信用户单击后将没有回应,开发者也不能正常接收到事件推送。
1. click:单击菜单拉取消息时的事件推送
推送 XML 数据包示例:
1. <xml> 2. <ToUserName><![CDATA[toUser]]></ToUserName> 3. <FromUserName><![CDATA[FromUser]]></FromUserName> 4. <CreateTime>123456789</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[CLICK]]></Event> 7. <EventKey><![CDATA[EVENTKEY]]></EventKey> 8. </xml>
表 3-2 对所用参数进行了说明,包括 6 个参数。
表 3-2 单击菜单拉取消息时的事件推送参数说明

2. view:单击菜单跳转链接时的事件推送
推送 XML 数据包示例:
1. <xml> 2. <ToUserName><![CDATA[toUser]]></ToUserName> 3. <FromUserName><![CDATA[FromUser]]></FromUserName> 4. <CreateTime>123456789</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[VIEW]]></Event> 7. <EventKey><![CDATA[www.qq.com]]></EventKey> 8. <MenuId>MENUID</MenuId> 9. </xml>
表 3-3 对所用参数进行了说明,包括 7 个参数。
表 3-3 单击菜单跳转链接时的事件推送参数说明

3. scancode_push:扫码推事件的事件推送
推送 XML 数据包示例:
1. <xml><ToUserName><![CDATA[gh_e136c6e50636]]></ToUserName> 2. <FromUserName><![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]> 3. </FromUserName> 4. <CreateTime>1408090502</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[scancode_push]]></Event> 7. <EventKey><![CDATA[6]]></EventKey> 8. <ScanCodeInfo><ScanType><![CDATA[qrcode]]></ScanType> 9. <ScanResult><![CDATA[1]]></ScanResult> 10. </ScanCodeInfo> 11. </xml>
表 3-4 对所用参数进行了说明,包括 9 个参数。
表 3-4 扫码推事件的事件推送参数说明

4. scancode waitms_g:扫码推事件且弹出「消息接收中」提示框的事件推送
推送 XML 数据包示例:
1. <xml><ToUserName><![CDATA[gh_e136c6e50636]]></ToUserName> 2. <FromUserName><![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]> 3. </FromUserName> 4. <CreateTime>1408090606</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[scancode_waitmsg]]></Event> 7. <EventKey><![CDATA[6]]></EventKey> 8. <ScanCodeInfo><ScanType><![CDATA[qrcode]]></ScanType> 9. <ScanResult><![CDATA[2]]></ScanResult> 10. </ScanCodeInfo> 11. </xml>
表 3-5 对所用参数进行了说明,包括 9 个参数。
表 3-5 扫码推事件弹出提示框参数说明

5. pic_sysphoto:弹出系统拍照发图的事件推送
推送 XML 数据包示例:
1. <xml><ToUserName><![CDATA[gh_e136c6e50636]]></ToUserName> 2. <FromUserName><![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]> 3. </FromUserName> 4. <CreateTime>1408090651</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[pic_sysphoto]]></Event> 7. <EventKey><![CDATA[6]]></EventKey> 8. <SendPicsInfo><Count>1</Count> 9. <PicList><item><PicMd5Sum><![CDATA[1b5f7c23b5bf75682a53e7b6d163e185]]> 10. </PicMd5Sum> 11. </item> 12. </PicList> 13. </SendPicsInfo> 14. </xml>
表 3-6 对所用参数进行了说明,包括 10 个参数。
表 3-6 弹出系统拍照发图的事件推送参数说明

6. pic_photo_or_album:弹出拍照或者相册发图的事件推送
推送 XML 数据包示例:
1. <xml><ToUserName><![CDATA[gh_e136c6e50636]]></ToUserName> 2. <FromUserName><![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]> 3. </FromUserName> 4. <CreateTime>1408090816</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[pic_photo_or_album]]></Event> 7. <EventKey><![CDATA[6]]></EventKey> 8. <SendPicsInfo><Count>1</Count> 9. <PicList><item><PicMd5Sum><![CDATA[5a75aaca956d97be686719218f275c6b]]> 10. </PicMd5Sum> 11. </item> 12. </PicList> 13. </SendPicsInfo> 14. </xml>
表 3-7 对所用参数进行了说明,包括 10 个参数。
表 3-7 弹出拍照或相册发图的事件推送参数说明

7. pic_weixin:弹出微信相册发图器的事件推送
推送 XML 数据包示例:
1. <xml><ToUserName><![CDATA[gh_e136c6e50636]]></ToUserName> 2. <FromUserName><![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]> 3. </FromUserName> 4. <CreateTime>1408090816</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[pic_weixin]]></Event> 7. <EventKey><![CDATA[6]]></EventKey> 8. <SendPicsInfo><Count>1</Count> 9. <PicList><item><PicMd5Sum><![CDATA[5a75aaca956d97be686719218f275c6b]]> 10. </PicMd5Sum> 11. </item> 12. </PicList> 13. </SendPicsInfo> 14. </xml>
表 3-8 对所用参数进行了说明,包括 10 个参数。
表 3-8 弹出微信相册发图器的事件推送参数说明

8. location_select:弹出地理位置选择器的事件推送
推送 XML 数据包示例:
1. <xml><ToUserName><![CDATA[gh_e136c6e50636]]></ToUserName> 2. <FromUserName><![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]> 3. </FromUserName> 4. <CreateTime>1408091189</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[location_select]]></Event> 7. <EventKey><![CDATA[6]]></EventKey> 8. <SendLocationInfo><Location_X><![CDATA[23]]></Location_X> 9. <Location_Y><![CDATA[113]]></Location_Y> 10. <Scale><![CDATA[15]]></Scale> 11. <Label><![CDATA[ 广州市海珠区客村艺苑路 106 号]]></Label> 12. <Poiname><![CDATA[]]></Poiname> 13. </SendLocationInfo> 14. </xml>
表 3-9 对所用参数进行了说明,包括 12 个参数。
表 3-9 弹出地理位置选择器的事件推送参数说明

为了帮助公众号实现灵活的业务运营,微信公众平台新增了个性化菜单接口。开发者可以通过该接口,让公众号的不同用户群体看到不一样的自定义菜单。该接口开放给已认证订阅号和已认证服务号。
开发者可以通过以下条件来设置用户看到的菜单。
• 用户分组(开发者的业务需求可以借助用户分组来完成)。
• 性别。
• 手机操作系统。
• 地区(用户在微信客户端设置的地区)。
• 语言(用户在微信客户端设置的语言)。
个性化菜单接口说明如下。
(1)个性化菜单要求用户的微信客户端版本在 iOS 6.2.2、Android 6.2.4 以上。
(2)菜单的刷新策略是,在用户进入公众号会话页或公众号 profile 页时,如果发现上一次拉取菜单的请求在 5 min 以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众号,然后再次关注,则可以看到创建后的效果。
(3)普通公众号的个性化菜单的新增接口每日限制次数为 2000 次,删除接口也是 2000 次,测试个性化菜单匹配结果接口为 20000 次。
(4)出于安全考虑,一个公众号的所有个性化菜单,最多只能设置为跳转到 3 个域名下的链接。
(5)创建个性化菜单之前必须先创建默认菜单(默认菜单是指使用普通自定义菜单创建接口创建的菜单)。如果删除默认菜单,个性化菜单也会被全部删除。
个性化菜单匹配规则说明如下。
当公众号创建多个个性化菜单时,将按照发布顺序,由新到旧逐一匹配,直到用户信息与 matchrule 相符合。如果全部个性化菜单都没有匹配成功,则返回默认菜单。
例如公众号先后发布了默认菜单、个性化菜单 1、个性化菜单 2、个性化菜单 3,那么当用户进入公众号页面时,将从个性化菜单 3 开始匹配。如果个性化菜单 3 匹配成功,则直接返回个性化菜单 3,否则继续尝试匹配个性化菜单 2,直到成功匹配一个菜单。
根据上述匹配规则,为了避免菜单生效时间的混淆,决定不予提供个性化菜单编辑 API。开发者需要更新菜单时,需将完整配置重新发布一轮。
1. 创建个性化菜单
HTTP 请求方式:POST(使用 HTTPS)。
https://www.wechatadd.com
请求示例:
1. { 2. 「button」:[ 3. { 4. 「type」:「click」, 5. 「name」:「今日歌曲」, 6. 「key」:「V1001_TODAY_MUSIC」 7. }, 8. { 9. 「name」:「菜单」, 10. 「sub_button」:[ 11. { 12. 「type」:「view」, 13. 「name」:「搜索」, 14. 「url」:「https://www.wechatadd.com/」 15. }, 16. { 17. 「type」:「view」, 18. 「name」:「视频」, 19. 「url」:「https://www.wechatadd.com/」 20. }, 21. { 22. 「type」:「click」, 23. 「name」:「赞一下我们」, 24. 「key」:「V1001_GOOD」 25. }] 26. }], 27. 「matchrule」:{ 28. 「group_id」:「2」, 29. 「sex」:「1」, 30. 「country」:「中国」, 31. 「province」:「广东」, 32. 「city」:「广州」, 33. 「client_platform_type」:「2」 34. 「language」:「zh_CN」 35. } 36. }
表 3-10 对所用参数进行了说明,包括 15 个参数,但有些参数不是必需的。
表 3-10 创建个性化菜单接口参数说明

matchrule 共 6 个字段,均可为空,但不能全部为空,至少要有一个匹配信息是不为空的。country、province、city 组成地区信息,将按照 country、province、city 的顺序进行验证,要符合地区信息表的内容。地区信息从大到小验证,小的可以不填,即若填写了省份信息,则国家信息必填并且匹配,城市信息可以不填。例如「中国 广东省 广州市」「中国广东省」都是合法的地域信息,而「中国 广州市」则不合法,因为填写了城市信息但没有填写省份信息。
正确时返回的 JSON 数据包如下,错误时的返回码请见附录中的接口返回码说明。
1. { 2. "menuid":"208379533" 3. }
2. 删除个性化菜单
HTTP 请求方式:POST(使用 HTTPS)。
https://www.wechatadd.com
请求示例:
1. { 2. "menuid":"208379533" 3. }
menuid 为菜单 ID,可以通过自定义菜单查询接口获取。
正确时返回的 JSON 数据包如下,错误时的返回码请见附录中的接口返回码说明。
1. { 2. "errcode":0,"errmsg":"ok" 3. }
3. 测试个性化菜单匹配结果
HTTP 请求方式:POST(使用 HTTPS)。
https://www.wechatadd.com
请求示例:
1. { 2. "user_id":"weixin" 3. }
user_id 可以是粉丝的 OpenID,也可以是粉丝的微信号。
该接口将返回菜单配置,示例如下:
1. { 2. "button": [ 3. { 4. "type": "view", 5. "name": "tx", 6. "url": "https://www.wechatadd.com/", 7. "sub_button": [ ] 8. }, 9. { 10. "type": "view", 11. "name": "tx", 12. "url": "https://www.wechatadd.com/", 13. "sub_button": [ ] 14. }, 15. { 16. "type": "view", 17. "name": "tx", 18. "url": "https://www.wechatadd.com/", 19. "sub_button": [ ] 20. } 21. ] 22. }
错误时的返回码请见附录中的接口返回码说明。
4. 查询个性化菜单
使用普通自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息,请见 3.2.2 小节自定义菜单查询接口的说明。
5. 删除所有菜单
使用普通自定义菜单删除接口可以删除所有自定义菜单(包括默认菜单和全部个性化菜单),请见 3.2.3 小节自定义菜单删除接口的说明。
版权保护: 本文由 李斯特 原创,转载请保留链接: https://www.wechatadd.com/artdet/9546
阅读推荐
更多...- [微信创业]微信创业卖家居用品 2023-07-12
- 公众号与粉丝互动的3大技巧 2023-07-02
- 客户维护:如何为客户提供超预期的服务? 2023-05-22
- 营销推广篇:在黄金内完成「病毒式」传播 2023-10-22
- 内容运营:将分析结果落在实处,打造创意,内容运营要有思路 2023-05-30
- 自揭其短法:用真诚换来客户的信任——销售技巧 2023-03-04
- 大学生何不来创业? 2023-10-08
- 多替客户着想,多体谅客户的难处——销售技巧 2023-03-04
- 选人用人,宁缺毋滥(Takegreatcareinhiring) 2023-07-16
- 如何有效催促客户成单?提升销售业绩 2023-05-19
- 使用技巧 2024-07-06
- 让业绩高速增长!深入客户技能 2023-03-14
- 一页纸的创业计划书 2024-02-12
- 公众平台微运营诀窍 2023-07-16
- 典型问题应对:小客户购买力低,提高销售技巧 2023-05-19
- 辅导销售新人的三个环节「销售技巧」 2023-03-01
- 鸟笼效应:给客户最需要的,让他自愿掏钱包,通过实践和经验提升销售业绩 2023-05-20
- 代理模式:发展外部的结构型模式 2022-07-05