最近搜索

企业微信 企微 开发

浏览:4
管理员 2026-04-29 17:40


1 获取token

import requests

# !!!请替换为你的真实凭证 !!!
CORP_ID = "ww0f823a7d70454e5d"  # 你的企业ID 
CORP_SECRET = "8fXV8sQM58RittRgfIkFG1wuEONc-jxW0GtID9xL7aU"  # 具有“客户联系”权限的应用Secret

def get_wecom_token(corp_id, corp_secret):
    """
    获取企业微信 access_token
    """
    url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
    params = {
        "corpid": corp_id,
        "corpsecret": corp_secret
    }


    try:
        resp = requests.get(url, params=params).json()
        if resp.get("errcode") == 0:
            print(f"✅ Token 获取成功 (有效期 {resp['expires_in']} 秒)")
            print(f"access_token: {resp['access_token']}")
            return resp['access_token']
        else:
            print(f"❌ 获取失败 [{resp.get('errcode')}]: {resp.get('errmsg')}")
            return None
    except Exception as e:
        print(f"🚨 请求异常: {e}")
        return None


if __name__ == "__main__":
    token = get_wecom_token(CORP_ID, CORP_SECRET)




获取群列表

import requests
import json
import logging
import time

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# 你的固定 Token
FIXED_TOKEN = "GEqSXVi54nTynmaJ4q5VC09aOEbhppNj0_-8-1Ce0J_tQrfoGmJdE47xJXw9cKHbxdKYrRVy_6pnjRwCcGXUTIJtxi6ppHjGFV2pu9CV1N8rrCCXthQtE_EOgnoQrGeb0-9ujo88OklHC0JuYj0aXCaIa5NIeHthABbtpuTBDGAlFxU2E7cbf9V8vHuz0mqCuVl9kDHj1sik8Wu0DdyEmg"


class WeComAPI:
    def __init__(self, fixed_token=FIXED_TOKEN):
        """
        使用固定 Token 初始化
        :param fixed_token: 你的固定 Token
        """
        self.fixed_token = fixed_token
        self.base_url = "https://qyapi.weixin.qq.com/cgi-bin"  # 修正基础URL
        logger.info("✅ 使用固定 Token 初始化成功")

    def get_external_groupchat_list(self, owner_userid_list=None, limit=100, cursor=""):
        """
        获取客户群列表
        :param owner_userid_list: 群主ID列表,例如 ["userid1", "userid2"]
        :param limit: 分页大小,建议 100
        :param cursor: 分页游标,首次调用传空字符串
        :return: 群聊列表和下一页游标
        """
        url = f"{self.base_url}/externalcontact/groupchat/list"
        params = {"access_token": self.fixed_token}  # 直接使用固定 Token

        # 构建请求体
        request_body = {
            "limit": limit,
            "cursor": cursor,
            "status_filter": 0
        }

        # 如果有指定群主,则添加 owner_filter
        if owner_userid_list:
            request_body["owner_filter"] = {
                "userid_list": owner_userid_list
            }

        try:
            resp = requests.post(url, params=params, json=request_body, timeout=10).json()
            logger.info(f"调用 groupchat/list 返回: {json.dumps(resp, ensure_ascii=False)}")

            if resp.get("errcode") == 0:
                group_chat_list = resp.get("group_chat_list", [])
                next_cursor = resp.get("next_cursor", "")
                logger.info(f"✅ 成功获取到 {len(group_chat_list)} 个客户群,下一页游标: '{next_cursor}'")
                return group_chat_list, next_cursor
            else:
                logger.error(f"❌ 接口调用失败 [{resp.get('errcode')}]: {resp.get('errmsg')}")
                return None, None
        except Exception as e:
            logger.error(f"🚨 请求异常: {e}")
            return None, None

    def send_to_external_group(self, chat_id, content):
        """
        向指定的外部群(客户群)发送文本消息
        注意:这是"代办任务"模式,需群主在手机端确认后才会真正发送
        """
        url = f"{self.base_url}/externalcontact/groupchat/send"
        params = {"access_token": self.fixed_token}
        request_body = {
            "chat_id": chat_id,
            "msgtype": "text",
            "text": {"content": content}
        }

        try:
            # 1. 先打印请求信息(用于调试)
            logger.info(f"请求URL: {url}")
            logger.info(f"请求参数: {params}")
            logger.info(f"请求体: {json.dumps(request_body, ensure_ascii=False)}")

            # 2. 发送请求,捕获原始响应
            response = requests.post(url, params=params, json=request_body, timeout=10)
            raw_text = response.text
            logger.info(f"接口返回原始文本: {raw_text}")  # 关键调试信息

            # 3. 尝试解析JSON
            try:
                resp = response.json()
            except json.JSONDecodeError as e:
                logger.error(f"JSON解析失败: {e}")
                # 如果不是空响应,打印前200个字符
                if raw_text:
                    logger.error(f"原始响应内容: {raw_text[:200]}")
                return None

            # 4. 处理解析后的响应
            if resp.get("errcode") == 0:
                msgid = resp.get("msgid")
                logger.info(f"✅ 消息发送任务创建成功,msgid: {msgid}")
                logger.info("⚠️  请提醒群主在企业微信「群发助手」中确认发送")
                return msgid
            else:
                logger.error(f"❌ 发送失败 [{resp.get('errcode')}]: {resp.get('errmsg')}")
                return None

        except requests.exceptions.Timeout:
            logger.error("🚨 请求超时,请检查网络或增加超时时间")
            return None
        except requests.exceptions.ConnectionError:
            logger.error("🚨 网络连接错误,请检查网络设置")
            return None
        except Exception as e:
            logger.error(f"🚨 请求发送接口异常: {e}")
            return None



# ====================== 使用示例 ======================
if __name__ == "__main__":
    # 初始化客户端(使用固定Token)
    client = WeComAPI()

    # 1. 获取客户群列表
    TEST_OWNER_USERID = ["HuJing"]  # 测试用的群主ID
    logger.info("正在获取客户群列表(第一页)...")
    group_list, next_cursor = client.get_external_groupchat_list(
        owner_userid_list=TEST_OWNER_USERID,
        limit=100,
        cursor=""
    )

    if group_list is not None:
        # 打印获取到的群聊信息
        for idx, group in enumerate(group_list, 1):
            print(f"{idx}. chat_id: {group.get('chat_id')}, status: {group.get('status')}")

        # 2. 向第一个群发送消息
        if group_list:
            test_chat_id = group_list[0].get('chat_id')
            order_content = "【酒店新订单】\n订单号:201111111111\n酒店:XX温泉酒店\n房型:xxxxx房\n入住时间:2026-55-55"

            print(f"\n正在向群 {test_chat_id} 发送消息...")
            msgid = client.send_to_external_group(test_chat_id, order_content)

            if msgid:
                print(f"✅ 消息任务已创建,任务ID: {msgid}")
                print("⚠️  重要:请通知群主在企业微信手机端的「群发助手」中确认发送")
            else:
                print("❌ 消息发送失败")
    else:
        logger.error("获取客户群列表失败,请检查配置。")




客户与上下游---客户联系---客户---企业全部客户数

可以看到。所有的外部联系人。点--已服务的外部联系人  可以看到列表。



客户与上下游---客户联系---客户(客户 --成员可用企业微信添加客户的微信,并在这里与他们联系,企业可统一管理这些客户。)

这个地方有个api 小字,点开 可以配置我的应用。(可调用接口的应用)

配置到这一步,我们可以获取 微信群了。  

INFO:__main__:调用 groupchat/list 返回: {"errcode": 0, "errmsg": "ok", "group_chat_list": [{"chat_id": "wrG3K7QAAAlWZybyF3ZZ47lqPrJI0PLA", "status": 0}]}

bf47813f785b30b7e3ac2b4e7577e4b5.png





企业微信不支持 发送信息到外部群


3298b96294eaf04c47d4f7bf5efebec7.png









联系站长

站长微信:xiaomao0055

站长QQ:14496453