이전 기사에서는 Enterprise Account에 대한 몇 가지 기본 정보를 제공하고 Enterprise Account 서버와의 통신 브리지를 달성하기 위해 Enterprise Account의 콜백 방법을 구성하는 방법을 소개했습니다. 이 기사에서는 주로 기업 계정 개발 작업을 소개하고, WeChat 기업 계정 주소록 관리 및 개발 기능을 소개하며, 조직 내 부서 정보를 획득하고 관리하는 방법을 소개합니다.
먼저 기업 계정의 관리 배경에서 조직을 생성하고 그 안에 일부 부서 및 인사 목록을 생성하여 업무를 보다 쉽게 수행할 수 있습니다. 개발 및 사용.
예를 들어, 아래 그림과 같이 광저우 아이치디의 루트 구조를 생성한 후 그 안에 일부 조직 구조를 생성합니다.
그런 다음 조직 구조 "Guangzhou Aiqidi"의 루트 노드에 관리자 권한을 추가하면 나중에 인터페이스에서 이 관리자의 권한 비밀 값을 사용할 수 있습니다. 개발전화가 왔습니다.
CorpID는 기업 계정의 ID입니다. 각 기업 계정에는 고유한 CorpID가 있습니다. Secret은 관리 그룹 자격 증명 키입니다.
시스템 관리자는 관리단말의 권한관리 기능을 통해 관리그룹을 생성하고 해당 관리그룹의 접근권한을 애플리케이션, 주소록, 인터페이스에 할당할 수 있습니다. 완료되면 관리 그룹은 고유한 비밀을 얻을 수 있습니다. 시스템 관리자는 권한 관리를 통해 모든 관리 그룹의 비밀을 볼 수 있으며, 다른 관리자는 설정의 개발자 자격 증명을 통해 이를 볼 수 있습니다.
내 기업 계정의 작성자와 "Guangzhou IQidi" 조직 구조의 관리자는 다릅니다. Secret은 관리 그룹 자격 증명 키이므로 관리자가 다른 조직 구조의 관리를 담당하는 경우 그 사람 또는 she 관리 비밀 값은 다를 수 있습니다. 인터페이스를 호출해야 하는 경우 아래 그림과 같이 자체 권한 수준에 속하는 Secret 값을 사용해야 합니다.
기업 계정의 생성자가 아닌 경우 내부에서 일부 권한 할당을 수정하지 못할 수도 있으며 볼 수만 있습니다.
공식 계정과 마찬가지로 기업 계정 API를 호출하는 첫 번째 단계는 먼저 액세스 티켓 AccessToken을 받으세요. 이 티켓은 전역적이며 특정한 적시성 및 빈도 제어 기능을 갖고 있으므로 적절하게 캐시되어야 하며 호출할 때마다 새로 고칠 수 없습니다.
기업 계정이 접속 티켓을 얻기 위한 주요 논리 코드는 다음과 같습니다. 가장 중요한 것은 관리자의 Secret 값을 사용하여 해당 비밀번호를 얻어서 어떤 조직 구조를 관리하고 있는지 알 수 있다는 것입니다. .
/// <summary> /// 获取每次操作微信API的Token访问令牌 /// </summary> /// <param name="corpid">企业Id</param> /// <param name="corpsecret">管理组的凭证密钥</param> /// <returns></returns> public string GetAccessTokenNoCache(string corpid, string corpsecret) { var url = string.Format("http://www.php.cn/{0}&corpsecret={1}", corpid, corpsecret); HttpHelper helper = new HttpHelper(); string result = helper.GetHtml(url); string regex = "\"access_token\":\"(?<token>.*?)\""; string token = CRegex.GetText(result, regex, "token"); return token; }
WeChat 기업 계정에 대한 설명은 다음과 같습니다.
기업 애플리케이션에서 기업 계정을 호출하는 경우 인터페이스, 기업 계정의 백엔드는 이 액세스의 AccessToken을 기반으로 해당 관리 그룹의 액세스 및 관리 권한의 적법성을 검증하여 해당 결과를 반환합니다.
참고: 관리 그룹의 권한은 충분하다면 신중하게 구성해야 합니다. 과도한 권한은 권한의 개수를 증가시키며, 오용 가능성 및 정보 보안 위험을 초래합니다.
AccessToken은 기업 계정의 전역적으로 고유한 티켓입니다. AccessToken은 인터페이스를 호출할 때 운반되어야 합니다. AccessToken은 CorpID 및 Secret과 교환되어야 합니다. 다른 비밀은 다른 AccessToken을 반환합니다. 일반적인 상황에서 AccessToken은 7200초 동안 유효합니다. 유효 기간 내에 반복 획득하면 동일한 결과가 반환되며 자동으로 갱신됩니다. access_token을 얻기 위한 API 호출 횟수는 매우 제한되어 있으므로 기업에서는 access_token을 전역적으로 저장하고 업데이트하는 것이 좋습니다. access_token을 자주 새로 고치면 API 호출이 제한되어 비즈니스에 영향을 미칩니다.
첫 번째 섹션의 액세스 티켓을 사용하여 API를 사용하여 다음과 같은 기능을 포함한 많은 작업을 수행할 수 있습니다. 조직 구조의 획득, 생성, 삭제 등을 의미합니다.
창작부의 공식 인터페이스 정의는 다음과 같습니다.
请求说明
Https请求方式: POST
http://www.php.cn/
请求包结构体为:
{ "name": "邮箱产品组", "parentid": "1" }
参数说明
参数 | 必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
name | 是 | 部门名称。长度限制为1~64个字符 |
parentid | 是 | 父亲部门id。根部门id为1 |
返回结果
{ "errcode": 0, "errmsg": "created", "id": 2 }
根据上面的一些类似的接口定义说明,我们先来定义下组织机构部门数据的维护接口,然后在逐步实现和调用。
#region 部门管理 /// <summary> /// 创建部门。 /// 管理员须拥有“操作通讯录”的接口权限,以及父部门的管理权限。 /// </summary> CorpDeptCreateJson CreateDept(string accessToken, string name, string parentId); /// <summary> /// 更新部门。 /// 管理员须拥有“操作通讯录”的接口权限,以及该部门的管理权限。 /// </summary> CommonResult DeleteDept(string accessToken, int id); /// <summary> /// 删除部门. /// 管理员须拥有“操作通讯录”的接口权限,以及该部门的管理权限。 /// </summary> CorpDeptListJson ListDept(string accessToken); /// <summary> /// 获取部门列表. /// 管理员须拥有’获取部门列表’的接口权限,以及对部门的查看权限。 /// </summary> CommonResult UpdateDept(string accessToken, int id, string name); #endregion
如创建部门的接口实现如下所示,主要就是构建URL和POST的数据包,然后统一调用并获取返回数据,转换为具体的Json对象实体即可。其他接口的实现方式类似,不在赘述。
/// <summary> /// 创建部门。 /// 管理员须拥有“操作通讯录”的接口权限,以及父部门的管理权限。 /// </summary> public CorpDeptCreateJson CreateDept(string accessToken, string name, string parentId) { string urlFormat = "http://www.php.cn/{0}"; var data = new { name = name, parentId = parentId }; var url = string.Format(urlFormat, accessToken); var postData = data.ToJson(); CorpDeptCreateJson result = CorpJsonHelper<CorpDeptCreateJson>.ConvertJson(url, postData); return result; }
CorpDeptCreateJson 对象实体类的定义如下所示,我们主要是根据返回结果进行定义的。
/// <summary> /// 创建部门的返回结果 /// </summary> public class CorpDeptCreateJson : BaseJsonResult { /// <summary> /// 返回的错误消息 /// </summary> public CorpReturnCode errcode { get; set; } /// <summary> /// 对返回码的文本描述内容 /// </summary> public string errmsg { get; set; } /// <summary> /// 创建的部门id。 /// </summary> public int id { get; set; } }
上面小节介绍了如何封装部门管理的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); } } }
/// <summary> /// 获取部门列表 /// </summary> 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); } }
更多C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理 相关文章请关注PHP中文网!