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了!

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

posted @ 2015-03-27 16:11  新的开始Mark  阅读(1401)  评论(0编辑  收藏  举报