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,并将引用 ...
随机推荐
- vmware 8下ubuntu 13.04安装vmware tools
在虚拟机vmware 8.0里安装了ubuntu 13.04.为了方便与主机交互,安装vmware tools. 解压后直接运行 ./vmware-install.pl 一路默认路径安装下来,到&qu ...
- IntelliJ IDEA的下载、安装和WordCount的初步使用(本地模式和集群模式)
包括: IntelliJ IDEA的下载 IntelliJ IDEA的安装 IntelliJ IDEA中的scala插件安装 用SBT方式来创建工程 或 选择Scala方式来创建工程 本地模式或集群 ...
- PHP中Get()和Post()用法详解
作为一个计算机系统,输入输出设备作为非核心设备却是不可或缺的,硬件如此,软件亦是如此.试想一台功能强劲的计算机,如果没有输入输出设备,它与一块只能耗电并且发出嗡嗡噪音的废铁有何不同.应用程序的道理也是 ...
- 仿写thinkphp的I方法
自己定义一个方法仿写thinkphp的I 方法 <?php function I($key="",$default='',$function="") { ...
- PAT 1034. Head of a Gang (30)
题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1034 此题考查并查集的应用,要熟悉在合并的时候存储信息: #include <iostr ...
- android96 内存创建图片副本,画画板
package com.itheima.copy; import android.os.Bundle; import android.app.Activity; import android.grap ...
- WPF非轮询方式更新数据库变化SqlDependency(数据库修改前台自动更新)
上一章节我们讲到wpf的柱状图组件,它包含了非轮询方式更新数据库变化SqlDependency的内容,但是没有详细解释,现在给大家一个比较简单的例子来说明这部分内容. 上一章节: WPF柱状图(支持数 ...
- jsp----在jsp中写java代码(变量和函数方法)
<%@page import="java.text.SimpleDateFormat"%><%@page language="java" im ...
- (原创)如何在spannableString中使用自定义字体
最近在做车联网的产品,主打的是语音交互和导航功能,UI给的导航界面可真是够酷炫的.但麻烦的事情也来了,里面的一句话居然用到了三种字体.界面如图所示: 从图中可以看出 500m左前方行驶 居然使用了三种 ...
- 在文件地理数据库中使用 SQL 进行报告和分析 (转)
================以下摘自ArcGIS10.1帮助=================== 文件地理数据库允许在 QueryDef 中通过 SubFields(字段列表)方法使用表达式和别 ...