企业微信通讯录同步 - Python版

本文介绍如何利用Python结合企业微信API,针对公司的组织结构进行通讯录同步。当公司组织编码规则不符合企业微信部门ID定义时,采用企业微信自动生成ID的策略,通过自增并确保父级ID小于子级ID的方式实现同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 开发思路


  • 重点关注

基于企业微信API,结合公司组织人员的数据结构,有多种应对场景:

  1. 第一优先使用公司组织code 同步至企业微信,前提是公司组织编码规则,适用于企业微信API 关于部门id 的定义(32位整型,取值范围[1-4294967296]),
  2. 如不适用于上一条,则建议由企业微信自动生成,生成规则(自增,父级id 比子级id 小)

本文是基于第2条应用场景实现的案例

# coding: utf-8
import sys
import datetime
import requests
import json
from logUtils import Logger
import pypyodbc as pyodbc
import collections

lfn = ''
if sys.argv[0].find('/') > -1:
    lfn = sys.argv[0][0:sys.argv[0].rindex('/')] + '/logs/' + datetime.datetime.now().strftime('%Y-%m-%d') + '.log'
else:
    lfn = sys.argv[0][0:sys.argv[0].rindex('\\')] + '\\logs\\' + datetime.datetime.now().strftime('%Y-%m-%d') + '.log'
log = Logger(filename=lfn, when='D')


class HRDept(object):
    code = ''
    name = ''
    wechatid = ''
    parentwechatid = ''
    objectid = ''
    parentid = ''
    description = ''
    state = 0

    def __init__(self, code, name, wechatid, parentwechatid, objectid, parentid, description, state):
        self.code = code
        self.name = name
        self.wechatid = wechatid
        self.parentwechatid = parentwechatid
        self.objectid = objectid
        self.parentid = parentid
        self.description = description
        self.state = state


class HRUser(object):
    code = ''
    name = ''
    mobile = ''
    wechatid = ''
    parentid = ''
    title = ''
    gender = ''
    email = ''
    officephone = ''
    orgpath = ''
    servicestate = 0

    def __init__(self, code, name, mobile, wechatid, parentid, title, gender, email, officephone, orgpath, servicestate):
        self.code = code
        self.name = name
        self.mobile = mobile
        self.wechatid = wechatid
        self.parentid = parentid
        self.title = title
        self.gender = gender
        self.email = email
        self.officephone = officephone
        self.orgpath = orgpath
        self.servicestate = servicestate


class WXDept(object):
    id = ''
    name = ''
    parentid = 0
    order = 0
    name_path = ''
    id_path = ''

    def __init__(self, id, name, parentid, order, name_path, id_path):
        self.id = id
        self.name = name
        self.parentid = parentid
        self.order = order
        self.name = name
        self.id = id
        self.name_path = name_path
        self.id_path = id_path


class WXUser(object):
    userid = ''  # 成员UserID。对应管理端的帐号
    name = ''  # 成员名称,此字段从2019年12月30日起,对新创建第三方应用不再返回,2020年6月30日起,对所有历史第三方应用不再返回,后续第三方仅通讯录应用可获取,第三方页面需要通过通讯录展示组件来展示名字
    mobile = ''  # 手机号码,第三方仅通讯录应用可获取
    department = ''  # 成员所属部门id列表,仅返回该应用有查看权限的部门id
    order = ''  # 部门内的排序值,32位整数,默认为0。数量必须和department一致,数值越大排序越前面。
    position = ''  # 职务信息;第三方仅通讯录应用可获取
    gender = ''  # 性别。0表示未定义,1表示男性,2表示女性
    email = ''  # 邮箱,第三方仅通讯录应用可获取
    is_leader_in_dept = ''  # 表示在所在的部门内是否为上级;第三方仅通讯录应用可获取
    avatar = ''  # 头像url。第三方仅通讯录应用可获取
    thumb_avatar = ''  # 头像缩略图url。第三方仅通讯录应用可获取
    telephone = ''  # 座机。第三方仅通讯录应用可获取
    enable = ''  # ---成员启用状态。1表示启用的成员,0表示被禁用。服务商调用接口不会返回此字段
    alias = ''  # 别名;第三方仅通讯录应用可获取
    status = ''  # ---激活状态: 1=已激活,2=已禁用,4=未激活 已激活代表已激活企业微信或已关注微工作台(原企业号)。未激活代表既未激活企业微信又未关注微工作台(原企业号)。
    extattr = ''  # 扩展属性,第三方仅通讯录应用可获取
    qr_code = ''  # 员工个人二维码,扫描可添加为外部联系人;第三方仅通讯录应用可获取
    external_profile = ''  # 成员对外属性,字段详情见对外属性;第三方仅通讯录应用可获取
    external_position = ''  # 对外职务。 第三方仅通讯录应用可获取
    address = ''  # 地址
    hide_mobile = ''  # 是否隐藏手机号
    english_name = ''  # 英文名

    def __init__(self, userid, name, mobile, department, order, position, gender, email, is_leader_in_dept, avatar, thumb_avatar, telephone, enable, alias, status, extattr, qr_code, external_profile,
                 external_position, address, hide_mobile, english_name):
        self.userid = userid
        self.name = name
        self.mobile = mobile
        self.department = department
        self.order = order
        self.position = position
        self.gender = gender
        self.email = email
        self.is_leader_in_dept = is_leader_in_dept
        self.avatar = avatar
        self.thumb_avatar = thumb_avatar
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值