corporation

package
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 16, 2023 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Overview

企业微信开发 SDK

See: https://work.weixin.qq.com/api/doc

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	WXServerUrl      = "https://qyapi.weixin.qq.com" // 微信 api 服务器地址
	UserAgent        = "cvblood/qywxapi"
	ErrorAccessToken = errors.New("access token error")
	ErrorSystemBusy  = errors.New("system busy")
)

Functions

func GetAccessToken

func GetAccessToken(app *App) (accessToken string, err error)

从 公众号实例 的 AccessToken 管理器 获取 access_token

如果没有 access_token 或者 已过期,那么刷新

func NoticeAccessTokenExpire

func NoticeAccessTokenExpire(app *App) (err error)

NoticeAccessTokenExpire 只需将本地存储的 access_token 删除,即完成了 access_token 已过期的 主动通知

retry 请求的时候,会发现本地没有 access_token ,从而触发refresh

Types

type AccessToken

type AccessToken struct {
	Cache                          cachego.Cache
	GetAccessTokenHandler          GetAccessTokenFunc
	NoticeAccessTokenExpireHandler NoticeAccessTokenExpireFunc
}

AccessToken 管理器 处理缓存 和 刷新 逻辑

type App

type App struct {
	Config      AppConfig
	AccessToken AccessToken
	Client      Client
	Server      Server
	Corporation *Corporation
}

应用

func (*App) SetAccessTokenCacheDriver

func (app *App) SetAccessTokenCacheDriver(driver cachego.Cache)

SetAccessTokenCacheDriver 设置 AccessToken 缓存器 默认为文件缓存:目录 os.TempDir()

驱动接口类型 为 cachego.Cache

func (*App) SetGetAccessTokenHandler

func (app *App) SetGetAccessTokenHandler(f GetAccessTokenFunc)

SetGetAccessTokenHandler 设置 AccessToken 获取方法。默认 从本地缓存获取(过期从微信接口刷新)

如果有多实例服务,可以设置为 Redis 或 RPC 等中控服务器 获取 就可以避免 AccessToken 刷新冲突

func (*App) SetNoticeAccessTokenExpireHandler

func (app *App) SetNoticeAccessTokenExpireHandler(f NoticeAccessTokenExpireFunc)

SetNoticeAccessTokenExpireHandler 设置 AccessToken 过期 通知

框架提供的默认机制是 删除本地缓存的 access_token,那么 retry 的时候 会触发 刷新

如果有多实例服务,可以设置为 通知 中控服务器 去刷新

type AppConfig

type AppConfig struct {
	AgentId        string
	Secret         string
	Token          string
	EncodingAESKey string
}

应用配置

type Client

type Client struct {
	Ctx *App
}

HttpClient 用于向微信接口发送请求

func (*Client) HTTPGet

func (client *Client) HTTPGet(uri string) (resp []byte, err error)

HTTPGet GET 请求

func (*Client) HTTPPost

func (client *Client) HTTPPost(uri string, payload io.Reader, contentType string) (resp []byte, err error)

HTTPPost POST 请求

type Config

type Config struct {
	Corpid string
}

配置

type Corporation

type Corporation struct {
	Config Config
	Logger *log.Logger
}

Corporation 企业实例

func New

func New(config Config) (corporation *Corporation)

创建企业实例

func (*Corporation) NewApp

func (corporation *Corporation) NewApp(config AppConfig) (app *App)

创建应用实例

func (*Corporation) SetLogger

func (corporation *Corporation) SetLogger(logger *log.Logger)

SetLogger 日志记录 默认输出到 os.Stdout

可以新建 logger 输出到指定文件

如果不想开启日志,可以 SetLogger(nil)

Example
package main

import (
	"log"
	"os"

	"github.com/cvblood/qywxapi/corporation"
)

func main() {

	var Ctx *corporation.Corporation

	// 输出日志到控制台
	Ctx.SetLogger(log.New(os.Stdout, "[corporation ]", log.LstdFlags))

	// 记录日志到指定文件
	logFile, _ := os.OpenFile("/path/to/file", os.O_WRONLY, 0644)
	Ctx.SetLogger(log.New(logFile, "[corporation ]", log.LstdFlags))

	// 关闭日志
	Ctx.SetLogger(nil)
}
Output:

type GetAccessTokenFunc

type GetAccessTokenFunc func(ctx *App) (accessToken string, err error)

GetAccessTokenFunc 获取 access_token 方法接口

type NoticeAccessTokenExpireFunc

type NoticeAccessTokenExpireFunc func(ctx *App) (err error)

NoticeAccessTokenExpireFunc 通知中控 刷新 access_token

type Server

type Server struct {
	Ctx *App
}

响应微信请求 或 推送消息/事件 的服务器

func (*Server) EchoStr

func (s *Server) EchoStr(writer http.ResponseWriter, request *http.Request)

EchoStr 服务器接口校验

msg_signature=ASDFQWEXZCVAQFASDFASDFSS &timestamp=13500001234 &nonce=123412323 &echostr=ENCRYPT_STR

func (*Server) ParseXML

func (s *Server) ParseXML(request *http.Request) (m interface{}, err error)

ParseXML 解析微信推送过来的消息/事件

POST /api/callback?msg_signature=ASDFQWEXZCVAQFASDFASDFSS &timestamp=13500001234 &nonce=123412323

<xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<AgentID><![CDATA[toAgentID]]></AgentID>
<Encrypt><![CDATA[msg_encrypt]]></Encrypt>

</xml>

func (*Server) Response

func (s *Server) Response(writer http.ResponseWriter, request *http.Request, reply interface{}) (err error)

Response 响应微信消息

Directories

Path Synopsis
apis
app
Package app 应用管理
Package app 应用管理
contact/async_batch
Package async_batch 通讯录管理/异步批量接口
Package async_batch 通讯录管理/异步批量接口
contact/department
Package department 通讯录管理/部门管理
Package department 通讯录管理/部门管理
contact/linked_corp
Package linked_corp 通讯录管理/互联企业
Package linked_corp 通讯录管理/互联企业
contact/tag
Package tag 通讯录管理/标签管理
Package tag 通讯录管理/标签管理
contact/user
Package user 通讯录管理/成员管理
Package user 通讯录管理/成员管理
corp_group
Package corp_group 企业互联
Package corp_group 企业互联
efficiency/calendar
Package calendar 效率工具/日程
Package calendar 效率工具/日程
efficiency/call
Package call 效率工具/公费电话
Package call 效率工具/公费电话
efficiency/living
Package living 效率工具/直播
Package living 效率工具/直播
efficiency/meeting
Package meeting 效率工具/会议
Package meeting 效率工具/会议
efficiency/wedrive
Package wedrive 效率工具/微盘
Package wedrive 效率工具/微盘
external_contact/customer
Package customer 客户联系/客户管理
Package customer 客户联系/客户管理
external_contact/customer_assign
Package customer_assign 客户联系/客户分配
Package customer_assign 客户联系/客户分配
external_contact/customer_group
Package customer_group 客户联系/客户群管理
Package customer_group 客户联系/客户群管理
external_contact/customer_message
Package customer_message 客户联系/消息推送
Package customer_message 客户联系/消息推送
external_contact/customer_moment
Package customer_moment 客户联系/客户朋友圈
Package customer_moment 客户联系/客户朋友圈
external_contact/customer_service
Package customer_service 客户联系/企业服务人员管理
Package customer_service 客户联系/企业服务人员管理
external_contact/customer_stat
Package customer_stat 客户联系/统计管理
Package customer_stat 客户联系/统计管理
external_contact/customer_tag
Package customer_tag 客户联系/客户标签管理
Package customer_tag 客户联系/客户标签管理
gov/patrol_report
Package patrol_report 政民沟通/巡查上报
Package patrol_report 政民沟通/巡查上报
gov/resident_report
Package resident_report 政民沟通/居民上报
Package resident_report 政民沟通/居民上报
invoice
Package invoice 电子发票
Package invoice 电子发票
material
Package material 素材管理
Package material 素材管理
message
Package message 消息推送
Package message 消息推送
msgaudit
Package msgaudit 会话内容存档
Package msgaudit 会话内容存档
oa/approve
Package approve OA/审批
Package approve OA/审批
oa/checkin
Package checkin OA/打卡
Package checkin OA/打卡
oa/custom_app
Package custom_app OA/自建应用
Package custom_app OA/自建应用
oa/journal
Package journal OA/汇报
Package journal OA/汇报
oa/meeting_room
Package meeting_room OA/会议室
Package meeting_room OA/会议室
oa/pstncc
Package pstncc OA/紧急通知应用
Package pstncc OA/紧急通知应用
payment
Package payment 企业支付
Package payment 企业支付
school
Package school 家校沟通
Package school 家校沟通
school/department
Package department 家校沟通/部门管理
Package department 家校沟通/部门管理
school/user
Package user 家校沟通/学生与家长管理
Package user 家校沟通/学生与家长管理
school_app/health
Package health 家校应用/健康上报
Package health 家校应用/健康上报
school_app/health_qrcode
Package health_qrcode 家校应用/复学码
Package health_qrcode 家校应用/复学码
Package test 模拟微信服务器 测试
Package test 模拟微信服务器 测试
type

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL