L'article précédent fournit des informations de base sur le compte Enterprise et explique comment configurer la méthode de rappel du compte Enterprise pour établir un pont de communication avec le serveur du compte Enterprise. Cet article continue principalement à présenter le travail de développement du compte d'entreprise, présente la fonction de gestion et de développement du carnet d'adresses du compte d'entreprise WeChat et explique comment obtenir et gérer les informations sur les départements de l'organisation.
Tout d'abord, nous pouvons créer une organisation dans l'arrière-plan de gestion du compte d'entreprise, et y créer des départements et des listes de personnel pour faciliter notre développement et utilisation.
Par exemple, créez une structure racine de Guangzhou Aiqidi, puis créez-y des structures organisationnelles, comme le montre la figure ci-dessous.
Ajoutez ensuite une autorisation d'administrateur au nœud racine de la structure organisationnelle "Guangzhou Aiqidi". À l'avenir, vous pourrez utiliser l'autorisation Valeur secrète de cet administrateur dans l'interface. développement. Un appel a été lancé.
CorpID est l'identification du compte d'entreprise. Chaque compte d'entreprise a un CorpID unique. Le secret est la clé d'identification du groupe de gestion.
Les administrateurs système peuvent créer des groupes de gestion via la fonction de gestion des droits du terminal de gestion et attribuer aux groupes de gestion des droits d'accès aux applications, aux carnets d'adresses et aux interfaces. Une fois terminé, le groupe de gestion peut obtenir un secret unique. Les administrateurs système peuvent afficher les secrets de tous les groupes de gestion via la gestion des autorisations, et les autres administrateurs peuvent les afficher via les informations d'identification du développeur dans les paramètres.
Le créateur de mon compte d'entreprise et l'administrateur de la structure organisationnelle « Guangzhou IQidi » sont différents. Puisque Secret est la clé d'identification du groupe de gestion, si l'administrateur est responsable de la gestion de différentes structures organisationnelles, il ou elle La valeur du secret de gestion peut être différente. Si nous devons appeler l'interface, nous devons utiliser la valeur Secret appartenant à notre propre niveau d'autorisation, comme le montre la figure ci-dessous.
Si vous n'êtes pas le créateur du compte d'entreprise, vous ne pourrez peut-être pas modifier certaines attributions d'autorisations à l'intérieur, vous ne pourrez que les visualiser.
Comme le compte officiel, la première étape lorsque nous appelons l'API du compte d'entreprise est de obtenez-le d'abord le ticket d'accès AccessToken. Ce ticket est global et dispose d'un certain contrôle de rapidité et de fréquence, il doit donc être mis en cache de manière appropriée et ne peut pas être actualisé à chaque fois qu'il est appelé.
Le code logique principal du compte d'entreprise pour obtenir le ticket d'accès est le suivant. L'essentiel est d'utiliser la valeur Secret de l'administrateur pour obtenir le mot de passe correspondant, afin qu'il puisse savoir quelle structure organisationnelle il gère. .
/// <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; }
La description du compte d'entreprise WeChat est la suivante :
Lorsque l'application d'entreprise appelle le interface de compte d'entreprise, l'arrière-plan du compte d'entreprise vérifie la légalité de l'accès et les autorisations de gestion du groupe de gestion correspondant en fonction de l'AccessToken de cet accès pour renvoyer les résultats correspondants.
Remarque : Vous devez configurer soigneusement les autorisations du groupe de gestion, dans la mesure où cela suffit. Des autorisations excessives augmenteront le nombre d’autorisations. Possibilité d’utilisation abusive et risques de sécurité des informations.
AccessToken est le ticket unique au monde du compte d'entreprise qui doit être transporté lors de l'appel de l'interface. AccessToken doit être échangé contre CorpID et Secret Différents secrets renverront différents AccessTokens. Dans des circonstances normales, AccessToken est valide pendant 7 200 secondes. Les acquisitions répétées pendant la période de validité renverront les mêmes résultats et seront automatiquement renouvelées. Étant donné que le nombre d'appels API pour obtenir access_token est très limité, il est recommandé aux entreprises de stocker et de mettre à jour access_token à l'échelle mondiale. L'actualisation fréquente de access_token limitera les appels API et affectera leur propre activité.
Avec les tickets d'accès dans la première section, nous pouvons utiliser l'API pour faire beaucoup de choses, y compris des fonctions telles comme l'obtention, la création, la suppression, etc. de la structure organisationnelle.
La définition officielle de l'interface du département création est la suivante.
请求说明
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中文网!