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

2019-03-02 00:58|来源: 网路

前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         }
View Code

 

最终是如下格式的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类型则不会跳转依旧执行点击事件;

效果:

 

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

 

 asp.net开发微信公众平台文章目录  

 

 


转自:http://www.cnblogs.com/mochen/p/3722150

相关问答

更多
  • 不是访问你自己的服务么?追问是自己的服务器,感觉自定义菜单是应该在微信的服务器里运行才可以回答自定义的菜单 微信里只是一个链接 调用的是你自己的服务 你要自己部署一个服务器 有对外的访问ip追问那是菜单设置完成后考虑的事,链接,公网ip我都有,现在只差这个菜单设置了回答哦 终于搞懂了 那个是微信提供了一个管理的界面啊 可以设置菜单名称 链接之类的追问怪我没说明白,我现在有接口代码,问题是不知道怎么让它部署运行回答tomcat部署服务?是少这个么追问不是,微信公众平台开发者模式首先需要接口来链接你自己的服务器 ...
  • 能使用的!微信 在安卓手机里可以使用,安装是用java 开发的,所以 可以用java开发
  • 这个可不是指点就能说清楚的。我弄平台一年了,一直想开发,自己也上网看教程自学,结果弄的不伦不类。 其实好平台不一定后台要强大多少,我虽然现在也用着编辑模式,但我关键词是研究听众的反馈所以做的好,平时和听众互动。比如隔几天不发图文了,给听众发纯文字:你在吗?如果听众回答在、嗯、怎么、什么,我就自动反馈给他们一段祝福视频。 平台一定要接地气。高级模式的开发,为的是更好的服务,但一切的前提,是听众至上。 一个饭店金碧辉煌,但服务员个个像大爷。另一个饭店一般般的装潢,但客人进去了就有种当爷的享受。我这么比喻能明白吧 ...
  • 首先订阅号要通过微信认证才可以成为拥有自定义菜单不通过验证成为开发者也无法获得自定义菜单其次成为开发者要有个能够公网访问的URL也就是通常使用的网址现常用的有新浪的sae平台或者百度的开发者平台然后在该网.址下部署微信提供的接口文件修改接口文件中的token然后在token一栏中填写修改过后的token即可。‘动拇指’的团队做的,需要的话可以问.问去
  • 微信公众平台开发注意事项: 一、微信公众平台开发是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请前往微信开放平台接入。 二、在申请到认证公众号之前,你可以先通过测试号申请系统,快速申请一个接口测试号,立即开始接口测试开发。 三、在开发过程中,可以使用接口调试工具来在线调试某些接口。 四、每个接口都有每日接口调用频次限制,可以在公众平台官网-开发者中心处查看具体频次。 五、在开发出现问题时,可以通过接口调用的返回码,以及报警排查指引(在公众平台 ...
  • 小猪cms还凑合,,有源码的 ,每周更新两三个模板的 ,你可以看下 ,,
  • 微网站开发模式教程:   第一步:申请消息接口   在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,填写URL和Token,其中URL是开发者用来接收微信服务器数据的接口URL。Token可由开发者可以任意填写,用作生成签名。   第二步:验证URL有效性   开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:   开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回 echostr参数内容,则接入生效,成为开发 ...
  • 这个需要根据你找什么样的开发商,然后开发什么样的功能,如果是该需要对接你们系统之类的功能比较复杂,有几千的,也有好几万的,这个看你的需求
  • 如果只是做宣传发文章,建议用订阅号,服务号次数发文太少,所以基本做开发实现更多功能来弥补,官方自带的其他功能可适用性有限,公众号开发有不懂的俺可提供技术支持
  • 微信公众平台的开发价格取决于功能和具体的外包公司,不同的地域价格也会略有差异。 我们给客户做的微信有30000元的也有10000多元的。 建议先把微信开发的需求整理好,然后多找几家公司进行报价。综合对比来选择。