[c#]asp.net开发微信公众平台(8)微信9大高级接口,自定义菜单

前7篇把最基础的消息接收和回复全做完了,  也把高级接口的入口和分拆处理写好了空方法,  此篇接着介绍微信的9大高级接口,
并着重讲解其中的自定义菜单。

微信9大接口为:

1.语音识别接口

2.客服接口

3.OAuth2.0 网页授权接口

4.生成带参数的二维码接口

5.获取用户地理位置接口

6.获取用户基本信息接口

7.获取关注者列表接口

8.用户分组接口

9.上传下载多媒体文件接口

具体介绍:

1. 语音识别

功能描述:通过语音识别接口,用户发送的语音,将同时给出语音识别出的文本内容。

实用意义:第三方可以调用微信自主研发的语音识别技术。意味着微信向第三方开放语音识别技术,直接调用语音识别接口,对语音识别结果进行互动或根据识别的内容进行自动答复。

2. 客服接口

功能描述:通过客服接口,公众号可以在用户发送过消息的 12 小时内,向用户回复消息。

实用意义:以前公众帐号跟订户只能被动响应,比如用户触发了需求,如发送关键字给公众帐号,后者才可以与用户对话。如今,如果订户跟公众帐号对话过一次,公众帐号就可以在
12 个小时内持续给用户下发消息。这提高了公众帐号发送消息的能力。

3. OAuth 2.0 网页授权

功能描述:通过网页授权接口,公众号可以请求用户授权。

实用意义:这就像微博、QQ的帐号授权功能。这意味着微信帐号正式成为一个帐号系统。

4. 生成带参数二维码

功能描述:通过该接口,公众号可以获得一系列携带不同参数的二维码,在用户扫描关注公众号后,公众号可以根据参数分析各二维码的效果。

实用意义:举例来说,以前放一个二维码在网站或者线下的广告牌,效果都是一样的:获得关注用户。现在可以分析订户来自哪里。开发者可以在链接里设置特殊信息,做更多的数据分析。这一功能也可以用来做帐号绑定,

5. 获取用户地理位置

功能描述:通过该接口,公众号能够获得用户进入公众号会话时的地理位置。

实用意义:两种情况可以获得用户地理位置:一是与公众帐号“会话时”,二是在会话界面“每隔 5
秒”。在用户同意下,这就可以做微信导航或地理围栏方面的服务。

6. 获取用户基本信息

功能描述:通过该接口,公众号可以根据加密后的用户 OpenID,获取用户基础信息,包括头像、名称、性别、地区。

实用意义:以前这是一个非常高的权限。获得用户基本信息后,可以做 CRM 管理后台,方便商家管理用户。

7. 获取关注者列表

功能描述:通过该接口,用户可以获取所有关注者的 OpenID

实用意义:以前不能知道有多少人关注你,是谁在关注你。如今你可以知道谁在关注你。

8. 用户分组接口

功能描述:通过分组接口,公众号可以在后台为用户移动分组,或创建、修改分组。

实用意义:可以对用户进行分组,比如乐思享组织一场“听众交流会”,现场来了 1000 人,可以把它归为一组,后续的活动花絮照片只发给这 1000
人。这对于商家来说,就是一个 VIP 会员管理,是 CRM 管理平台。

9. 上传下载多媒体文件

功能描述:通过该接口公众号可以在需要时在微信服务器上传下载多媒体文件。

实用意义:可以下发图片、视频。比如搞笑视频,上传到微信公众账号后台,可以向听众推送出来,相当于视频网站的一个业务。

以上就是微信9大高级接口的介绍,   其实现在应该是10个了,还有1个支付功能。

下面着重写自定义菜单。

自定义菜单只需要创建一次,之后都会存在,每次更改需要等待几分钟才可看到,创建:

创建好之后:

我这里是全部添加好之后,点击创建到微信,代码:

 1 public void SetMenu()
2 {
3
4 dbHome=Factory.FContext.WeiXinDbContext();
5 var listP = DAL.ListWhere<tb_PersonalMenu, int>(dbHome, a => a.ParentId == 0&& a.State==1, a => a.ID, 3);
6 List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
7 foreach (var row in listP)
8 {
9 var listC = DAL.ListWhere<tb_PersonalMenu, int>(dbHome, a => a.ParentId == row.ID && a.State==1, a => a.ID, 5);
10 List<Dictionary<string, object>> list2 = new List<Dictionary<string, object>>();
11 Dictionary<string, object> dic2m = new Dictionary<string, object>();
12 Dictionary<string, object> dic1 = new Dictionary<string, object>();
13
14 if (listC.Count > 0)
15 {
16 foreach(var row2 in listC)
17 {
18 //2级菜单内容
19 Dictionary<string, object> dic2c = new Dictionary<string, object>();
20
21 dic2c.Add("type", row2.Type.ToString().Replace("1", "click").Replace("2","view"));
22 dic2c.Add("name", row2.Name);
23 if(row2.Type==1)
24 dic2c.Add("key", row2.ID);
25 if (row2.Type ==2)
26 dic2c.Add("url", row2.LinkUrl);
27
28 list2.Add(dic2c);
29 }
30 //--
31 //2级菜单组装
32 dic2m.Add("name", row.Name);
33 dic2m.Add("sub_button", JsonHelper.ListDicToJsonVals(list2));
34 //------
35 list.Add(dic2m);
36 }
37 else
38 {
39 //1级菜单
40 dic1.Add("type", row.Type.ToString().Replace("1", "click").Replace("2", "view"));
41 dic1.Add("name", row.Name);
42 if (row.Type == 1)
43 dic1.Add("key", row.ID);
44 if (row.Type == 2)
45 dic1.Add("url", row.LinkUrl);
46
47
48 //----------
49 list.Add(dic1);
50 }
51 //1级和2级装成list
52
53
54 //-----------
55
56 }
57
58
59
60
61
62
63
64
65
66 string m=JsonHelper.ListDicToJsonVals(list);//将list转成json的值 下面赋值给button
67
68 //赋值给button
69 Dictionary<string, object> dicAll = new Dictionary<string, object>();
70 dicAll.Add("button", m);
71 //---------
72
73
74 string jsonResult = JsonHelper.GetJsonStr(dicAll);//将dic转成json
75 //转换出来的 [{},{}]也会被“”包围,要去掉“”
76
77 jsonResult = jsonResult.Replace("\"[", "[").Replace("]\"", "]");
78 string html = HttpHelper.HttpPost("https"+"://api.weixin.qq.com/cgi-bin/menu/create?access_token="+Common.Config.SystemConfig.access_token+"", jsonResult, Encoding.UTF8);
79
80
81 dbHome.Dispose();
82 Response.Write(JsonHelper.JsonToVal(html, "errmsg"));
83 Response.End();
84
85 }

最终是如下格式的json数据post到微信:

{
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"type":"click",
"name":"歌手简介",
"key":"V1001_TODAY_SINGER"
},
{
"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"
}]
}]
}

这样就可以在微信中看到结果:

以上是属于后台管理中的创建菜单,  创建之后我们公号服务入口处对应的方法也完善下, 之前已经写好了一个空方法

public void DoMenuClick(DbContext dbHome, RMenuClick mMenuClk)

{

}

现在完善下:


 1 //自定义菜单点击
2 public void DoMenuClick(DbContext dbHome, RMenuClick mMenuClk)
3 {
4 SText mStxtA = new SText();
5 mStxtA.ToUserName = mMenuClk.FromUserName;
6 mStxtA.FromUserName = mMenuClk.ToUserName;
7 mStxtA.CreateTime = mMenuClk.CreateTime;
8 int id = 0;
9 mStxtA.Content = "欢迎使用,输入任意关键字开始体验";
10 if(int.TryParse(mMenuClk.EventKey,out id))
11 {
12 var me = DALWei.InfoEntities<tb_PersonalMenu>(dbHome, a => a.ID == id);
13 if(me!=null)
14 mStxtA.Content = "欢迎使用【"+me.Name+"】,介绍、说明、链接等等; 也可以是图文消息";
15 }
16
17 Often.ResponseToEnd(DALWei.SendText(mStxtA));
18 }

这个是点击类型的菜单处理,  需要说明的是,view类型的菜单点击就会直接跳转你所写的链接去,
 1级菜单如果设置成view类型则不会跳转依旧执行点击事件;

效果:

我这里直接返回了一段文字, 实际应用中可以返回任何消息。

[c#]asp.net开发微信公众平台(8)微信9大高级接口,自定义菜单,布布扣,bubuko.com

时间: 2024-10-18 16:10:36

[c#]asp.net开发微信公众平台(8)微信9大高级接口,自定义菜单的相关文章

【微信公众平台】订阅号无需认证获取自定义菜单功能

你是一个订阅号的运营者么?你还在为自己的宣传没有自定义菜单烦恼么?你还在为了你的个人微信订阅号无法认证而没有自定义菜单功能而痛苦么?那么不要着急,现在小志哥教你免费获取自定义菜单功能,不论你是个人的订阅号还是企业的,不论你是认证的还是没有认证的(当然认证的是不需要我的帮忙的,哈哈)! 公众帐号运营者点击"添加功能插件"后选择右下角的"自定义菜单"卡片可申请开通自定义菜单插件. 编辑自定义菜单功能时可选择"跳转到网页"和"发送消息&quo

微信好友限制人数5000个 微信公众平台是微信营销出路

刚过完520,微信就做出了一个新动作:微信好友数量将不能超过5000个,但"群不计算在内,订阅公号另计算",主要目的在于阻止大量恶意营销行为.个人微信号要成为营销工具越来越找不着方向了,微信公众平台才是出路. "这一举措实际上是为了遏制朋友圈的营销行为,因为普通用户的好友及关注的公众账号数量并不会有这么多,所以这个规定并不会阻碍普通用户使用微信."微信内部人士说. 个人微信号不好整了,整个微信公众平台吧,现在微信公众平台开发教程官方也放出,第三方的微信公众平台开放接

微信公众平台,微信网页授权,redirect_uri参数错误,解决方法!

刚才在做微信网页授权的时候,发生一个错误!!!微信网页授权redirect_uri 参数错误! 遇到问题,第一时间应该做的就是查看官网微信公众平台的技术文档. 微信网页授权 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域名的说明 1.在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修改授权回调域名

【微信公众平台】微信公众号“一键关注”Android版实现

微信公众平台可以说我是看着他成长起来的,我身边的朋友也有因为他而翻身奴隶把主做的,但是可惜的是我错过了最初的机会 ,我是在2013年开始接触到微信公众平台,当时他还只是一个幼崽,开始我一头栽入其中并不断的挖掘其中的万种可能,就像是在沙漠中遇到了绿洲一样,但是由于后期工作时间的原因,和他渐渐疏远了一段时间,可能也正是这样我错过了其中发展最快的时间,后面的14年的6月份以后的时间里我终于又回到我梦开始的地方-–微信公众平台开发的岗位!经过一年多的积累和这大半年的真实演练也算是积累了一些,所以决定在这

微信公众平台:微信JS-SDK Demo

ylbtech-微信公众平台:微信JS-SDK Demo 1. HTML返回顶部 1.demo.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>微信JS-SDK Demo</title> <meta name="viewport" content="width=device-width, initi

微信公众号用户与网站用户的绑定-自定义菜单获取Openid(三)

本篇开发教程的实质是微信自定义菜单及OAuth2.0授权的灵活运用. 本文分为以下两个部分: 拥有高级接口权限时的获取(基于view事件) 没有高级接口权限时的获取(基于click事件) 一.拥有高级接口权限 拥有高级接口权限时,我们使用OAuth2.0授权的方式来获取. OAuth2.0的详细设置方法,请参考 微信公众平台开发(71)OAuth2.0网页授权 在设置好授权回调页面域名之后,我们需要构造菜单,为了方便同时讲解下一小节,我们菜单构造如下 { "button": [ { &

微信公众平台获取微信用户信息

1: 进入开发者管理中心 ---网页服务-----网页账号------网页授权获取用户基本信息  修改  改成自己网站的根域名 格式 如下图                             2:建立一个连接 3: 具体获取数据的代码 //获取用户信息的函数 $accesstoken $openudfunction usertoken($accesstoken,$openid){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https

微信公众平台(2)-自定义菜单接口

前几日发布了nodejs搭建微信公众平台后台,今天介绍下公众平台的自定义菜单接口. 首先自定义菜单接口在刚申请的订阅号中是没有权限设置的,需要认证开通,而服务号在申请成功之后就可以自定义菜单了. 首先我们来看一下菜单的数据格式: var meno =  {     "button":[         {             "type":"click",             "name":"music&qu

微信公众平台消息接口开发(32)空气质量指数查询

原文:微信公众平台消息接口开发(32)空气质量指数查询 微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 空气质量指数 PM2.5 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archive/2013/05/30/weixin-if32-air-quality.html 一.获取原版数据 在中国环境监测总站http://www.cnemc.cn/ 可以找到全国城市空气质量实时发布平台,其地址为 http://113.108.142.147:20