• 和小猪一起搞微信公众号开发—创建自定义菜单


    前言

    前段时间,微信开放了一个非常牛逼的接口,那就是服务号可以创建自定义菜单了。有了这个接口之后,使用微信与公众号交流倒更像是一个与微信内部的一个app交流,大大的强化了公众号的灵活性。

    在编辑模式下,公众号管理者可以直接编辑自定义菜单并设定用户点击菜单之后的回复内容或者跳转的指定链接。本文主要介绍使用开发者模式来自定义菜单完成每个用户的个性化内容回复。

    介绍

    自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。开启自定义菜单后,公众号界面如图所示:

    目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。

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

    1. click: 用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event 的结构给开发者,并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
    2. view: 用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。

    由第一点的click类型按钮可以延伸出很多的拓展功能,例如目前比较火的微信公众号:招商银行信用卡中心!利用用户点击的这个事件自定义生成一个链接,该链接加上用户的微信信息参数(例如openid)。用户点击链接进去之后可以进行相关的绑定信用卡的操作。这个操作过程如果不使用用户先进行操作而直接绑定是无法实现的。

    而第二个view按钮则跟编辑模式类似,点击过后微信会使用其自带的浏览器打开一个链接。

    实现

    第一步:获取access_token

    具体请参照 和小猪一起搞微信公众号开发—获取Access_token

    第二步:设计好您的菜单列表并写出对应的json数据

    小猪弄了个示例json数据

    Postdata = "{'button':[{'type':'click','name':'只有一级C','key':'V1001_TODAY_MUSIC'},"
                     + "{'type':'view','name':'只有一级V','key':'www.ruiyuedigi.com'},"
                     + "{ 'name':'二菜单','sub_button':[{'type':'view','name':'二级view','url':'http://www.soso.com/'},"
                     + " {'type':'view','name':'二级view','url':'http://v.qq.com/'},"
                     + "{'type':'click','name':'二级Click','key':'V1001_111111'},"
                     + "{'type':'click','name':'菜单最多7个字','key':'V1001_22222'},"
                     + "{'type':'click','name':'最多5个菜单','key':'V1001_444444'}]}]"
                     + "}",

    参数说明

    参数是否必须说明
    button 一级菜单数组,个数应为1~3个
    sub_button 二级菜单数组,个数应为1~5个
    type 菜单的响应动作类型,目前有click、view两种类型
    name 菜单标题,不超过16个字节,子菜单不超过40个字节
    key click类型必须 菜单KEY值,用于消息接口推送,不超过128字节
    url view类型必须 网页链接,用户点击菜单可打开链接,不超过256字节
     

    第三步:创建http请求微信接口

    同样,小猪把示例代码帖出来

                #region https 请求
                HttpHelper http = new HttpHelper();
                HttpItem item = new HttpItem()
                {
                    URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ruiyue.zhuqi.test",//URL     必需项    
                    Method = "post",//URL     可选项 默认为Get   
                    Postdata = "{'button':[{'type':'click','name':'只有一级C','key':'V1001_TODAY_MUSIC'},"
                     + "{'type':'view','name':'只有一级V','key':'www.ruiyuedigi.com'},"
                     + "{ 'name':'二菜单','sub_button':[{'type':'view','name':'二级view','url':'http://www.soso.com/'},"
                     + " {'type':'view','name':'二级view','url':'http://v.qq.com/'},"
                     + "{'type':'click','name':'二级Click','key':'V1001_111111'},"
                     + "{'type':'click','name':'菜单最多7个字','key':'V1001_22222'},"
                     + "{'type':'click','name':'最多5个菜单','key':'V1001_444444'}]}]"
                     + "}",//Post数据     可选项GET时不需要写   
                    Timeout = 100000,//连接超时时间     可选项默认为100000    
                    ReadWriteTimeout = 30000,//写入Post数据超时时间     可选项默认为30000
                    ContentType = "*",//返回类型    可选项有默认值   
                    Allowautoredirect = false,//是否根据301跳转
                };
                HttpResult result = http.GetHtml(item);
                string html = result.Html;

    这时候如果您接收到的html字符串为

    {"errcode":0,"errmsg":"ok"}

    那么恭喜你,你的自定义菜单创建成功了,

    第四步:关注微信账号查看效果

    wp_ss_20131207_0002

    附上完整的Controller=》Action代码

            public ActionResult CreateMenu()
            {
    
                #region https 请求
                HttpHelper http = new HttpHelper();
                HttpItem item = new HttpItem()
                {
                    URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ruiyue.zhuqi.test",//URL     必需项    
                    Method = "post",//URL     可选项 默认为Get   
                    IsToLower = false,//得到的HTML代码是否转成小写     可选项默认转小写   
                    Cookie = "",//字符串Cookie     可选项   
                    Referer = "",//来源URL     可选项   
                    Postdata = "{'button':[{'type':'click','name':'只有一级C','key':'V1001_TODAY_MUSIC'},"
                     + "{'type':'view','name':'只有一级V','key':'www.ruiyuedigi.com'},"
                     + "{ 'name':'二菜单','sub_button':[{'type':'view','name':'二级view','url':'http://www.soso.com/'},"
                     + " {'type':'view','name':'二级view','url':'http://v.qq.com/'},"
                     + "{'type':'click','name':'二级Click','key':'V1001_111111'},"
                     + "{'type':'click','name':'菜单最多7个字','key':'V1001_22222'},"
                     + "{'type':'click','name':'最多5个菜单','key':'V1001_444444'}]}]"
                     + "}",//Post数据     可选项GET时不需要写   
                    Timeout = 100000,//连接超时时间     可选项默认为100000    
                    ReadWriteTimeout = 30000,//写入Post数据超时时间     可选项默认为30000  
                    ContentType = "*",//返回类型    可选项有默认值   
                    Allowautoredirect = false,//是否根据301跳转
                };
                HttpResult result = http.GetHtml(item);
                string html = result.Html;
                string cookie = result.Cookie;
    
    
                #endregion
    
                return Content(html);
            }
    
  • 相关阅读:
    学习算法和刷题的思路指南
    提交包到iTunes Connect时构建版本“正在处理”后直接消失的问题
    对网络通讯的一些学习和总结
    iOS开发 dispatch_block_t 简单的实现不带参数的回调函数
    app刚开始启动时(即:appdelegate文件中)可以写的几个功能
    拷贝项目时,自己总结的一些小事项
    iOS开发中遇到的一些问题以及解决办法总结
    宝库~iOS开发笔试题
    GCD 之线程死锁
    iOS开发之旅之懒加载
  • 原文地址:https://www.cnblogs.com/smallerpig/p/3646186.html
Copyright © 2020-2023  润新知