钉钉企业员工信息获取笔记
学习笔记作者:admin日期:2025-05-26点击:25
摘要:介绍如何通过钉钉开放API获取企业下所有员工的详细信息,包括用户ID、姓名、手机号、岗位编号等。
钉钉企业员工信息获取笔记
背景与需求
本文档介绍了如何通过钉钉开放平台API获取企业下所有员工的详细信息。主要涉及以下几个步骤:
- 获取accessToken。
- 获取部门列表。
- 获取部门下的员工列表。
- 获取员工详细信息。
实现方案
以下是实现此功能的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需妥善保管,避免泄露。
- 对于大规模数据,建议添加分页处理以提升性能。