前の記事では、エンタープライズ アカウントに関するいくつかの基本情報を提供し、エンタープライズ アカウント サーバーとの通信のブリッジを実現するためにエンタープライズ アカウントのコールバック メソッドを構成する方法を紹介しました。この記事では主にエンタープライズ アカウントの開発作業を引き続き紹介し、WeChat エンタープライズ アカウントのアドレス帳管理および開発機能を紹介し、組織内の部門情報を取得および管理する方法を紹介します。
まず第一に、エンタープライズアカウントの管理背景に組織を作成し、開発と使用を容易にするためにその中にいくつかの部門と人員リストを作成できます。
たとえば、以下の図に示すように、Guangzhou Aiqidi のルート構造を作成し、その中にいくつかの組織構造を作成します。
その後、組織構造「Guangzhou Aiqidi」のルート ノードに管理者権限を追加します。後で、インターフェイスを開発するときに、この管理者の権限 Secret 値を使用して呼び出しを行うことができます。
CorpID はエンタープライズ アカウントの ID であり、Secret は管理グループの資格情報キーです。
システム管理者は、管理側の権限管理機能を通じて管理グループを作成し、アプリケーション、アドレス帳、インターフェイスへの管理グループのアクセス権を割り当てることができます。完了すると、管理グループは一意のシークレットを取得できます。システム管理者は、アクセス許可管理を通じてすべての管理グループのシークレットを表示でき、他の管理者は設定の開発者の資格情報を通じてシークレットを表示できます。
私のエンタープライズアカウントの作成者と「Guangzhou Iqidi」組織構造の管理者は異なります。Secret は管理グループの資格情報キーであるため、管理者が別の組織の管理を担当している場合は、自分の管理シークレット値が必要になります。もしかしたら違うのかもしれない。インターフェイスを呼び出す必要がある場合は、次の図に示すように、独自のアクセス許可レベルに属する Secret 値を使用する必要があります。
エンタープライズ アカウントの作成者ではない場合、内部の一部の権限割り当ては変更できない場合があり、表示のみが可能です。
公式アカウントと同様に、エンタープライズ アカウント API を呼び出すときの最初のステップは、アクセス用の AccessToken を取得することです。このチケットはグローバルであり、一定の適時性と頻度の制御があるため、適切にキャッシュする必要があり、呼び出されるたびに更新することはできません。
エンタープライズ アカウントがアクセス チケットを取得するための主なロジック コードは次のとおりです。主なことは、管理者のシークレット値を使用して、対応するパスワードを取得し、どの組織構造を管理しているかを知ることです。
/// <summary> /// 获取每次操作微信API的Token访问令牌 /// </summary> /// <param>企业Id /// <param>管理组的凭证密钥 /// <returns></returns> public string GetAccessTokenNoCache(string corpid, string corpsecret) { var url = string.Format("//m.sbmmt.com/{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; }</token>
WeChat エンタープライズ アカウントの説明は次のとおりです:
エンタープライズ アプリケーションがエンタープライズ アカウント インターフェイスを呼び出すと、エンタープライズ アカウントのバックグラウンドは、アクセスの合法性とアクセス トークンに基づいて検証します。対応する結果を返すための、対応する管理グループの管理権限。
注: 過度の権限は、誤操作や情報セキュリティのリスクを高める可能性があるため、慎重に設定する必要があります。
AccessToken は、インターフェースを呼び出すときに、エンタープライズ アカウントのグローバルに一意なチケットです。 AccessToken は CorpID と交換する必要があり、Secret が異なれば異なる AccessToken が返されます。 通常の状況では、AccessToken は 7200 秒有効です。有効期間内に繰り返し取得すると同じ結果が返され、自動的に更新されます。 access_token を取得するための API 呼び出しの数は非常に限られているため、企業は access_token をグローバルに保存および更新すると API 呼び出しが制限され、自社のビジネスに影響を与えることをお勧めします。
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 |
返回结果
{ "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 = "//m.sbmmt.com/{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>
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); } }
更多WeChatポータルのC#開発とアドレス帳管理の部門管理、WeChatエンタープライズアカウントを利用した開発相关文章请关注PHP中文网!