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

在上篇随笔《C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理》介绍了通讯录的部门的相关操作管理,通讯录管理包括部门管理、成员管理、标签管理三个部分,本篇主要介绍成员的管理操作,包括创建、删除、更新、获取、获取部门成员几个操作要点。

1、成员的创建操作

为了方便,我们可以创建一个部门组织结构,这是开发的前提,因为我们通讯录管理,也是基于一个组织机构下的,如上篇介绍的组织结构层次一样。我这里创建一个广州爱奇迪的根结构,然后在其中在创建一些组织机构,如下图所示。

在后台可以通过功能操作添加人员,本篇主要介绍如何调用微信企业号API进行人员管理的操作。

创建人员的API定义如下所示。

  • 请求说明

Https请求方式: POST

https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token=ACCESS_TOKEN

请求包结构体为:

{"userid": "zhangsan","name": "张三","department": [1, 2],"position": "产品经理","mobile": "15913215421","gender": 1,"tel": "62394","email": "zhangsan@gzdev.com","weixinid": "zhangsan4dev"
}
  • 参数说明
参数必须说明
access_token调用接口凭证
userid员工UserID。对应管理端的帐号,企业内必须唯一。长度为1~64个字符
name成员名称。长度为1~64个字符
department成员所属部门id列表。注意,每个部门的直属员工上限为1000个
position职位信息。长度为0~64个字符
mobile手机号码。企业内必须唯一,mobile/weixinid/email三者不能同时为空
gender性别。gender=0表示男,=1表示女。默认gender=0
tel办公电话。长度为0~64个字符
email邮箱。长度为0~64个字符。企业内必须唯一
weixinid微信号。企业内必须唯一
  • 权限说明

管理员须拥有“操作通讯录”的接口权限,以及指定部门的管理权限。

  • 返回结果
{"errcode": 0,"errmsg": "created"
}

 我们在C#里面,需要定义对应给的接口,然后根据需要构造对应的传递实体信息。

这里我把人员管理的接口全部定义好,接口定义如下所示。

        #region 部门成员管理/// <summary>/// 创建成员/// </summary>CommonResult CreateUser(string accessToken, CorpUserJson user);/// <summary>/// 更新成员/// </summary>CommonResult UpdateUser(string accessToken, CorpUserUpdateJson user);/// <summary>/// 删除成员/// </summary>CommonResult DeleteUser(string accessToken, string userid);/// <summary>/// 根据成员id获取成员信息/// </summary>CorpUserGetJson GetUser(string accessToken, string userid);/// <summary>/// 获取部门成员/// </summary>CorpUserListJson GetDeptUser(string accessToken, int department_id, int fetch_child = 0, int status = 0);#endregion

然后根据信息定义,创建一个承载人员信息的CorpUserJson实体对象,创建人员的实现操作代码如下所示。

        /// <summary>/// 创建成员/// </summary>public CommonResult CreateUser(string accessToken, CorpUserJson user){string urlFormat = "https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token={0}";var data = new{userid = user.userid,name = user.name,department = user.department,position = user.position,mobile = user.mobile,gender = user.gender,tel = user.tel,email = user.email,weixinid = user.weixinid};var url = string.Format(urlFormat, accessToken);var postData = data.ToJson();return Helper.GetCorpExecuteResult(url, postData);}

 

2、成员的更新操作

成员的数据更新和创建操作类似,它的企业号定义如下所示。

  • 请求说明

Https请求方式: POST

https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token=ACCESS_TOKEN

请求包示例如下(如果非必须的字段未指定,则不更新该字段之前的设置值):

{"userid": "zhangsan","name": "李四","department": [1],"position": "后台工程师","mobile": "15913215421","gender": 1,"tel": "62394","email": "zhangsan@gzdev.com","weixinid": "lisifordev","enable": 1
}

由于它的操作数据类似,因此它的实现代码也差不多,如下所示就是。

        /// <summary>/// 更新成员/// </summary>public CommonResult UpdateUser(string accessToken, CorpUserUpdateJson user){string urlFormat = "https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token={0}";//string postData = user.ToJson();var data = new{userid = user.userid,name = user.name,department = user.department,position = user.position,mobile = user.mobile,gender = user.gender,tel = user.tel,email = user.email,weixinid = user.weixinid,enable = user.enable};var url = string.Format(urlFormat, accessToken);var postData = data.ToJson();return Helper.GetCorpExecuteResult(url, postData);}

 

3、成员的删除、成员的获取、部门成员的获取操作

这些操作和上面的类似,不在赘述,主要就是根据需要定义他们对应的返回数据信息,然后解析Json数据即可转换为对应的实体。

1)删除人员的定义如下:

  • 请求说明

Https请求方式: GET

https://qyapi.weixin.qq.com/cgi-bin/user/delete?access_token=ACCESS_TOKEN&userid=lisi

  • 参数说明
参数必须说明
access_token调用接口凭证
userid员工UserID。对应管理端的帐号
  • 返回结果
{"errcode": 0,"errmsg": "deleted"
}

2)成员的获取定义如下:

  • 请求说明

Https请求方式: GET

https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&userid=lisi

  • 参数说明
参数必须说明
access_token调用接口凭证
userid员工UserID
  • 返回结果
{"errcode": 0,"errmsg": "ok","userid": "zhangsan","name": "李四","department": [1, 2],"position": "后台工程师","mobile": "15913215421","gender": 1,"tel": "62394","email": "zhangsan@gzdev.com","weixinid": "lisifordev",  "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0","status": 1
}

3)部门成员的获取定义如下:

  • 请求说明

Https请求方式: GET

https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token=ACCESS_TOKEN&department_id=1&fetch_child=0&status=0

  • 参数说明
参数必须说明
access_token调用接口凭证
department_id获取的部门id
fetch_child1/0:是否递归获取子部门下面的成员
status0获取全部员工,1获取已关注成员列表,2获取禁用成员列表,4获取未关注成员列表。status可叠加
  • 权限说明

管理员须拥有’获取部门成员’的接口权限,以及指定部门的查看权限。

  • 返回结果
{"errcode": 0,"errmsg": "ok","userlist": [{"userid": "zhangsan","name": "李四"}]
}

这个返回值我们定义一个实体对象用来存储数据即可。

    /// <summary>/// 获取部门成员返回的数据/// </summary>public class CorpUserListJson : BaseJsonResult{public CorpUserListJson(){this.userlist = new List<CorpUserSimpleJson>();}/// <summary>/// 返回的错误消息/// </summary>public CorpReturnCode errcode { get; set; }/// <summary>/// 对返回码的文本描述内容/// </summary>public string errmsg { get; set; }/// <summary>/// 成员列表/// </summary>public List<CorpUserSimpleJson> userlist { get; set; }}

 

7、综合例子调用代码

上面介绍了一些企业号的接口定义和我对API的C#封装接口和部分实现代码,实现了功能后,我们就可以在代码中对它进行测试,确信是否正常使用。

        /// <summary>/// 人员管理综合性操作(创建、修改、获取信息、删除)/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnCorpUser_Click(object sender, EventArgs e){CorpUserJson user = new CorpUserJson();user.userid = "test";user.name ="测试用户";user.department = new List<int>(){2};user.email = "test@163.com";ICorpAddressBookApi bll = new CorpAddressBookApi();CommonResult result = bll.CreateUser(token, user);if (result != null){Console.WriteLine("创建成员:{0} {1} {2}", user.name, (result.Success ? "成功" : "失败"), result.ErrorMessage);string name = "修改测试";user.name = name;CorpUserUpdateJson userUpdate = new CorpUserUpdateJson(user);result = bll.UpdateUser(token, userUpdate);if (result != null){Console.WriteLine("修改名称:{0} {1} {2}", name, (result.Success ? "成功" : "失败"), result.ErrorMessage);}CorpUserGetJson userGet = bll.GetUser(token, user.userid);if (userGet != null){Console.WriteLine("成员名称:{0} ({1} {2})", userGet.name, user.userid, user.email);}result = bll.DeleteUser(token, user.userid);if (result != null){Console.WriteLine("删除成员:{0} {1} {2}", name, (result.Success ? "成功" : "失败"), result.ErrorMessage);}}}

获取部门人员的操作代码如下所示。

        /// <summary>/// 获取部门人员/// </summary>private void btnCorpUserList_Click(object sender, EventArgs e){int deptId = 1;ICorpAddressBookApi bll = new CorpAddressBookApi();CorpUserListJson result = bll.GetDeptUser(token, deptId);if (result != null){foreach(CorpUserSimpleJson item in result.userlist){Console.WriteLine("成员名称:{0} {1}", item.name, item.userid);}}}

 

人员的管理,相对来说比较简单,主要是在一定的部门下创建人员,然后也可以给标签增加相应的人员,基本上就是这些了,不过一定需要确保有相应的权限进行操作。

如果对这个《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)--开始使用微信接口

 

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

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

相关文章

IDEA 运行spingboot时出现Process finished with exit code -1073741819 (0xC0000005)

经过多方查证&#xff0c;问题最终定位在金山词霸2016上&#xff0c;如果开启了金山词霸的取词和划意功能&#xff0c;就会出现此错误&#xff0c;估计是冲突吧。 解决办法&#xff1a;关掉金山词霸&#xff0c;或者把金山词霸的取词和划意功能关掉。经过尝试&#xff0c;发现只…

转载--【笔记】Asp.Net构架(Http请求处理流程)

转载--【笔记】Asp.Net构架(Http请求处理流程) 最近接触了一些Asp.Net开发人员&#xff0c;在聊到技术的时候&#xff0c;发现很多的Asp.Net开发人员都不明白在ASP.NET中一个页面请求的处理流程&#xff0c;今天自己在反思的过程中&#xff0c;发现我自己对这个也是一知半解&am…

语法分析器c语言 递归子程序,RecursiveSubroutine

RecursiveSubroutine介绍编译原理语法分析——递归下降子程序类&#xff0c;C实现。实验说明一、实验目标分别采用自顶向下和自底向上两种语法分析方法&#xff0c;编制一个语法分析程序&#xff0c;实现对词法分析程序所提供的单词序列的语法检查和结构分析实验内容。二、实验…

SSL/TLS协议运行机制的概述

互联网的通信安全&#xff0c;建立在SSL/TLS协议之上。 本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和运行过程&#xff0c;不涉及具体的实现细节。如果想了解这方面的内容&#xff0c;请参阅RFC文档。 一、作用 不使用SSL/TLS的HTTP通信&#xff0c;就是不加密的…

margin塌陷

一&#xff1a;什么是margin塌陷 在标准文档流中&#xff0c;竖直方向的margin会出现叠加现象&#xff08;水平方向不会塌陷&#xff09;&#xff0c;两个margin紧挨着&#xff0c;中间没有border或者paddingmargin直接接触&#xff0c;就产生了合并表现为较大的margin会覆盖掉…

c语言幼儿园管理系统,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼编写程序&#xff0c;登录幼儿园200个小朋友的数据&#xff1a;姓名、性别、年龄、身高、体重、出生日期&#xff0c;分别按年龄排序后输出。要求&#xff1a;(1)登录数据用函数input()(2)按身高排序用函数sort()(3)输出排序结果用…

[转载]EXT核心API详解(一)-Ext

Ext类addBehaviors( Object obj ) : void对选择的元素 应用事件侦听器,事件名以附加在结尾,例如addBehaviors({// idfoo下所有的a标签加入click事件#foo aclick : function(e, t){// do something},// 用,分隔多个选择器#foo a, #bar span.some-classmouseover : function(){//…

Redis链表实现

链表在 Redis 中的应用非常广泛&#xff0c; 比如列表键的底层实现之一就是链表&#xff1a; 当一个列表键包含了数量比较多的元素&#xff0c; 又或者列表中包含的元素都是比较长的字符串时&#xff0c; Redis 就会使用链表作为列表键的底层实现。除了链表键之外&#xff0c; …

获取当前日期0点及23点59的时间戳

1.获取今天0点时间戳&#xff1a; const start new Date(new Date(new Date().toLocaleDateString()).getTime()); //如果不是当天换成你想获取0点的时间即可。 console.log(start); 2.获取今天23:59:59点时间戳&#xff1a; const start new Date(new Date(new Date(…

android 6.0 api 管理,Android 6.0(API23)权限申请问题

1.在API23以上&#xff0c;不止要在AndroidManifest.xml里面添加权限2.还要在JAVA代码中请求权限&#xff1a;// Storage Permissionsprivate static final int REQUEST_EXTERNAL_STORAGE 1;private static String[] PERMISSIONS_STORAGE {Manifest.permission.READ_EXTERNAL…

ecos内核概览--bakayi译

http://blog.csdn.net/wangzaiwei2006/article/details/6453423

linux optimizer,linux命令1—安装optimizer(示例代码)

ZendChina官方&#xff1a;下面介绍一下关于在linux环境下Zend Optimizer 3.3的安装方法。本篇文章是基于RHEL5架构的linux系统。(1)ZendOptimizer 3.3.3版本的安装。ZendOptimizer 3.3.3下载地址&#xff1a;安装&#xff1a;# wget http://down1.chinaunix.net/distfiles/Zen…

python 多进程与多线程配合拷贝文件目录

版本一:使用shutil进行拷贝 1 # -*- coding: utf-8 -*-2 # author: Tele3 # Time : 2019/04/02 下午 3:094 # 待改进:5 # 1.拷贝逻辑使用原生的io6 # 2.针对大文件在进程内部实现多线程方式进行拷贝7 8 9 import time10 import re11 import os12 import shutil13 import multi…

水晶报表加载失败的解决方法

问题描述:利用水晶报表开发的程序在运行了一段时间后,加载水晶报表失败.问题解决1.这个问题可能是由于windows临时文件夹下面的水晶报表文件没有及时清除的原因.打开临时文件夹,删除后就可以正常运行.2. (1).ReportDocumen实例必须为类成员 private ReportDocument prtp ne…

重定向

servlet的两种重定向方法的区别及应用一 问题&#xff1a; 在servlet/JSP编程学习中,发现有两种方法可以实现服务端输出重定向&#xff0c;一种是通过forward方法&#xff08;例如JSP中 的<jsp:forward page”OtherPage.jsp”/>&#xff09;&#xff0c;另一种则是通过运…

移动端事件

1. click事件 单击事件&#xff0c;类似于PC端的click&#xff0c;但在移动端中&#xff0c;连续click的触发有200ms ~ 300ms的延迟 2. touch类事件 触摸事件&#xff0c;有touchstart touchmove touchend touchcancel 四种之分 touchstart&#xff1a;手指触摸到屏幕会触发 to…

LINQ to SharePoint 试用感受, 欢迎讨论~

目前项目需要比较复杂的查询功能&#xff0c; 如果直接写CAML的话以后维护非常麻烦&#xff0c; 然后暂时用LINQ to SharePoint替代之&#xff5e; URL&#xff1a; http://linqtosharepoint.codeplex.com/ 最大的优点是我不用写CAML了&#xff0c; 非常容易实现一些简单的查询…

android应用退出后广播无效,关闭应用程序后,保持广播接收器运行

我认为接受的答案不是实际答案。我将解释问题所在。我认为您是在Huawie&#xff0c;Oppo&#xff0c;Vivo&#xff0c;Xiomi&#xff0c;asus .......或某些设备上测试您的应用程序。使用这些设备&#xff0c;如果我们关闭应用程序&#xff0c;它们还将关闭我们的广播接收器。因…

数据库SQL,技巧篇

三、技巧1、11&#xff0c;12的使用&#xff0c;在SQL语句组合时用的较多“where 11” 是表示选择全部 “where 12”全部不选&#xff0c;如&#xff1a;if strWhere ! beginset strSQL select count(*) as Total from [ tblName ] where strWhere endelse beginset st…

走过小公司的坑之入职一周

第一天工作内容&#xff0c;电脑系统安装&#xff0c;软件环境部署&#xff0c;出现硬盘坏道问题及病毒 第二天工作内容&#xff0c;web基础模型搭建&#xff0c;解决软件版本兼容问题 第三天工作内容&#xff0c;承接项目&#xff0c; 项目背景&#xff1a;web进销存系统&…