钉钉企业员工信息获取笔记

学习笔记作者:admin日期:2025-05-26点击:25

摘要:介绍如何通过钉钉开放API获取企业下所有员工的详细信息,包括用户ID、姓名、手机号、岗位编号等。

钉钉企业员工信息获取笔记

背景与需求

      本文档介绍了如何通过钉钉开放平台API获取企业下所有员工的详细信息。主要涉及以下几个步骤:

  1. 获取accessToken。
  2. 获取部门列表。
  3. 获取部门下的员工列表。
  4. 获取员工详细信息。

实现方案

      以下是实现此功能的Python代码示例:


import requests
import json

def getUserInfos(appKey, appSecret):
    # Step 1: 获取 accessToken
    def get_access_token(appKey, appSecret):
        url = "https://api.dingtalk.com/v1.0/oauth2/accessToken"
        headers = {"Content-Type": "application/json"}
        payload = {
            "appKey": appKey,
            "appSecret": appSecret
        }
        response = requests.post(url, headers=headers, data=json.dumps(payload))
        if response.status_code == 200:
            result = response.json()
            return result.get("accessToken")
        else:
            raise Exception(f"获取 accessToken 失败: {response.text}")

    # Step 2: 获取部门列表
    def get_department_list(access_token):
        url = f"https://oapi.dingtalk.com/department/list?access_token={access_token}"
        response = requests.get(url)
        if response.status_code == 200:
            result = response.json()
            if result.get("errcode") == 0:
                return [dept["id"] for dept in result.get("department", [])]
            else:
                raise Exception(f"获取部门列表失败: {result.get('errmsg')}"))
        else:
            raise Exception(f"获取部门列表失败: {response.text}")

    # Step 3: 获取部门下的员工列表
    def get_user_list_by_department(access_token, department_id):
        url = f"https://oapi.dingtalk.com/user/simplelist?access_token={access_token}&department_id={department_id}"
        response = requests.get(url)
        if response.status_code == 200:
            result = response.json()
            if result.get("errcode") == 0:
                return result.get("userlist", [])
            else:
                raise Exception(f"获取部门员工列表失败: {result.get('errmsg')}"))
        else:
            raise Exception(f"获取部门员工列表失败: {response.text}")

    # Step 4: 获取员工详细信息
    def get_user_detail(access_token, userid):
        url = f"https://oapi.dingtalk.com/user/get?access_token={access_token}&userid={userid}"
        response = requests.get(url)
        if response.status_code == 200:
            result = response.json()
            if result.get("errcode") == 0:
                return {
                    "userid": result.get("userid"),
                    "unionId": result.get("unionid"),
                    "name": result.get("name"),
                    "mobile": result.get("mobile"),
                    "manager_userid": result.get("manager_userid"),
                    "job_number": result.get("jobnumber")
                }
            else:
                raise Exception(f"获取员工详细信息失败: {result.get('errmsg')}"))
        else:
            raise Exception(f"获取员工详细信息失败: {response.text}")

    try:
        # 获取 accessToken
        access_token = get_access_token(appKey, appSecret)

        # 获取所有部门 ID
        department_ids = get_department_list(access_token)

        # 存储所有员工信息
        all_user_infos = []

        # 遍历每个部门,获取员工列表并获取详细信息
        for department_id in department_ids:
            user_list = get_user_list_by_department(access_token, department_id)
            for user in user_list:
                user_detail = get_user_detail(access_token, user["userid"])
                all_user_infos.append(user_detail)

        return all_user_infos

    except Exception as e:
        print(f"发生错误: {e}")
        return []

# 示例调用
if __name__ == "__main__":
    appKey = "dingeqqpkv3xxxxxx"
    appSecret = "GT-lsu-taDAxxxsTsxxxx"
    user_infos = getUserInfos(appKey, appSecret)
    print(json.dumps(user_infos, ensure_ascii=False, indent=4))

注意事项

  • 确保应用已获得必要的API权限。
  • 敏感信息如appKey和appSecret需妥善保管,避免泄露。
  • 对于大规模数据,建议添加分页处理以提升性能。

上一篇      下一篇