C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息

在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码,希望从更高一个层次,向大家介绍微信的应用开发过程。本篇主要介绍在管理系统中,如何实现微信用户分组信息的同步操作。

其实微信能够风风火火的原因,主要就是因为有用户信息,所以同步并管理好微信账号的关注用户数据是非常重要的。有了微信用户的数据,你可以和你任何应用系统对接,实现系统-手机客户端的数据整合,还可以对用户进行营销管理,如发送用户感兴趣的产品消息、服务消息等,能够很好扩大企业的影响力和市场行为。

在较早之前的一篇随笔《C#开发微信门户及应用(5)--用户分组信息管理》,我曾经介绍了微信分组的各种底层的API封装操作,里面主要就是对微信提供API的.NET高级分组,对所有的信息交换,通过实体性进行数据交换,使得我们调用API来处理微信的各种事务更加方便,从而为微信应用平台的管理奠定基础。其中这篇文章介绍了所有微信分组管理的API封装过程,用户分组管理,包含下面几个方面的内容:

1)创建分组
2) 查询所有分组
3) 查询用户所在分组
4) 修改分组名
5) 移动用户分组

1、用户分组,在管理系统中的界面设计

针对以上微信分组的操作,我们可以在微信的应用管理系统里面,设计一个模块,用来管理微信的分组数据,在这个模块里面,可以创建分组,修改分组,查看分组等基础操作,还可以实现同步微信分组的操作,同步操作,主要就是把新增的分组信息添加到微信里面,修改的分组也在微信中实现修改功能,删除目前微信不支持,所以不用管了。最后,我们可以在此从微信服务器上,把修改后的数据同步下来,同步的时候为了避免对我们提交不成功的数据,我们需要对修改过的记录做好标识,这个就是我对整个同步操作的逻辑处理了。

在管理系统里面,对微信分组的列表管理界面设计如下所示。

创建分组的时候,我们只需要添加一个分组名称就可以了,界面设计也简单,但是我们把创建的ID统一设计为-1,作为未同步的新增标识。

编辑分组信息界面如下所示。当对分组进行编辑保存后,系统会记住那些修改过的分组就是了。

2、分组同步操作代码展示

为了更好实现分组同步的管理,我把分组的操作代码,封装在一个MVC的控制器的方法里面,页面代码通过Ajax调用就可以实现同步操作了,同步成功,或者失败,都会提示用户,让我们对其结果进行了解。

同步的时候,把本地新增的内容,在服务器上创建分组;把修改的的分组名称,在服务器上进行修改,然后进行同步列表处理,同步操作前,列表界面可能如下所示,有新增记录ID=-1的,也有修改后,记录修改标志的。

 

 

用户分组的同步按钮操作,是调用一个脚本代码就可以了,具体代码如下所示。

        //绑定提交按钮的的点击事件function BindSyncDataEvent() {$("#btnSyncData").click(function () {$.messager.confirm("提交确认", "您确认需要和微信服务器同步分组信息吗?", function (action) {if (action) {//提交数据$("#loading").show();$.ajax({url: '/Group/SyncGroup',type: 'post',dataType: 'json',success: function (data) {if (data.Success) {$("#grid").datagrid("reload");$.messager.alert("提示", "同步成功");}else {$.messager.alert("提示", "同步失败:" + data.ErrorMessage);}},data: ''});$("#loading").fadeOut(500);}});});}

其中上面红色部分就是通过Jquery调用的MVC的控制器方法,具体函数代码如下所示。

        /// <summary>/// 同步服务器的分组信息/// </summary>/// <returns></returns>public ActionResult SyncGroup(){string accessToken = GetAccessToken();CommonResult result = BLLFactory<Group>.Instance.SyncGroup(accessToken);return ToJsonContent(result);}

从上面,我们没有看到太多的逻辑,为了方便我对他们进行了进一步的封装,把它放到了业务逻辑层进行处理了。具体我们看看它的代码逻辑吧,这里为了所有的数据库操作更加快捷和完整,使用了事务的操作,我把相关的代码贴出来,方便大家了解逻辑。

        /// <summary>/// 同步服务器的分组信息/// </summary>/// <returns></returns>public CommonResult SyncGroup(string accessToken){CommonResult result = new CommonResult();try{IUserApi api = new UserApi();using (DbTransaction trans = baseDal.CreateTransaction()){//先把本地标志groupId = -1未上传的记录上传到服务器,然后进行本地更新string condition = string.Format("GroupID = '-1' ");List<GroupInfo> unSubmitList = base.Find(condition);foreach (GroupInfo info in unSubmitList){GroupJson groupJson = api.CreateGroup(accessToken, info.Name);if (groupJson != null){info.GroupID = groupJson.id;baseDal.Update(info, info.ID, trans);}}//把标志为修改状态的记录,在服务器上修改condition = string.Format("GroupID >=0 and Modified =1 ");List<GroupInfo> unModifyList = base.Find(condition);foreach (GroupInfo info in unModifyList){CommonResult modifyed = api.UpdateGroupName(accessToken, info.GroupID, info.Name);if (modifyed != null && modifyed.Success){info.Modified = 0;//重置标志
                            baseDal.Update(info, info.ID, trans);}}    //删除具有删除标志的分组//condition = string.Format("GroupID >=100 and Deleted=1 ");//List<GroupInfo> unDeletedList = base.Find(condition);//foreach (GroupInfo info in unDeletedList)//{//    CommonResult deleted = api.DeleteGroup(accessToken, info.GroupID, info.Name);//    if (deleted != null && deleted.Success)//    {//        baseDal.Delete(info.ID, trans);//    }//}
List<GroupJson> list = api.GetGroupList(accessToken);foreach (GroupJson info in list){UpdateGroup(info, trans);}try{trans.Commit();result.Success = true;}catch {trans.Rollback();throw;}                   }}catch (Exception ex){result.ErrorMessage = ex.Message;}return result;}

在Jquery同步的时候,我们为了避免等待时间过久而无法判断程序是否正常在工作,最好增加一个忙碌的提示操作,因为我们使用了Ajax调用,所以我们可以统一设置Ajax的忙碌和完成状态,具体设置代码如下所示。

        //用来统一请求忙碌显示的设置$.ajaxSetup({beforeSend: function () {$("#loading").show();},complete: function () {$("#loading").hide();}});

 

如果感兴趣或者体验相关的微信功能,可以关注我的微信了解下。具体效果可以关注我的微信门户:广州爱奇迪,也可以扫描下面二维码进行关注了解。

如果对这个《C#开发微信门户及应用》系列感兴趣,可以关注我的其他文章,系列随笔如下所示:

C#开发微信门户及应用(25)-微信企业号的客户端管理功能

C#开发微信门户及应用(24)-微信小店货架信息管理

C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试

C#开发微信门户及应用(22)-微信小店的开发和使用

C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密 

C#开发微信门户及应用(20)-微信企业号的菜单管理

C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)

C#开发微信门户及应用(18)-微信企业号的通讯录管理开发之成员管理

C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理

C#开发微信门户及应用(16)-微信企业号的配置和使用

C#开发微信门户及应用(15)-微信菜单增加扫一扫、发图片、发地理位置功能

 C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据

C#开发微信门户及应用(13)-使用地理位置扩展相关应用

C#开发微信门户及应用(12)-使用语音处理

C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍

C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息

C#开发微信门户及应用(9)-微信门户菜单管理及提交到微信服务器

C#开发微信门户及应用(8)-微信门户应用管理系统功能介绍

C#开发微信门户及应用(7)-微信多客服功能及开发集成

C#开发微信门户及应用(6)--微信门户菜单的管理操作

C#开发微信门户及应用(5)--用户分组信息管理

C#开发微信门户及应用(4)--关注用户列表及详细信息管理

C#开发微信门户及应用(3)--文本消息和图文消息的应答

C#开发微信门户及应用(2)--微信消息的处理和应答

C#开发微信门户及应用(1)--开始使用微信接口

 

转载于:https://www.cnblogs.com/wuhuacong/p/3735671.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Web API中实现版本

一般来说&#xff0c;api 接口是提供给其他系统或是其他公司使用&#xff0c;不能随意频繁的变更。然而&#xff0c;需求和业务不断变化&#xff0c;接口和参数也会发生相应的变化。如果直接对原来的接口进行修改&#xff0c;势必会影响线其他系统的正常运行。这就必须对api 接…

一个娃娃竟然拍出50万......

1 瞎说什么大实话&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 这个娃娃50万用来求婚用&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 当代年轻人的特别祝福▼4 在福字底下加一横&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 冰激凌…

切图崽的自我修养-规范CSS元素命名

前言 为什么我刚才写的样式乱了&#xff1f;&#xff01;如何给变量&#xff0c;文件命名是程序员的老大难问题。命名为什么会这么难&#xff0c;因为它太重要了。可以这么说&#xff0c;准确的命名可以提高代码的可读性&#xff0c;让人容易理解&#xff0c;方便调试&#xff…

批量获取域名解析地址socketthread

import threadimport socketdef getIP(name,lock):print [%s]:%s\n%(name,socket.gethostbyname(name))lock.release() #释放线程锁def main():#读取存放域名的文件&#xff0c;文件是按一行一个域名的方式记录的files open(rC:\Users\Administrator\Desktop\python_script\na…

《SAS编程与数据挖掘商业案例》学习笔记之七

九&#xff1a;put语句 可以输出变量信息到指定地点&#xff0c;包括输出到sas系统的日志窗口&#xff1b; 输出到file语句规定的外部文件 输出到sas系统的output窗口 单尾操作符&#xff0c;多用于input语句中&#xff0c;双尾操作符&#xff0c;多用于put语句中。 Data a; In…

使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器

从kbmmw 4.4 开始&#xff0c;增加了认证管理器&#xff0c;这个比原来的简单认证提供了更多的功能。细化了很多权限操作。 今天对这一块做个介绍。 要做一个认证管理&#xff0c;大概分为以下5步&#xff1a; 1. 定义你要保护的资源&#xff0c;一般是服务、函数&#xff0c;…

算法分析笔记

2019独角兽企业重金招聘Python工程师标准>>> 定义 定义&#xff1a; 若存在正常数 c 和 n<sub>0</sub> 使得当 N ≥ n<sub>0</sub> 时 T(N) ≤ cf(N)&#xff0c;则记为 T(N) O(f(N))若存在正常数 c 和 n<sub>0</sub> 使得当 …

C++指针详解

C指针详解指针的概念 指针是一个特殊的变量&#xff0c;它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容&#xff1a;指针的类型&#xff0c;指针所指向的类型&#xff0c;指针的值或者叫指针所指向的内存区&#xff0c;还有指针本身所…

.NET 6新特性试用 | PriorityQueue

前言我们常用Queue<T>类来表示先进先出(FIFO)集合&#xff0c;集合中的对象按照放入顺序检索。例如&#xff1a;var jobs new Queue<Job>();jobs.Enqueue(new Job() { Id 1 }); jobs.Enqueue(new Job() { Id 2 }); jobs.Enqueue(new Job() { Id 3 });while (jo…

数字效率Evernote超效率数字笔记术

文章结束给大家来个程序员笑话&#xff1a;[M] 每日一道理 古人云&#xff1a;“海纳百川&#xff0c;有容乃大。”人世间&#xff0c;不可能没有矛盾和争吵&#xff0c;我们要以磊落的胸怀和宽容的微笑去面对它 。哈伯德也曾说过&#xff1a;“宽恕和受宽恕的难以言喻的快乐&a…

千万别让爸妈帮你P图......

1 如何把外来称呼本土化&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 奇奇怪怪的知识又增加了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 好家伙&#xff01;洪世贤家烛台上插的是火腿肠▼4 妨碍公务的下场&#xff08;素材来源网络&#xff0c…

对大数据知识架构的梳理

近期交接了前期的大数据项目&#xff0c;对之前的项目内容做一个总结。也算是梳理一下项目的架构&#xff0c;对前期也算是一个总结&#xff0c;为后期的学习打下一个基础。清理数据对传统行业来说&#xff0c;上来就说要搞大数据&#xff0c;一般都会是一种噱头&#xff0c;因…

WPF 不遮挡任务栏最大化和全屏显示

在窗体不去边框的情况下&#xff0c;不遮挡任务栏最大化MainWindow.xaml.csusing System; using System.Windows; using System.Windows.Threading;namespace thzSoftware {/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWi…

C#中'??'符的使用

?? 用于判断当前对象是否为null. 语法: 对象 ?? "当前对象为null时赋的默认值". string nullString null; string Kong ""; string a nullString ?? "能判断为null"; string b Kong ?? "能判断为空"; 执行结果&#xff1…

将 iOS 应用的体积控制在 20MB 以内对于其下载量有很明显的影响吗?

分类&#xff1a;iPhone开发 标签&#xff1a;App大小、下载量、应用体积 比如&#xff0c;Angry bird 、Cut The Rope 游戏内容很丰富的应用都能将其体积控制在 20MB 。iOS 限制允许 3G 网络下载应用的体积不超过 20MB &#xff0c;通过 3G 下载的应用用户非常多吗&#xff1…

看完后震惊!清华“姚班”创始人的老师究竟有多牛?他说孩子最应该培养这几个思维……...

▲ 点击查看相信很多人都挺听说过清华有个“姚班”&#xff0c;致力于培养与美国麻省理工学院等世界一流高校本科生具有同等、甚至更高竞争力的计算机科学人才。“姚班”是我国著名科学家姚期智所创&#xff0c;因此得名“姚班”。姚期智教授是2000年图灵奖得主&#xff0c;也是…

Android之线程池

http://www.trinea.cn/android/java-android-thread-pool/ 介绍new Thread的弊端及Java四种线程池的使用&#xff0c;对Android同样适用。本文是基础篇&#xff0c;后面会分享下线程池一些高级功能。 1、new Thread的弊端 执行一个异步任务你还只是如下new Thread吗&#xff…

数据库自增主键可能产生的问题

在MySQL中经常会配置自增长属性的字段作为主键&#xff0c;特别是使用InnoDB存储引擎&#xff0c;因为InnoDB的聚集索引的特性&#xff0c;使用自增长属性的字段当主键性能更好&#xff0c;但是使用自增主键也可能会带来一些问题。 举个例子&#xff0c;使用自增主键对数据库做…

js中的hasOwnProperty和isPrototypeOf方法

转自&#xff1a;http://www.cnblogs.com/jenry/archive/2010/12/08/1900150.html hasOwnProperty&#xff1a;是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是&#xff0c;此方法无法检查该对象的原型链中是否具有该属性&#xff0c;该属性必须是对象本身的…