• C#微信开发之旅--自定义菜单


    上一篇说道基本信息的回复《C#微信开发之旅--基本信息的回复》,当中就说到文本信息的回复,其他信息的回复,可以参考下开发文档中回复信息的格式进行修改就可以。

    下面来实现下自定义菜单。据我了解 订阅号是没有这个功能的,服务号的话,也是需要去认证后才能提供这个接口!当然了,使用测试号的话,功能齐全!

    我们可以看下,开发文档:

    自定义菜单创建接口

    可以发现,其实也是很简单的事情,就是给指定的地址发送POST请求:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

    Access_Token是什么呢?我就不解释了,可以去看下

    获取access token

    就是给https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET发送get请求,其中appid和appsecret就是我们在第一篇申请测试接口出现的那2个值

    根据开发文档,我们可以知道,第一步先通过appid和apsecret去获取access_token,然后通过access_token去创建菜单!

    获取access_token:

    /// <summary>
            /// 获取Token
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnGet_Click(object sender, EventArgs e)
            {
                string result = HttpHelper.GetWebRequest("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + txtAppId.Text + "&secret=" + txtAppsecret.Text, System.Text.Encoding.UTF8);
    
                TokenModel token = Newtonsoft.Json.JsonConvert.DeserializeObject<TokenModel>(result);
                if (token.access_token != null)
                    txtToken.Text = token.access_token;
                else
                {
                    ResultModel rm = Newtonsoft.Json.JsonConvert.DeserializeObject<ResultModel>(result);
                    enumResult en = (enumResult)rm.errcode;
                    MessageBox.Show(EnumHelper.GetEnumDesc(en));
                }
            }

    其中HttpHelper.GetWebRequest是封装好的get请求,TokenModel是保持正确结果,ResultModel是保存错误信息的,enumResult是所有错误编码。

    如果请求成功就会得到我们要的access_token

    /// <summary>
        /// 返回全局编码
        /// </summary>
        public class ResultModel
        {
            public int errcode { get; set; }
            public string errmsg { get; set; }
        }
    
        /// <summary>
        /// 获取access_token返回结果
        /// </summary>
        public class TokenModel
        {
            public string access_token { set; get; }
            public string expires_in { set; get; }
        }

    枚举太长就不贴上来了,就是下面图片显示的这个样子:

    我们已经有了access_token以后,就可以发送post请求去创建菜单了!根据开发文档可以看到,我们是把菜单数据转换成json传递过去就可以了。

    string jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(wxMenu);
    
                string result = HttpHelper.PostWebRequest(" https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + txtToken.Text, jsonStr, System.Text.Encoding.UTF8);
    
                try
                {
                    ResultModel rm = Newtonsoft.Json.JsonConvert.DeserializeObject<ResultModel>(result);
                    enumResult en = (enumResult)rm.errcode;
                    MessageBox.Show(EnumHelper.GetEnumDesc(en));
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

    jsonStr就是我要创建的菜单数据,我的思路是创建类,把数据保存到类中,然后通过转换直接生成json数据的,当然了,也可以直接通过字符看去拼接。只要最后的数据是json格式就可以。

    HttpHelper.PostWebRequest是封装好的post请求 ResultModel和enumResult上面都有提到,jsonStr可以用下面这个代替
    {
         "button":[
         {    
              "type":"click",
              "name":"今日歌曲",
              "key":"V1001_TODAY_MUSIC"
          },
          {
               "name":"菜单",
               "sub_button":[
               {    
                   "type":"view",
                   "name":"搜索",
                   "url":"http://www.soso.com/"
                },
                {
                   "type":"view",
                   "name":"视频",
                   "url":"http://v.qq.com/"
                },
                {
                   "type":"click",
                   "name":"赞一下我们",
                   "key":"V1001_GOOD"
                }]
           }]
     }

    返回创建成功就可以了。如果在公众号发现菜单没变的话,可以先取消关注,再进行关注就OK了!

    对了,使用这个的时候,需要关闭微信后台那个手动设置菜单的配置。测试帐号就不用管这些啦。

  • 相关阅读:
    批处理读取INI文件
    重装操作系统的20条原则
    SATA串口硬盘Windows Vista系统驱动安装实录
    中国国家地理高清晰的PDF书籍系列经典珍藏版
    单一职责原则
    理解boost::bind的实参传递方式
    理解C++ dynamic_cast
    C# vs C++之三:静态构造函数
    TDD可以驱动设计吗?
    依赖注入与对象间关系
  • 原文地址:https://www.cnblogs.com/yangbh/p/4372120.html
Copyright © 2020-2023  润新知