Skip to content

WeCom Advanced SKILL (wecom-advanced)

企业微信高级功能 SKILL:覆盖会话内容存档、企业支付(红包/付款/对外收款)、电子发票、紧急通知应用、汇报、会议室管理等多个跨域能力,共 40 个 API + 3 个回调事件。


1. 会话内容存档

1.1 概述

会话内容存档允许企业合规存储成员的聊天记录(需成员同意)。

权限要求:需要开通「会话内容存档」功能(企业付费功能)。

1.2 API

#接口方法Endpoint
A1获取存档开启成员列表POSTmsgaudit/get_permit_user_list
A2获取会话内容-使用 SDK 拉取(非 HTTP)
A3获取会话同意情况POSTmsgaudit/check_single_agree
A4获取内部群信息POSTmsgaudit/groupchat/get

1.3 关键说明

  • 使用 C/C++ SDK 拉取会话内容(非 HTTP API),需要部署到服务器
  • 聊天内容使用 RSA 加密,需要配置公钥/私钥
  • 回调事件:msgaudit_notify(有新会话产生)、sys_approval_change(客户同意存档)

2. 企业支付

2.1 企业红包

#接口方法Endpoint
P1发放企业红包POST微信支付接口
P2查询红包记录POST微信支付接口

2.2 向员工付款

#接口方法Endpoint
P3向员工付款POST微信支付接口
P4查询付款记录POST微信支付接口

2.3 对外收款

#接口方法Endpoint
P5收款商户号管理POSTexternalpay/getmerchant
P6获取对外收款记录POSTexternalpay/get_bill_list
P7获取收款项目商户单号POSTexternalpay/get_trade_no
P8获取资金流水POSTexternalpay/get_fund_flow

2.4 创建对外收款账户

#接口方法Endpoint
P9提交图片POST (multipart)externalpay/apply/upload_image
P10提交创建申请POSTexternalpay/apply/submit
P11查询申请状态POSTexternalpay/apply/query

签名算法:企业支付接口需要使用微信支付签名(MD5/HMAC-SHA256),与 JS-SDK 签名不同。


3. 电子发票

#接口方法Endpoint
I1查询电子发票POSTcard/invoice/reimburse/getinvoiceinfo
I2更新发票状态POSTcard/invoice/reimburse/updateinvoicestatus
I3批量更新发票状态POSTcard/invoice/reimburse/updatestatusbatch
I4批量查询电子发票POSTcard/invoice/reimburse/getinvoiceinfobatch

4. 紧急通知应用

#接口方法Endpoint
N1发起语音电话POSTpstncc/call
N2获取接听状态POSTpstncc/getstatus

5. 汇报

#接口方法Endpoint
R1批量获取汇报记录单号POSToa/journal/get_record_list
R2获取汇报记录详情POSToa/journal/get_record_detail
R3获取汇报统计数据POSToa/journal/get_stat_list

6. 会议室管理

#接口方法Endpoint
MR1会议室管理(增删改查)POSToa/meetingroom/*
MR2会议室预定管理POSToa/meetingroom/book/*

回调事件

事件说明
meetingroom_status_change会议室状态变更
meetingroom_book_change会议室预定变更

7. Code Templates

python
"""WeCom Advanced Features Client"""
from wecom_core import WeComClient


class AdvancedClient:
    def __init__(self, client: WeComClient):
        self.client = client

    # ── 会话内容存档 ──

    def get_permit_user_list(self, type_: int = 1) -> dict:
        """A1: 获取存档开启的成员列表"""
        return self.client.post("/msgaudit/get_permit_user_list", json={"type": type_})

    def check_single_agree(self, info: list[dict]) -> dict:
        """A3: 获取会话同意情况"""
        return self.client.post("/msgaudit/check_single_agree", json={"info": info})

    def get_groupchat(self, roomid: str) -> dict:
        """A4: 获取内部群信息"""
        return self.client.post("/msgaudit/groupchat/get", json={"roomid": roomid})

    # ── 对外收款 ──

    def get_bill_list(self, begin_time: int, end_time: int,
                      cursor: str = "", limit: int = 100) -> dict:
        """P6: 获取对外收款记录"""
        return self.client.post("/externalpay/get_bill_list", json={
            "begin_time": begin_time, "end_time": end_time,
            "cursor": cursor, "limit": limit,
        })

    # ── 电子发票 ──

    def get_invoice_info(self, card_id: str, encrypt_code: str) -> dict:
        """I1: 查询电子发票"""
        return self.client.post("/card/invoice/reimburse/getinvoiceinfo", json={
            "card_id": card_id, "encrypt_code": encrypt_code,
        })

    def update_invoice_status(self, card_id: str, encrypt_code: str,
                               reimburse_status: str) -> None:
        """I2: 更新发票状态"""
        self.client.post("/card/invoice/reimburse/updateinvoicestatus", json={
            "card_id": card_id, "encrypt_code": encrypt_code,
            "reimburse_status": reimburse_status,
        })

    # ── 汇报 ──

    def get_journal_list(self, starttime: int, endtime: int,
                         cursor: int = 0, limit: int = 100) -> dict:
        """R1: 批量获取汇报记录单号"""
        return self.client.post("/oa/journal/get_record_list", json={
            "starttime": starttime, "endtime": endtime,
            "cursor": cursor, "limit": limit,
        })

    def get_journal_detail(self, journaluuid: str) -> dict:
        """R2: 获取汇报记录详情"""
        return self.client.post("/oa/journal/get_record_detail", json={
            "journaluuid": journaluuid,
        })

7.1 Java 示例

java
public class WecomAdvancedService {
    private final WeComClient client;

    public WecomAdvancedService(WeComClient client) {
        this.client = client;
    }

    /**
     * 使用示例:调用 wecom-advanced 相关 API
     * 请参考本 SKILL 的 API 速查表选择具体接口
     */
    public JsonObject callApi(String path, JsonObject params) throws Exception {
        return client.post(path, params);
    }

    // 更多方法请参考上方 API 详细说明章节,每个接口对应一个方法
    // 关键注意事项请查阅「踩坑指南」章节
}

依赖 (Maven):

xml
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

7.2 PHP 示例

php
<?php
class WecomAdvancedService
{
    private WeComClient $client;

    public function __construct(WeComClient $client) { $this->client = $client; }

    /**
     * 使用示例:调用 wecom-advanced 相关 API
     * 请参考本 SKILL 的 API 速查表选择具体接口
     */
    public function callApi(string $path, array $params = []): array
    {
        return $this->client->post($path, $params);
    }

    // 更多方法请参考上方 API 详细说明章节
    // 关键注意事项请查阅「踩坑指南」章节
}

依赖 (Composer):

bash
composer require guzzlehttp/guzzle

8. Gotcha Guide

G1. 会话存档需要 C SDK

会话内容拉取不通过 HTTP API,需要使用企微提供的 C/C++ SDK 部署到服务器。

G2. 企业支付使用微信支付签名

企业红包和付款走微信支付体系,签名算法(MD5/HMAC-SHA256)与企业微信其他 API 不同。

G3. 发票 encrypt_code 加密

电子发票的 encrypt_code 是加密后的编码,需要先解密才能使用。

G4. 会话存档需要成员同意

只有成员同意存档后,才能拉取该成员的聊天记录。可通过 check_single_agree 检查同意状态。


9. References

doc_id 范围说明
15329-34444会话内容存档
11478-47984企业支付
11630-11974电子发票
16595-16655紧急通知
25844-44913汇报
22789-36019会议室

依赖 SKILLwecom-core

Released under the Apache 2.0 License.