>  기사  >  위챗 애플릿  >  C# WeChat 포털 개발 및 응용부서 주소록 관리 및 WeChat 기업 계정 개발

C# WeChat 포털 개발 및 응용부서 주소록 관리 및 WeChat 기업 계정 개발

高洛峰
高洛峰원래의
2017-02-18 09:28:472135검색

이전 기사에서는 Enterprise Account에 대한 몇 가지 기본 정보를 제공하고 Enterprise Account 서버와의 통신 브리지를 달성하기 위해 Enterprise Account의 콜백 방법을 구성하는 방법을 소개했습니다. 이 기사에서는 주로 기업 계정 개발 작업을 소개하고, WeChat 기업 계정 주소록 관리 및 개발 기능을 소개하며, 조직 내 부서 정보를 획득하고 관리하는 방법을 소개합니다.

1. 기업 조직 생성 및 구성

먼저 기업 계정의 관리 배경에서 조직을 생성하고 그 안에 일부 부서 및 인사 목록을 생성하여 업무를 보다 쉽게 ​​수행할 수 있습니다. 개발 및 사용.

예를 들어, 아래 그림과 같이 광저우 아이치디의 루트 구조를 생성한 후 그 안에 일부 조직 구조를 생성합니다.

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

그런 다음 조직 구조 "Guangzhou Aiqidi"의 루트 노드에 관리자 권한을 추가하면 나중에 인터페이스에서 이 관리자의 권한 비밀 값을 사용할 수 있습니다. 개발전화가 왔습니다.

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

CorpID는 기업 계정의 ID입니다. 각 기업 계정에는 고유한 CorpID가 있습니다. Secret은 관리 그룹 자격 증명 키입니다.
시스템 관리자는 관리단말의 권한관리 기능을 통해 관리그룹을 생성하고 해당 관리그룹의 접근권한을 애플리케이션, 주소록, 인터페이스에 할당할 수 있습니다. 완료되면 관리 그룹은 고유한 비밀을 얻을 수 있습니다. 시스템 관리자는 권한 관리를 통해 모든 관리 그룹의 비밀을 볼 수 있으며, 다른 관리자는 설정의 개발자 자격 증명을 통해 이를 볼 수 있습니다.

내 기업 계정의 작성자와 "Guangzhou IQidi" 조직 구조의 관리자는 다릅니다. Secret은 관리 그룹 자격 증명 키이므로 관리자가 다른 조직 구조의 관리를 담당하는 경우 그 사람 또는 she 관리 비밀 값은 다를 수 있습니다. 인터페이스를 호출해야 하는 경우 아래 그림과 같이 자체 권한 수준에 속하는 Secret 값을 사용해야 합니다.

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

기업 계정의 생성자가 아닌 경우 내부에서 일부 권한 할당을 수정하지 못할 수도 있으며 볼 수만 있습니다.

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

2. API 액세스를 위한 전역 고유 티켓인 AccessToken 획득

공식 계정과 마찬가지로 기업 계정 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 호출이 제한되어 비즈니스에 영향을 미칩니다.

2. 주소록 관리에서 부서 정보 유지

첫 번째 섹션의 액세스 티켓을 사용하여 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; }
    }

 

 3、部门管理的API调用

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

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

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

        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)-微信企业号的通讯录管理开发之部门管理

 

 更多C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理 相关文章请关注PHP中文网!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.