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

企业微信开发总结-获取通讯录 企业微信开发总结-获取通讯录 最近遇到个项目需求,需要能够获取到用户企业的通讯录,同步到我们系统中,这样就不用重复输入一批企业人员了。一开始想的很简单,实际研究下来发现企业微信比个人微信对接起来复杂多了, 也许是微信平台考虑到企业数据的安全性,特意设计的很复杂吧。话不多说,直奔主题。 PS: 本项目代码是基于java语言springboot框架开发的,使用工具是IDEA, jdk1.8。如果看官您采用的是其他语言,那只能参考下本文的思路了。 一、 前期企业微信准备 先注册个企业微信,这个按照官方指引来就 阅读详情

%26nbsp;前面一篇随笔企业号的一些基础信息,以及介绍如何配置企业号的回调方式实现和企业号服务器进行沟通的桥梁。本篇主要还是继续介绍企业号的开发工作的开展,介绍微信企业号通讯录管理开发功能,介绍其中组织机构里面如何获取和管理部门的信息等内容。

%26nbsp;1、企业组织的创建和配置

首先我们可以在企业号的管理后台里面创建一个组织机构,里面创建一些部门和人员列表,方便我们开发和使用。

例如创建一个广州爱奇迪的根结构,然后在其中在创建一些组织机构,如下图所示。

然后给组织结构根节点%26ldquo;广州爱奇迪%26rdquo;增加一个管理员权限,以后再开发接口里面也就可以使用这个管理员所属的权限Secret值进行调用了。

CorpID是企业号的标识,每个企业号拥有一个唯一的CorpID;Secret是管理组凭证密钥。
系统管理员可通过管理端的权限管理功能创建管理组,分配管理组对应用、通讯录、接口的访问权限。完成后,管理组即可获得唯一的secret。系统管理员可通过权限管理查看所有管理组的secret,其他管理员可通过设置中的开发者凭据查看。

我的企业号的创建者和%26ldquo;广州爱奇迪%26rdquo;组织结构的管理员是不同的,由于Secret是管理组凭证密钥,因此管理者负责不同的组织机构管理的话,自己的管理Secret值可能就不同了。如果我们需要调用接口,就需要用到这个属于自己权限级别的Secret值,如下图所示。

%26nbsp;如果不是企业号的创建者,那么可能不能修改里面的一些权限分配,只能查看。

2、API访问的全局唯一票据AccessToken的获取

和公众号一样,我们调用企业号API的第一步也是需要先获取访问的票据AccessToken。这个票据是全局性的,有一定的时效和频率控制,因此需要适当的进行缓存,不能每次调用都去刷新获取。

企业号获取访问票据的主要的逻辑代码如下所示,其主要的就是需要使用管理者的Secret值去获取对应的口令,这样它就能够知道管理的是那个组织结构的了。

        /// %26lt;summary%26gt;
        /// 获取每次操作微信API的Token访问令牌
        /// %26lt;/summary%26gt;
        /// %26lt;param name="corpid"%26gt;企业Id%26lt;/param%26gt;
        /// %26lt;param name="corpsecret"%26gt;管理组的凭证密钥%26lt;/param%26gt;
        /// %26lt;returns%26gt;%26lt;/returns%26gt;
        public string GetAccessTokenNoCache(string corpid, string corpsecret)
        {
            var url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}%26amp;corpsecret={1}",
                                    corpid, corpsecret);

            HttpHelper helper = new HttpHelper();
            string result = helper.GetHtml(url);
            string regex = "\"access_token\":\"(?%26lt;token%26gt;.*?)\"";

            string token = CRegex.GetText(result, regex, "token");
            return token;
        }

微信企业号的说明如下所示:

当企业应用调用企业号接口时,企业号后台为根据此次访问的AccessToken,校验访问的合法性以及所对应的管理组的管理权限以返回相应的结果。

注:你应该审慎配置管理组的权限,够用即好,权限过大会增加误操作可能性及信息安全隐患。

AccessToken是企业号的全局唯一票据,调用接口时需携带AccessToken。AccessToken需要用CorpID和Secret来换取,不同的Secret会返回不同的AccessToken。正常情况下AccessToken有效期为7200秒,有效期内重复获取返回相同结果,并自动续期。由于获取access_token的api调用次数非常有限,建议企业全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务。

%26nbsp;

2、通讯录管理之部门信息的维护

有了第一节里面的访问票据,我们就可以利用API来做很多事情了,包括组织结构的获取、创建、删除等等功能。

创建部门的官方接口定义如下所示。

  • 请求说明

Https请求方式: POST

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

请求包结构体为:

{
   "name": "邮箱产品组",
   "parentid": "1"
}
  • 参数说明
参数必须说明
access_token是调用接口凭证
name是部门名称。长度限制为1~64个字符
parentid是父亲部门id。根部门id为1

%26nbsp;

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

根据上面的一些类似的接口定义说明,我们先来定义下组织机构部门数据的维护接口,然后在逐步实现和调用。

        #region 部门管理
        /// %26lt;summary%26gt;
        /// 创建部门。
        /// 管理员须拥有%26ldquo;操作通讯录%26rdquo;的接口权限,以及父部门的管理权限。
        /// %26lt;/summary%26gt;
        CorpDeptCreateJson CreateDept(string accessToken, string name, string parentId);

        /// %26lt;summary%26gt;
        /// 更新部门。
        /// 管理员须拥有%26ldquo;操作通讯录%26rdquo;的接口权限,以及该部门的管理权限。
        /// %26lt;/summary%26gt;
        CommonResult DeleteDept(string accessToken, int id);

        /// %26lt;summary%26gt;
        /// 删除部门.
        /// 管理员须拥有%26ldquo;操作通讯录%26rdquo;的接口权限,以及该部门的管理权限。
        /// %26lt;/summary%26gt;
        CorpDeptListJson ListDept(string accessToken);

        /// %26lt;summary%26gt;
        /// 获取部门列表.
        /// 管理员须拥有%26rsquo;获取部门列表%26rsquo;的接口权限,以及对部门的查看权限。
        /// %26lt;/summary%26gt;
        CommonResult UpdateDept(string accessToken, int id, string name); 
        #endregion

如创建部门的接口实现如下所示,主要就是构建URL和POST的数据包,然后统一调用并获取返回数据,转换为具体的Json对象实体即可。其他接口的实现方式类似,不在赘述。

        /// %26lt;summary%26gt;
        /// 创建部门。
        /// 管理员须拥有%26ldquo;操作通讯录%26rdquo;的接口权限,以及父部门的管理权限。
        /// %26lt;/summary%26gt;
        public CorpDeptCreateJson CreateDept(string accessToken, string name, string parentId)
        {
            string urlFormat = "https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token={0}";
            var data = new
            {
                name = name,
                parentId = parentId
            };
            var url = string.Format(urlFormat, accessToken);
            var postData = data.ToJson();

            CorpDeptCreateJson result = CorpJsonHelper%26lt;CorpDeptCreateJson%26gt;.ConvertJson(url, postData);
            return result;
        }

CorpDeptCreateJson 对象实体类的定义如下所示,我们主要是根据返回结果进行定义的。

    /// %26lt;summary%26gt;
    /// 创建部门的返回结果
    /// %26lt;/summary%26gt;
    public class CorpDeptCreateJson : BaseJsonResult
    {
        /// %26lt;summary%26gt;
        /// 返回的错误消息
        /// %26lt;/summary%26gt;
        public CorpReturnCode errcode { get; set; }

        /// %26lt;summary%26gt;
        /// 对返回码的文本描述内容
        /// %26lt;/summary%26gt;
        public string errmsg { get; set; }

        /// %26lt;summary%26gt;
        /// 创建的部门id。
        /// %26lt;/summary%26gt;
        public int id { get; set; }
    }

%26nbsp;

%26nbsp;3、部门管理的API调用

%26nbsp;上面小节介绍了如何封装部门管理的API,那么我们封装好了对应的接口和接口实现,怎么样在实际环境里面进行调用处理的呢,为了方便我创建一个小的Winform程序来测试对应API的功能,如下所示。

下面我们来介绍一下调用的代码和效果展示。

        private void btnCreateDeleteDept_Click(object sender, EventArgs e)
        {
            ICorpAddressBookApi bll = new CorpAddressBookApi();
            string name = "测试部门";
            CorpDeptCreateJson json = bll.CreateDept(token, name, "2");
            if (json != null)
            {
                Console.WriteLine("创建了部门:{0}, ID:{1}", name, json.id);

                //更新部门信息
                name = "测试部门修改名称";
                CommonResult result = bll.UpdateDept(token, json.id, name);
                if(result != null)
                {
                    Console.WriteLine("修改部门名称:{0} {1}", (result.Success ? "成功" : "失败"), result.ErrorMessage);
                }

                //删除部门
                result = bll.DeleteDept(token, json.id);
                if (result != null)
                {
                    Console.WriteLine("删除部门名称:{0} {1}", (result.Success ? "成功" : "失败"), result.ErrorMessage);
                }
            }
            
        }
        /// %26lt;summary%26gt;
        /// 获取部门列表
        /// %26lt;/summary%26gt;
        private void btnListDept_Click(object sender, EventArgs e)
        {
            ICorpAddressBookApi bll = new CorpAddressBookApi();
            CorpDeptListJson list = bll.ListDept(token);
            foreach (CorpDeptJson info in list.department)
            {
                string tips = string.Format("{0}:{1}", info.name, info.id);
                Console.WriteLine(tips);
            }
        }

%26nbsp;

%26nbsp;

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

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

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

%26nbsp;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)--开始使用微信接口

微信企业号,发消息或获取人员信息时报no privilege to access/modify contact/party/agent 阅读详情

相关推荐

C# 实现微信企业号的用户发消息和返回消息

(附上说明文档,让大家快速通过回调验证)用C#写的,网上找了很多但是都无法直接使用,也有部分遗漏,正好自己优化一个分享给大家。例子是把用户发送的消息回复给用户,下载后只需在web.config配置好相应的参数,即可发布使用。

C# 微信企业号--通讯录更新

通讯录更新接口提供三种更新方法:1) 增量更新成员 2)全量覆盖成员 3) 全量覆盖部门。如果企业要做到与企业号通讯录完全一致,可先调用全量覆盖部门接口,再调用全量覆盖成员接口,即可保持通讯录完全一致。 使用步骤为: 1.下载接口对应的csv模板,如果有扩展字段,请自行添加 2.按模板的格式,生成接口所需的数据文件 3.通过上传媒体文件接口上传数据文件,获取media_id 4.调用通讯录更新接口,传入media_id参数 5.接收任务完成事件,并获取任务执行结果

蓝思创工作室知识库 3230

C#获取的企业微信的用户身份

利用C#开发的微信企业号的应用,可以进行企业号用户身份识别,开发平台是VS2016+SQL2008,下载后只需修改相关的参数可进行调试,数据库可根据自己的要求进行设定,或者可以修改成自己的数据库

【企业微信对接开发】获取部门负责人及其子部门信息

在企微对接开发中,再做企业组织架构管理的时候,需要根据某个成员 id 查询他所负责的所有部门、子部门以及相对应的成员信息。整体思路还是部门层级关系的数据获取,说简单也不简单,涉及一定逻辑在里面。记录一下。

hj1043的博客 2293

基于Winfrom的企业微信扫码登录案例

扫码登录、获取扫码人的身份信息

芯片低功耗设计实战:CPF与UPF流程选择指南(附工具对比)

本文深入探讨了芯片低功耗设计实战中CPF与UPF流程的选择策略。文章从两者本质差异与演进脉络出发,结合Cadence与Synopsys工具链的深度支持实况,为工程师提供了基于项目场景的决策框架。重点分析了在混合工具链环境下如何实施流程与验证,并强调了利用Spyglass等工具确保功耗意图无损传递的关键技巧,旨在帮助团队做出明智的流程抉择,提升设计效率与可靠性。

weixin_29197051的博客 408

C# 微信企业号--管理通讯录 之管理部门

C# 微信企业号 部门创建例子

蓝思创工作室知识库 3159

单细胞数据导入实战:Read10X函数常见报错与解决方案

本文针对单细胞转录组分析中Read10X函数数据导入的常见问题,提供了详细的实战解决方案。重点解析了因文件路径错误、压缩文件未解压、版本命名不符及内存不足导致的报错,并给出了检查路径、正确解压、重命名文件、调整参数及优化内存等具体操作步骤,帮助用户高效完成单细胞数据导入,为后续分析奠定坚实基础。

weixin_28235513的博客 241

C#微信开发

C#开发微信门户及应用教程   作者:伍华聪   C#开发微信门户及应用(1)--开始使用微信接口 6 1、微信账号 6 2、微信菜单定义 7 3、接入微信的链接处理 8 4、使用开发方式创建菜单 14 5、我创建的菜单案例 17 C#开发微信门户及应用(2)--微信消息的处理和应答 18 1、微信的消息应答交互 18 2、微信的管理接口 25 C#开发微信门户及

代码改变生活 1万+

S32K144(1)新建裸机项目以及烧录调试工程

目录 1、简介 2、S32DS新建裸机项目 2.1、新建空的项目 2.2、选择标准库的S32DS 2.3、选择使用EWL官方库 2.4、新建成功 3、烧录工程 3.1、点击Debug,选择Debug Configurations 3.2、新建GDB SEGGER J-Link Debugging 3.3、确认Project和C/C++ Applicants是需要烧写的项目名和路径正确 3.4、确认Executable Device name Interface等各个配置信息正确,后点击

朗朗上口就行啦的博客 4977

ai数字人系统部署

这段代码实现了基本的语音交互闭环,用户通过语音输入问题,数字人识别语音后进行自然语言理解并生成回复,再将回复转换为语音输出。但实际应用中的 AI 数字人系统更为复杂,如形象渲染需专业图形引擎(如 Unity、Unreal Engine),自然语言处理也会涉及更复杂的模型微调及多轮对话管理等。一个完整的 AI 数字人系统涵盖形象生成、自然语言处理、动作控制等多个复杂功能,下面为你提供一个 Python 示例,整合多个库来实现数字人基础功能,包括语音交互、简单的自然语言理解以及通过虚拟形象展示对话。

weixin_ggwwsscc的博客 370

C#实现微信企业号API服务端调用封装

C#实现微信企业号API服务端调用封装背景代码封装时间戳方法基础方法:验证服务器接口、服务端解密、服务端加密、获取AccessToken、生成企业获取Code URL、获取授权用户信息、获取调用JSAPI接口的临时票证微信企业号登录授权微信企业号通讯录方法素材方法消息方法菜单方法主代码清单完整代码下载 背景 在进行微信企业号开发时,我们经常会在java服务端调用微信企业号的相关接口,如比 获取Ac...

分享技术,传播知识! 3728

104、母线电容设计与选型

母线电容选型,容值不是最关键的,纹波电流和温度才是。很多炸机事故,不是容值不够,而是纹波电流超标导致过热。选电容时,多花点时间算纹波电流,比盲目加大容值有效得多。另外,别迷信进口品牌。国产电容(如江海、艾华)在常规应用里完全够用,价格只有进口的1/3。但高频特性确实有差距,所以高频去耦一定要用薄膜电容。最后,留个调试技巧:用示波器测母线电容两端的电压纹波,同时用电流探头测电容的纹波电流。如果纹波电流波形有尖峰,说明ESL太大,需要并联高频电容。如果纹波电压是低频波动,说明容值不够。

2401_88858637的博客 50

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

我们知道,微信公众号和企业号都提供了一个官方的Web后台,方便我们对微信账号的配置,以及相关数据的管理功能,对于微信企业号来说,有通讯录中的组织架构管理、标签管理、人员管理、以及消息的发送等功能,其中微信企业号的组织架构和标签可以添加相应的人员,消息发送可以包含文本、图片、语音、视频、图文、文件等内容。对于企业号来说,官方的接口几乎可以无限的发送消息,因此构建一个管理后台,管理企业号的人...

diaobo9395的博客 225

让 ABAP 程序天生可翻译:Text Symbols 与 Text Pool 从入门到工程化落地

ABAP 国际化实践:Text Symbols 的工程价值与落地方法 摘要: 本文系统阐述了 ABAP 开发中 Text Symbols 的核心价值与实践方法。通过解耦程序逻辑与语言文本,Text Symbols 实现了代码国际化,避免了硬编码带来的维护难题。文章详细介绍了 Text Pool 结构、两种引用方式(独立引用 TEXT-001 和附着式 '(001)'),以及 SE38 和 SE63 的翻译流程。特别强调最大长度预留、术语统一等工程实践,并提供了 READ TEXTPOOL 自动化检查方案。最

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 247

Arcgis中的模型构建器技术之按属性批量建库并对应输出

好久没更新了,之前我们已经介绍过四至点提取模型,前两天有同事问怎么样按属性批量建数据库并对应输出相关图斑。比如将一个县的永农数据按乡镇建立数据库并将对应乡镇的永农数据输出到相应的数据库里。今天就介绍一下相关的模型构建过程。

weixin_44671081的博客 520

C# 微信企业号系列目录

微信企业号,是微信2014年推出的新产品,主要是针对企业进行管理的平台,企业号将在移动互联网上,为企业提供对内部员工的管理、沟通与服务。可以帮助企业建立员工、上下游供应链与企业 IT 系统间的连接。利用企业号 ,企业IT部门可以帮助企业快速、低成本的实现高质量的移动轻应用,实现生产、管理、协作、运营的移动化。已经建设了IT系统的企业可直接将现有IT系统接入微信企业号,既保留用户PC端使用习惯,又快速实现企业应用移动化。 本系列文章希望从一个循序渐进的角度,来介绍微信的相关开发过程和经验总结,希望给大

蓝思创工作室知识库 3585

3年爬虫老狗亲测2026最新OpenClaw:熬3天的DOM+反爬+存储,现在18分钟零核心代码搞定!

本文分享了跨境电商竞品监控系统的技术升级历程。作者通过对比传统爬虫技术(Selenium+Scrapy)与OpenClaw 2026的实践应用,展示了AI驱动的自动化爬虫变革。传统方案需3000+行代码维护DOM结构、反爬策略,耗时3天完成2000个SKU监控;而采用基于GPT-5o-mini的OpenClaw 2026后,仅需自然语言描述需求,18分钟即可完成全流程,效率提升240倍。重点介绍了四大核心功能:动态验证码自动识别

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2092

利用微信企业号发送报警信息

开发环境 操作系统:CentOS 7.4 Python版本 :3.6 模块:json,requests 1. 微信企业号设置 1.1 企业号注册 微信企业号注册是免费的而且无需企业认证,大家放心使用 注册地址: https://mp.weixin.qq.com/ 点击企业微信并填写信息 1.2 企业号设置 注册好之后我们邀请一些同事进来后进行设置,以便于我们更好的利用 通讯录设置 这里点击标签详情可以看到标签的ID号,后面程序会用的 增加应用 微信企业号发送信息需.

mihaoyun.com的专栏 8296

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C实现微信企业号API服务端调用封装

C#实现微信企业号API服务端调用封装 【下载地址】C实现微信企业号API服务端调用封装 C#实现微信企业号API服务端调用封装本仓库提供了一个完整的C#实现微信企业号API服务端调用的封装源码,涵盖了从基础方法到高级功能的全面实现 ...

gitblog_09705的博客 493

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 玩家信息血条及伤害值随主角移动
下一篇: 利用DAC(Data-tier Application)实现数据库结构迁移
lin91o7c
博客等级 码龄12年 1粉丝 26原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值