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,一经查实,立即删除!

相关文章

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

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

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会覆盖掉…

Redis链表实现

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

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…

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

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

ps4移植android游戏,把PS4游戏《Apex英雄》《只狼》搬到安卓手机上玩,这招够简单!...

近期&#xff0c;索尼抢先其他平台&#xff0c;在PlayStaion官方网站发布新信息&#xff0c;使各大主流射击游戏平均流失率达到57%的大逃杀游戏《Apex英雄》&#xff0c;本赛季会加入两名新角色&#xff0c;一位是刚更新的辛烷&#xff0c;另一位会在本赛季结束前推出。根据此前…

VC系统扫雷游戏外挂源代码程序下载(转帖

VC系统扫雷游戏外挂源代码程序下载&#xff08;转帖&#xff09;2008-03-04 10:25经过了多次测试写出了历史上第一个有点意义的MFC程序。效果差强人意。^_^ CODE:// CrackWinmineDlg.cpp : implementation file// #include "stdafx.h"#include "CrackWinmine.h&…

JAVA面向对象程序设计(第二版) 袁绍欣 第四章答案

面向对象&#xff08;上&#xff09; 1.名词解释&#xff1a;构造方法、抽象 构造方法一般是用来初始化数据成员的&#xff0c;与类名相同&#xff0c;无返回值。 分为有参和无参数&#xff0c;当一个类中没有定义构造函数时&#xff0c;系统会给该类中加一个默认的空参数的构造…

鸿蒙系统公测版发布,鸿蒙OS2.0系统公测版什么时候发布-适配机型

鸿蒙OS2.0手机开发者Beta版本于今日已正式发布&#xff0c;那么鸿蒙OS2.0系统的公测版本上市时间&#xff0c;适配手机名单有哪些&#xff0c;接下来小编就为大家带来了解答&#xff0c;一起看看吧&#xff01;一、公测版发布时间12月16日&#xff0c;发布了鸿蒙OS2.0手机开发者…

angular 加入原生html,Angular HTML绑定

收到一只叮咚Angular 2.0.0和Angular 4.0.0 final仅为了安全的内容constructor(private sanitizer:DomSanitizer){}transform(style) {return this.sanitizer.bypassSecurityTrustHtml(style);//return this.sanitizer.bypassSecurityTrustStyle(style);// return this.sanitiz…

通过PowerShell获取Windows系统密码Hash

当你拿到了系统控制权之后如何才能更长的时间内控制已经拿到这台机器呢&#xff1f;作为白帽子&#xff0c;已经在对手防线上撕开一个口子&#xff0c;如果你需要进一步扩大战果&#xff0c;你首先需要做的就是潜伏下来&#xff0c;收集更多的信息便于你判断&#xff0c;便于有…

ant引入html页面,antdesign 中 使用 iconfont symbol方式引入图标不展示

最近在写项目遇到了一个问题&#xff0c;我使用vue框架搭建了一个项目。我创建了一个 index.js文件&#xff0c;内容为&#xff1a;import { Icon } from ant-design-vue;const IconFont Icon.createFromIconfontCN({scriptUrl: //at.alicdn.com/t/font_2296540_wpxzi5ar76.js…

java filter

一、Filter简介 Filter也称之为过滤器&#xff0c;它是Servlet技术中最激动人心的技术&#xff0c;WEB开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截&#xff0c;从而实现一些特殊的功…

visualstudio调试html,Visual Studio Code中调试JavaScript

一、安装Debugger for Chrome扩展插件二、配置运行环境最左侧菜单找到调试(一个虫子样图标)&#xff0c;点击下图中红色标注或者直接按F5&#xff1a;然后出现下图所示&#xff1a;选择Chrome&#xff0c;会生成Launch.json文件&#xff1a;{// 使用 IntelliSense 了解相关属性…

动态网页技术(二)

SSH整合的基本步骤1、 Spring向下整合Hibernate&#xff08;DAO层&#xff09;1.1使用Spring的IoC容器创建sessionFactory1.2使用Spring的IoC容器创建DAO2、 Spring中间管理业务层2.1使用Spring的IoC容器创建Biz Bean2.2使用Spring的AOP配置业务层事务3、 Spring向上整合Str…

Android之PhotoView使用(原创)

文章大纲 一、什么是PhotoView二、代码实战三、项目源码下载 一、什么是PhotoView 一款 ImageView 展示框架&#xff0c;支持缩放&#xff0c;响应手势&#xff0c;位于图片排行榜的第五位&#xff0c;PhotoView 与上面不同的是图片的展示功能&#xff0c;可以实现类似微信头像…

浏览器打不开html链接,win7系统ie浏览器打不开网站链接怎么办

‍‍有些使用ie浏览器的win7旗舰版用户来&#xff0c;最近发现网站中的链接打不开&#xff0c;严重影响上网体验&#xff0c;遇到这种情况我们该怎么办呢&#xff1f;会出现网站链接无法打开很有可能是ie浏览器出了问题&#xff0c;我们可以通过修复IE组件来解决&#xff0c;下…

好玩的代码(1)

看效果&#xff08;gif工具不太会用&#xff0c;效果不是很好&#xff09; 代码很简单&#xff0c;就是对sleep函数和/b的使用。 代码 1 #include <cstdio>2 #include <windows.h>3 using namespace std;4 5 int main(int argc, char **argv)6 {7 printf("…

Python基础实践-密码管理系统实例

密码管理系统实例 需求分析&#xff1a; 1.主界面&#xff08;选项&#xff1a;密码生成&#xff0c;密码查询&#xff0c;密码修改&#xff0c;密码删除&#xff09;2.密码生成&#xff1a;用户输入密码的描述&#xff0c;输入密码的长度&#xff0c;使用随机数生成一个比较复…