热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

为了方便,我们可以创建一个部门组织结构,这是开发的前提,因为我们通讯录管理,也是基于一个组织机构下的,如上篇介绍的组织结构层次一样。我这里创建一个广州爱奇迪的根结构,然后在其中在创建一些组织机构,如下图所示。
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 部门成员管理        /// 
        /// 创建成员        /// 
        CommonResult CreateUser(string accessToken, CorpUserJson user);        /// 
        /// 更新成员        /// 
        CommonResult UpdateUser(string accessToken, CorpUserUpdateJson user);        /// 
        /// 删除成员        /// 
        CommonResult DeleteUser(string accessToken, string userid);        /// 
        /// 根据成员id获取成员信息        /// 
        CorpUserGetJson GetUser(string accessToken, string userid);        /// 
        /// 获取部门成员        /// 
        CorpUserListJson GetDeptUser(string accessToken, int department_id, int fetch_child = 0, int status = 0);        #endregion

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

        /// 
        /// 创建成员        /// 
        public CommonResult CreateUser(string accessToken, CorpUserJson user)
        {            string urlFormat = "http://www.php.cn/{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
}

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

        /// 
        /// 更新成员        /// 
        public CommonResult UpdateUser(string accessToken, CorpUserUpdateJson user)
        {            string urlFormat = "http://www.php.cn/{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": "李四"
           }
     ]
}

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

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

7、综合例子调用代码

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

        /// 
        /// 人员管理综合性操作(创建、修改、获取信息、删除)        /// 
        /// 
        /// 
        private void btnCorpUser_Click(object sender, EventArgs e)
        {
            CorpUserJson user = new CorpUserJson();
            user.userid = "test";
            user.name ="测试用户";
            user.department = new List(){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);
                }
            }
        }

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

        /// 
        /// 获取部门人员        /// 
        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#开发微信门户及应用微信企业号的通讯录管理开发之成员管理相关文章请关注PHP中文网!

推荐阅读
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 大连微软技术社区举办《.net core始于足下》活动,获得微软赛百味和易迪斯的赞助
    九月十五日,大连微软技术社区举办了《.net core始于足下》活动,共有51人报名参加,实际到场人数为43人,还有一位专程从北京赶来的同学。活动得到了微软赛百味和易迪斯的赞助,场地也由易迪斯提供。活动中大家积极交流,取得了非常成功的效果。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
瘦哆哆和胖大雄
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有