Coder Social home page Coder Social logo

go-wecom's Introduction

go-wecom

GoDoc Build Status Coverage Status Go Report Card

Wechat Work/Wecom/企业微信 Golang SDK

特性

  • 支持自建应用开发 - AccessToken
  • 支持第三方应用开发 - AuthCorpAccessToken
  • 支持缓存所有带时效的信息 - AccessToken, JsTicket, AgentTicket, SuiteToken, AuthCorpAccessToken, PreAuthCode, ProviderAccessToken
    • 缓存支持自定义存储 - 默认内存存储
  • 支持从自定义的存储获取 密钥 信息 - SuiteTicket, PermanentCode
  • 支持机器人 webhook
  • 没有内部状态和 goroutine
  • 自动尝试提前获取相应的 Token 和 Ticket - 有效期的 80%
  • 实现逻辑清晰 - 没有实现的接口可直接调用
  • wwcrypt - 企业微信回调加密实现 - 作用同 sbzhu/weworkapi_golang
  • 数据模型大多基于官方接口文档生成 - 包含注释说明
  • 包含 API+Event Mock 测试
  • 支持拉取会话存档
package wecom_test

import (
  "fmt"
  "os"

  "github.com/wenerme/go-req"
  "github.com/wenerme/go-wecom/wecom"
)

func ExampleNewClient() {
	// token store - 默认内存 Map - 可以使用数据库实现
	store := &wecom.SyncMapStore{}
	// 加载缓存 - 复用之前的 Token
	if bytes, err := os.ReadFile("wecom-cache.json"); err == nil {
		_ = store.Restore(bytes)
	}
	// 当 Token 变化时生成缓存文件
	store.OnChange = func(s *wecom.SyncMapStore) {
		_ = os.WriteFile("wecom-cache.json", s.Dump(), 0o600)
	}

	client := wecom.NewClient(wecom.Conf{
		CorpID:     "",
		AgentID:    0,
		CorpSecret: "",
		// 不配置默认使用 内存缓存
		TokenProvider: &wecom.TokenCache{
			Store: store,
		},
	})

	// 访问接口会自动获取或使用当前缓存
	token, err := client.AccessToken()
	if err != nil {
		panic(err)
	}
	fmt.Println("Token", token)
	ticket, err := client.JsAPITicket()
	if err != nil {
		panic(err)
	}
	fmt.Println("Ticket", ticket)

	// 访问没有实现的接口
	dto := wecom.IPListResponse{}
	err = client.Request.With(req.Request{
		URL:     "/cgi-bin/get_api_domain_ip",
		Options: []interface{}{
			// 如果不需要 access_token
			// wecom.WithoutAccessToken,
		},
	}).Fetch(&dto)
	if err != nil {
		panic(err)
	}
	fmt.Println("response", dto)
}

Webhook 开发

wecom.WebhookSend(&wecom.WebhookSendRequest{
  Key:     "KEY",
  Content: wecom.SendTextContent{Content: "Hello"},
  // debug for test only
  Request: req.Request{
    Options: []interface{}{req.DebugHook(&req.DebugOptions{
      Body: true,
    })},
  },
})

第三方应用开发配置

  • 根据使用的接口不同,用到的信息也会不同
client := wecom.NewClient(wecom.Conf{
  CorpID:   "",
  ProviderSecret: "",
  AuthCorpID:   "",
  AuthCorpPermanentCode: "",
  SuiteID:      "",
  SuiteSecret:  "",
  SuiteTicket:  "",
})

接口支持情况

  • 通讯录管理
  • 客户联系
  • 微信客服
  • 身份验证
  • 应用管理
  • 消息推送
  • 素材管理
  • OA
  • [-] 效率工具
  • 企业支付
  • 会话内容存档
  • 企业互联
  • 电子发票
应用授权 - 100%
  • 获取第三方应用凭证
  • 获取预授权码
  • 设置授权配置
  • 获取企业永久授权码
  • 获取企业永久授权码
  • 获取企业授权信息
  • 获取企业凭证
  • 获取应用的管理员列表
  • 回调接口
通讯录管理 - 100%
  • 成员管理
    • 创建成员
    • 读取成员
    • 更新成员
    • 删除成员
    • 批量删除成员
    • 获取部门成员
    • 获取部门成员详情
    • userid与openid互换
    • 二次验证
    • 邀请成员
  • 部门管理
    • 创建部门
    • 更新部门
    • 删除部门
    • 获取部门列表
  • 标签管理
    • 创建标签
    • 更新标签名字
    • 删除标签
    • 获取标签成员
    • 增加标签成员
    • 删除标签成员
    • 获取标签列表
  • 异步批量接口
    • 增量更新成员
    • 全量覆盖成员
    • 全量覆盖部门
    • 获取异步任务结果
  • 通讯录回调通知
    • 成员变更通知
    • 部门变更通知
    • 标签变更通知
    • 异步任务完成通知
客户联系 - 100%
  • 成员对外信息
  • 客户管理
    • 获取客户列表
    • 获取客户详情
    • 批量获取客户详情
    • 修改客户备注信息
  • 客户标签管理
    • 管理企业标签
    • 编辑客户企业标签
  • 客户分配
    • 获取离职成员列表
    • 分配在职或离职成员的客户
    • 查询客户接替结果
    • 分配离职成员的客户群
  • 变更回调通知
    • 添加企业客户事件
    • 编辑企业客户事件
    • 外部联系人免验证添加成员事件
    • 删除企业客户事件
    • 删除跟进成员事件
    • 客户接替失败事件
    • 客户群变更事件
身份验证 - 100%
  • 获取访问用户身份
推广二维码
  • 获取注册码
  • 查询注册状态
  • 设置授权应用可见范围
  • 设置通讯录同步完成
  • 注册完成回调事件
应用管理 - 100%
  • 获取应用
  • 设置应用
  • 自定义菜单
    • 创建菜单
    • 获取菜单
    • 删除菜单
消息推送 - 100%
  • 发送应用消息
  • 接收消息
  • 发送消息到群聊会话
    • 创建群聊会话
    • 修改群聊会话
    • 获取群聊会话
    • 应用推送消息

消息类型

  • 文本消息
  • 图片消息
  • 语音消息
  • 视频消息
  • 文件消息
  • 文本卡片消息
  • 图文消息
  • 图文消息(mpnews)
  • markdown消息
  • 任务卡片消息
素材管理
  • 上传临时素材
  • 上传永久图片
  • 获取临时素材
  • 获取高清语音素材
OA
  • 打卡
    • 获取企业所有打卡规则
    • 获取员工打卡规则
    • 获取打卡记录数据
    • 获取打卡日报数据
    • 获取打卡月报数据
    • 获取打卡人员排班信息
    • 为打卡人员排班
    • 录入打卡人员人脸信息
  • 审批
    • 获取审批模板详情
    • 提交审批申请
    • 审批申请状态变化回调通知
    • 批量获取审批单号
    • 获取审批申请详情
    • 获取企业假期管理配置
    • 修改成员假期余额
  • 汇报
    • 批量获取汇报记录单号
    • 获取汇报记录详情
    • 获取汇报统计数据
  • 自建应用
    • 审批流程引擎
  • 会议室
    • 会议室管理
    • 会议室预定管理
  • 紧急通知应用
    • 发起语音电话
    • 获取接听状态
效率工具 - 20%
  • 日程
    • 日历接口
    • 日程接口
    • 回调事件
  • 会议
    • 创建预约会议
    • 修改预约会议
    • 取消预约会议
    • 获取成员会议ID列表
    • 获取会议详情
  • 直播
  • 微盘
    • 空间管理
    • 空间权限
    • 文件管理
    • 文件权限
  • 公费电话
    • 获取公费电话拨打记录
企业支付
  • 企业红包
  • 向员工付款
  • 向员工收款
  • 对外收款
  • 签名算法
企业互联
  • 获取应用共享信息
  • 获取下级企业的access_token
  • 获取下级企业的小程序session
会话内容存档 - 100%
  • 获取会话内容存档开启成员列表
  • 获取会话同意情况
  • 客户同意进行聊天内容存档事件回调
  • 获取会话内容存档内部群信息
电子发票
  • 查询电子发票
  • 更新发票状态
  • 批量更新发票状态
  • 批量查询电子发票

会话存档

Note

  1. 会话存档保存 5
  2. 从 Sequence+1 拉取,不包含 Sequence
  3. limit 最大 1000
  4. 图片 jpg, 音频 amr, 视频 mp4
  5. MediaData 的 MD5 可能匹配不上,可以一直重试
  6. MediaData 单次最多返回 512K
  • libWeWorkFinanceSdk_C.so
    • 依赖 GLIBC
    • 使用了 libcurl
      • https_proxy 能生效
  • 实际请求 qyapi.weixin.qq.com
  • RSA2048 key
    • openssl genrsa -out private.pem 2048
    • openssl rsa -in private.pem -pubout -out public.pem
  • wwfinance-libs 内嵌了 libWeWorkFinanceSdk_C.so,可以解压出来
  • wwfinance-poller 提供基础的验证工具
    • 拉取所有数据到 sqlite wwfinance.db

命令行工具

make bin

# 配置
cp .env.example .env
# extract lib
./bin/wwfinance-libs

LD_LIBRARY_PATH=/tmp/wwf/libs ./bin/wwfinance-poller

# Docker 运行
docker run --rm -it -v $PWD/.env:/app/.env -v $PWD/data:/app/data wener/go-wecom

# 开发测试
LD_LIBRARY_PATH=$PWD/WeWorkFinanceSDK/libs go run ./cmd/wwfinance-poller/main.go

代码调用

package main

import (
	"fmt"
	dotenv "github.com/joho/godotenv"
	"github.com/wenerme/go-wecom/WeWorkFinanceSDK"
)

func main() {
	_ = dotenv.Load()

	client, err := WeWorkFinanceSDK.NewClientFromEnv()
	if err != nil {
		panic(err)
	}

	data, err := client.GetChatData(WeWorkFinanceSDK.GetChatDataOptions{
		Limit:   10,
		Timeout: 5,
	})

	if err != nil {
		panic(err)
	}
	for _, v := range data {
		fmt.Println(v.Message)
	}
}
  • 支持代理
    • https_proxy=127.0.0.1:1080

Reference

go-wecom's People

Contributors

eryajf avatar wenerme avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

go-wecom's Issues

关于Client的复用问题

在Saas系统中,可能会同时对多个AuthCorpId企业进行服务,目前的设计没办法复用Client,AuthCorpId和AuthCorpPermanentCode应当改成动态或者可入参的方式呈现

建议构建releases维护依赖库版本

使用release维护go依赖库版本的好处不言而喻,建议项目在适当情况下,通过tag版本进行维护,可以添加Actions自动给项目构建release以及说明,只需要操心发布就OK了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.