C#-MVC开发微信应用(7)--在管理系统中同步微信用户分组信息
在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码.希望从一个更高的层次介绍微信的开发.
在《C#-MVC开发微信应用(6)--用户分组信息管理》具体介绍了微信用户分组接口的实现方法,本篇将介绍,如何在我的平台软件上进行管理我们微信上的用户分组。
其实微信能够风风火火的原因,主要就是因为有用户信息,所以同步并管理好微信账号的关注用户数据是非常重要的。有了微信用户的数据,你可以和你任何应用系统对接,实现系统-手机客户端的数据整合,还可以对用户进行营销管理,如发送用户感兴趣的产品消息、服务消息等,能够很好扩大企业的影响力和市场行为。
下面我们就来介绍一下微信分组管理的API封装过程,用户分组管理,包含下面几个方面的内容:
1)创建分组
2) 查询所有分组
3) 查询用户所在分组
4) 修改分组名
5) 移动用户分组
6) 删除分组
1、用户分组,在管理系统中的界面设计
针对以上微信分组的操作,我们可以在微信的应用管理系统里面,设计一个模块,用来管理微信的分组数据,在这个模块里面,可以创建分组,修改分组,查看分组等基础操作,还可以实现同步微信分组的操作,同步操作,主要就是把新增的分组信息添加到微信里面,修改的分组也在微信中实现修改功能,删除目前微信不支持,所以不用管了。最后,我们可以在此从微信服务器上,把修改后的数据同步下来,同步的时候为了避免对我们提交不成功的数据,我们需要对修改过的记录做好标识,这个就是我对整个同步操作的逻辑处理了。
在管理系统里面,对微信分组的列表管理界面设计如下所示。
创建分组的时候,我们只需要添加一个分组名称就可以了,界面设计也简单,但是我们把创建的ID统一设计为-1,作为未同步的新增标识。
编辑分组信息界面如下所示。当对分组进行编辑保存后,系统会记住那些修改过的分组就是了。
2、分组同步操作代码展示
为了更好实现分组同步的管理,我把分组的操作代码,封装在一个MVC的控制器的方法里面,页面代码通过Ajax调用就可以实现同步操作了,同步成功,或者失败,都会提示用户,让我们对其结果进行了解。
同步的时候,把本地新增的内容,在服务器上创建分组;把修改的的分组名称,在服务器上进行修改,然后进行同步列表处理,同步操作前,列表界面可能如下所示,有新增记录ID=-1的,也有修改后,记录修改标志的。
用户分组的同步按钮操作,是调用一个脚本代码就可以了,具体代码如下所示。
//同步数据
this.bindSyncDataClick = function(){
snf.message('confirm', "您确认需要和微信服务器同步分组信息吗", function (b) {
if (b) {
snf.ajax({
type: 'POST',
url: '/api/WeiXin/WeiXinGroup/PostSyncGroup',
success: function (d) {
snf.messageif(d.msgtype != '', d.msgtype, d.msg);
if (d.ok) {
self.searchClick();
}
}
});
}
});
};
上面调用的url是MVC的控制器方法,具体函数代码如下所示。
public dynamic PostSyncGroup()
{
string accessToken = BasicAPI.GetWeiXinAccessToken(this.UserInfo);
CommonResult result = SNFService.Instance.CreateService<WeiXinGroupService, IWeiXinGroupService>().SyncGroup(this.UserInfo, BasicAPI.GetWeiXinNoCode(UserInfo),accessToken); if (BaseSystemInfo.ShowInformation)
{
if (result.Success)
{
//成功提示
return ShowWarning("同步成功");
}
else
{
return ShowErrorWarning(result.Errcode + ":" + result.ErrorMessage);
} }
return "";
}
从上面,我们没有看到太多的逻辑,为了方便我对他们进行了进一步的封装,把它放到了业务逻辑层进行处理了。具体我们看看它的代码逻辑吧,这里为了所有的数据库操作更加快捷和完整,使用了事务的操作,我把相关的代码贴出来,方便大家了解逻辑。
public CommonResult SyncGroup(BaseUserInfo userInfo,string weixinNo, string accessToken) {
CommonResult result = new CommonResult();
IGroupApi api = new GroupApi(); //写入调试信息
#if (DEBUG)
int milliStart = BusinessLogic.StartDebug(userInfo, MethodBase.GetCurrentMethod());
#endif // 加強安全验证防止未登录用户调用
#if (!DEBUG)
LogOnService.UserIsLogOn(userInfo);
#endif using (IDbHelper ucDbHelper = DbHelperFactory.GetHelper(BaseSystemInfo.UserCenterDbType))
{
try
{ ucDbHelper.Open(UserCenterDbConnection);
BaseLogManager.Instance.Add(userInfo, this.serviceName, "微信分组同步", MethodBase.GetCurrentMethod()); using (IDbHelper dbHelper = DbHelperFactory.GetHelper(BusinessDbType))
{
try
{
dbHelper.Open(BusinessDbConnection);
// 开始事务
dbHelper.BeginTransaction(); WeiXinGroupManager manager = new WeiXinGroupManager(dbHelper, userInfo); #region 先从微信服务器上获取分组,如果不存在进行下载保存
List<GroupJson> list = api.GetGroupList(accessToken);
foreach (GroupJson info in list)
{
if (!manager.Exists(new KeyValuePair<string, object>(WeiXinGroupEntity.FieldWeiXinNo, weixinNo), new KeyValuePair<string, object>(WeiXinGroupEntity.FieldGroupId, info.id))) {
WeiXinGroupEntity entity = new WeiXinGroupEntity();
entity.GroupId = info.id;
entity.GroupName = info.name;
entity.WeiXinNo = weixinNo;
manager.AddObject(entity);
}
}
#endregion //先把本地标志groupId = -1未上传的记录上传到服务器,然后进行本地更新GroupID = '-1'
List<WeiXinGroupEntity> unSubmitList = manager.GetList<WeiXinGroupEntity>(new KeyValuePair<string, object>(WeiXinGroupEntity.FieldWeiXinNo, weixinNo), new KeyValuePair<string, object>(WeiXinGroupEntity.FieldGroupId, -));
foreach (WeiXinGroupEntity info in unSubmitList)
{
GroupJson groupJson = api.CreateGroup(accessToken, info.GroupName);
if (groupJson != null && groupJson.group != null)
{
info.GroupId = groupJson.group.id;
manager.Update(info);
}
}
//删除具有删除标志的分组 GroupId >=100 and Deleted=1
List<WeiXinGroupEntity> unDeletedList = manager.GetList<WeiXinGroupEntity>(new KeyValuePair<string, object>(WeiXinGroupEntity.FieldWeiXinNo, weixinNo), new KeyValuePair<string, object>(WeiXinGroupEntity.FieldDeletionStateCode, ));
foreach (WeiXinGroupEntity info in unDeletedList)
{
if (info.GroupId >= )
{
if (info.GroupId == null)
{
continue;
}
CommonResult deleted = api.DeleteGroup(accessToken, BusinessLogic.ConvertToInt(info.GroupId));
if (deleted != null && (deleted.Success || "".Equals(deleted.Errcode)))
{
manager.Delete(info.Id);
}
} } //把标志为修改状态的记录,在服务器上修改 GroupId >=0 and IsEdit =1
List<WeiXinGroupEntity> unModifyList = manager.GetList<WeiXinGroupEntity>(new KeyValuePair<string, object>(WeiXinGroupEntity.FieldWeiXinNo, weixinNo), new KeyValuePair<string, object>(WeiXinGroupEntity.FieldIsEdit, ));
foreach (WeiXinGroupEntity info in unModifyList)
{
if (info.GroupId == null)
{
continue;
}
CommonResult modifyed = api.UpdateGroupName(accessToken,BusinessLogic.ConvertToInt(info.GroupId) , info.GroupName);
if (modifyed != null && modifyed.Success)
{
info.IsEdit = ;//重置标志
manager.Update(info);
}
} dbHelper.CommitTransaction();
result.Success = true; }
catch (Exception ex)
{
dbHelper.RollbackTransaction();
result.ErrorMessage = ex.Message;
BaseExceptionManager.LogException(ucDbHelper, userInfo, ex);
throw;
}
finally
{
dbHelper.Close();
}
}
}
catch (Exception ex)
{
result.ErrorMessage = ex.Message;
BaseExceptionManager.LogException(ucDbHelper, userInfo, ex);
throw;
}
finally
{
ucDbHelper.Close();
}
} // 写入调试信息
#if (DEBUG)
BusinessLogic.EndDebug(MethodBase.GetCurrentMethod(), milliStart);
#endif return result; }
如果感兴趣或者体验相关的微信功能,可以关注我的微信了解下。具体效果关注测试账号扫描下面二维码进行关注了解。
作者: 王春天 2016-01-13
作者Blog:http://www.cnblogs.com/spring_wang
出处: http://www.cnblogs.com/spring_wang/p/5074847.html
如果觉得还不错,欢迎转载。
C#-MVC开发微信应用(7)--在管理系统中同步微信用户分组信息的更多相关文章
- C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息
在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码,希望从更高一个层次,向大家介绍微信的应用 ...
- 不接入微信sdk,在APP中实现微信分享,支付
前段时间在很多地方接入了微信的sdk,发现过程比较繁琐,此外因为导入的sdk比较大会影响最终APP打包的体积,所以就有了不接入sdk也实现相同的功能的想法. 要实现这个目标我个人认为最困难的地方是不知 ...
- net mvc中实现记录用户登录信息(记住登录效果)
现记录用户登录信息(记住登录效果) 本文讲述了使用cookies实现网站记住登录效果,效果如下: 主要实现方法,当用户选择记住登录时建立cookies保存用户名和用户密码,当用户登录不选择记住登录时, ...
- C#-MVC开发微信应用(8)--菜单管理的实现
之前讲解了微信后台管理页面的操作来管理菜单,下面我们在简单的来看一下,代码是如何实现的. 我们要实现获取微信的菜单.创建菜单.删除菜单等操作. 01.首先定义菜单操作的接口: /// <summ ...
- C#-MVC开发微信应用(6)--用户分组信息管理
让我们继续深入探索这方面的技术,为了更好的应用起来,专心做好底层的技术开发.本篇继续上一篇的介绍,主要介绍分组管理方面的开发应用,这篇的内容和上一篇,作为一个完整的用户信息和分组信息管理的组合. 1. ...
- C#-MVC开发微信应用(2)--微信消息的处理和应答
微信应用使用场景和商机很多,所以这也是一个技术的方向,因此,有空研究下.学习下微信的相关开发,也就成为SNF完善的必要条件了.本系列文章希望从一个循序渐进的角度上,全面介绍微信的相关开发过程和相关经验 ...
- C#-MVC开发微信应用(5)--自动应答系统-自动回复机器人
前几篇已经介绍菜单和有回复信息操作,下面我们就结合snf微信端管理页面,看一下什么才是自动应答系统. 定制的服务 对于微信服务号来说,最主要的功能是提供更好的服务.用户更方便的操作,以及更快的反馈响应 ...
- C#-MVC开发微信应用(3)--文本消息和图文消息的应答
最近咨询微信的人很多,感觉这块也是一块商机,也为了演示SNF快速开发平台的优势,就用SNF快速开发平台开发出一套微信应用程序.使用<SNF.CodeGenerator>代码生成工具可以节省 ...
- C#-MVC开发微信应用(4)--微信门户菜单的管理操作
最近对微信接口进行深入的研究,通过把底层接口一步步进行封装后,逐步升级到自动化配置.自动化应答,以及后台处理界面的优化和完善上,力求搭建一个较为完善.适用的微信门户应用管理系统. 在微信门户系统里面, ...
随机推荐
- 使用sshtunnel实现python公网连接阿里云mongo服务器
背景: 公司使用阿里云的云数据库MongoDB.基于安全原因考虑,阿里云MongoDB云数据库目前只支持从阿里云ECS上访问,无法通过公网直接访问,不方便用户在本地开发环境里直接进行测试. 阿里云官方 ...
- Codeforces 707E Garlands
Garlands 我怎么感觉好水啊. 因为询问只有2000组, 离线询问, 枚举联通块再枚举询问, 二维树状数组更新答案. #include<bits/stdc++.h> #define ...
- Codeforces 739C Alyona and towers 线段树
Alyona and towers 这个题写起来真的要人命... 我们发现一个区间被加上一个d的时候, 内部的结构是不变的, 改变的只是左端点右端点的值, 这样就能区间合并了. 如果用差分的话会简单一 ...
- BZOJ4977 八月月赛 Problem G 跳伞求生 set 贪心
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4977 - 八月月赛 Problem G 题意 小明组建了一支由n名玩家组成的战队,编号依次为1到n ...
- Star HDU1541
看到图和坐标就想到了用二维数组来写 但是连数组的开不下 写好了也爆内存 没看到题目是按照y坐标升序给的坐标 这样就可以忽略y坐标 进行一维的树状数组 #include<bits/stdc ...
- 2.1博客系统 |基于form组件和Ajax实现注册登录
基于forms组件和Ajax实现注册功能 1 基于forms组件设计注册页面 --点击头像 === 点击input --头像预览: 修改用户选中的文件对象:获取文件对象的路径:修改img的src属性, ...
- HDU1211 密文解锁 【扩展欧几里得】【逆元】
<题目链接> <转载于 >>> > 题目大意: RSA是个很强大的加密数据的工具,对RSA系统的描述如下: 选择两个大素数p.q,计算n = p * q,F( ...
- Nmap 7.70新增功能——扫描主机所有IP
Nmap 7.70新增功能——扫描主机所有IP 有时,一个主机可能存在多个IP地址,如网站服务器.用户可以使用nmap提供的--resolve-all选项进行扫描.其语法格式如下:nmap --re ...
- JFreeChart 之柱状图
JFreeChart 之柱状图 一.JFreeChart 简介 JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets ...
- python——设计模式
设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码.反之,设计模式更为高级,它是一种必须在特定情 ...