首先我们可以在企业号的管理后台里面创建一个组织机构,里面创建一些部门和人员列表,方便我们开发和使用。
例如创建一个广州爱奇迪的根结构,然后在其中在创建一些组织机构,如下图所示。
////// 获取每次操作微信API的Token访问令牌 /// /// 企业Id /// 管理组的凭证密钥 ///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\":\"(? .*?)\""; 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调用受限,影响自身业务。
有了第一节里面的访问票据,我们就可以利用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 |
返回结果
{ "errcode": 0, "errmsg": "created", "id": 2 }
根据上面的一些类似的接口定义说明,我们先来定义下组织机构部门数据的维护接口,然后在逐步实现和调用。
#region 部门管理 ////// 创建部门。 /// 管理员须拥有“操作通讯录”的接口权限,以及父部门的管理权限。 /// CorpDeptCreateJson CreateDept(string accessToken, string name, string parentId); ////// 更新部门。 /// 管理员须拥有“操作通讯录”的接口权限,以及该部门的管理权限。 /// CommonResult DeleteDept(string accessToken, int id); ////// 删除部门. /// 管理员须拥有“操作通讯录”的接口权限,以及该部门的管理权限。 /// CorpDeptListJson ListDept(string accessToken); ////// 获取部门列表. /// 管理员须拥有’获取部门列表’的接口权限,以及对部门的查看权限。 /// CommonResult UpdateDept(string accessToken, int id, string name); #endregion
如创建部门的接口实现如下所示,主要就是构建URL和POST的数据包,然后统一调用并获取返回数据,转换为具体的Json对象实体即可。其他接口的实现方式类似,不在赘述。
////// 创建部门。 /// 管理员须拥有“操作通讯录”的接口权限,以及父部门的管理权限。 /// 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.ConvertJson(url, postData); return result; }
CorpDeptCreateJson 对象实体类的定义如下所示,我们主要是根据返回结果进行定义的。
////// 创建部门的返回结果 /// public class CorpDeptCreateJson : BaseJsonResult { ////// 返回的错误消息 /// public CorpReturnCode errcode { get; set; } ////// 对返回码的文本描述内容 /// public string errmsg { get; set; } ////// 创建的部门id。 /// 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); } } }
////// 获取部门列表 /// 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#开发微信门户及应用微信企业号的通讯录管理开发之部门管理相关文章请关注!