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了!
对了,使用这个的时候,需要关闭微信后台那个手动设置菜单的配置。测试帐号就不用管这些啦。
C#微信开发之旅--自定义菜单的更多相关文章
- C#微信开发之旅--基本信息的回复
上一篇说到配置和验证<C#微信开发之旅--准备阶段> 下面来实现一下简单的信息回复. 也就是接收XML,返回XML 可以去看下微信开发文档的说明:http://mp.weixin.qq.c ...
- 用c#开发微信(5)自定义菜单设置工具 (在线创建)
读目录 1 使用 2 原理 3. 错误 上次写了<用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)>,有园友问到如何创建菜单的问题,今天就介绍下 ...
- 使用Java语言开发微信公众平台(八)——自定义菜单功能
随着上一篇文章的结束,我们已经实现了所有消息的类型的回复功能.今天,我们来学习更加高大上,也更加重要的自定义菜单功能. 一.了解自定义菜单 自定义菜单是微信公众平台最常用也是最重要的功能之一.根据微信 ...
- 微信公众平台创建自定义菜单的PHP代码
授人以鱼不如授人以渔.在方倍工作室上问了一下,创建自定义菜单的代码多少钱,一张口就一百,好吧,那我就给你们一人省一百块钱吧,你们说该如何谢谢我?事先说明一下啊,你的PHP版本要高于4.0.2才支持cU ...
- 微信利用PHP创建自定义菜单的方法
在使用通用接口前,你需要做以下两步工作:1.拥有一个微信公众账号,并获取到appid和appsecret(在公众平台申请内测资格,审核通过后可获得)2.通过获取凭证接口获取到access_token注 ...
- AutoCAD.NET二次开发:创建自定义菜单(AcCui)
从CAD2007之后,Autodesk提供了一个新的程序集AcCui.dll,使用这个程序集,我们可以方便地做一些界面方面的操作,比如创建自定义菜单. 下面介绍一下菜单的创建过程: 1.在项目中添加引 ...
- 微信公众平台创建自定义菜单中文编码导致system error
创建包含了中文的自定义菜单时总是返回{"errcode":-1,"errmsg":"system error"},要将编码方式设置为UTF- ...
- C#微信开发之旅--准备阶段
最近才开始学微信开发的相关内容,记录下,慢慢的养成习惯! 1.申请公众号: 公众号分为 订阅号 和 服务号.他们之前的区别可以点击这里查看 因为我们是测试的,所以可以直接申请测试帐号,就把所有的功能都 ...
- AutoCAD.NET二次开发:创建自定义菜单(COM)
当我们要在CAD中创建自定菜单时,可以引用COM组件来实现. 下面是实现方式: 1.新建类库项目,并引用CAD目录(我这里用的是CAD2008)下的acdbmgd.dll.acmgd.dll,并将引用 ...
随机推荐
- 2015美团网 哈工大 第k个排列
leetcode 上的Permutation Sequence 下面是可执行代码 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 以1 开头 123,132,共2!个数 2 开 ...
- Java笔记(八)……数组
数组的概念 同一种类型数据的集合.其实数组就是一个容器. 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素. 数组的格式 元素类型[] 数组名 = new 元素类型[个数]; int[ ...
- POJ 1321 棋盘问题 DFS搜索
简单搜索 练习一下回溯 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- 如何将SQL Server运行到Windows Azure上
从2012年6月6日开始,Windows Azure上一些强大的新功能现在可用于预览,包括新的Windows Azure虚拟机(VM).其中有关Windows Azure虚拟机最强大的一件事是他们利用 ...
- glance image cache
The Glance Image Cache The Glance API server may be configured to have an optional local image cache ...
- poj1515--Street Directions(边的双连通)
给一个无向图,要求变成强连通的有向图,需要保留哪些边. 边的双连通,对于桥保留两条边,其他的只保留一条边.求双连通的过程中记录保留边. /******************************* ...
- svn无法更新解决方案
1.删除C:\Documents and Settings\用户名\Application Data\Subversion\auth下的文件,删除svn登录信息. 2.将eclipse中 window ...
- testlink邮件设置(centos 7)
上一篇文章在centos 7上安装了testlink(CentOS 7下安装xampp和testlink),本篇进行邮件设置,可在进行testlink密码修改.用例指派时进行邮件通知 1.修改conf ...
- $.post()请求 ation请求,jsp获取的处理结果
public void write(String content, String charset) { getHttpResponse().setCharacterEncoding(charset); ...
- AngularJS开发下一代Web应用笔记(一)
一.写在最前 AngularJS是Google推出的一款Web应用开发框架.它提供了一系列兼容性良好并且可扩展的服务,包括数据绑定.DOM操作.MVC设计模式和模块加载等. 现在网上JS框架茫茫多,真 ...