mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-06 05:32:26 +08:00
feat: enhance WorkAccessToken with new constructor for AgentID support
- Introduced NewWorkAccessTokenWithAgentID function to maintain backward compatibility while allowing for AgentID usage. - Updated NewWorkAccessToken to call the new constructor, ensuring seamless integration. - Improved error handling in GetAccessTokenContext by checking for cache availability and handling potential errors during cache operations. This change enhances the flexibility of access token management, particularly in multi-agent scenarios, while ensuring compatibility with existing implementations.
This commit is contained in:
@@ -195,15 +195,21 @@ type WorkAccessToken struct {
|
||||
accessTokenLock *sync.Mutex
|
||||
}
|
||||
|
||||
// NewWorkAccessToken new WorkAccessToken
|
||||
// NewWorkAccessToken new WorkAccessToken (保持向后兼容)
|
||||
func NewWorkAccessToken(corpID, corpSecret, agentID, cacheKeyPrefix string, cache cache.Cache) AccessTokenContextHandle {
|
||||
// 调用新方法,保持兼容性
|
||||
return NewWorkAccessTokenWithAgentID(corpID, corpSecret, agentID, cacheKeyPrefix, cache)
|
||||
}
|
||||
|
||||
// NewWorkAccessTokenWithAgentID new WorkAccessToken with agentID
|
||||
func NewWorkAccessTokenWithAgentID(corpID, corpSecret, agentID, cacheKeyPrefix string, cache cache.Cache) AccessTokenContextHandle {
|
||||
if cache == nil {
|
||||
panic("cache the not exist")
|
||||
panic("cache is needed")
|
||||
}
|
||||
return &WorkAccessToken{
|
||||
CorpID: corpID,
|
||||
CorpSecret: corpSecret,
|
||||
AgentID: agentID, // agentID可以为空,兼容历史版本
|
||||
AgentID: agentID,
|
||||
cache: cache,
|
||||
cacheKeyPrefix: cacheKeyPrefix,
|
||||
accessTokenLock: new(sync.Mutex),
|
||||
@@ -223,8 +229,6 @@ func (ak *WorkAccessToken) GetAccessTokenContext(ctx context.Context) (accessTok
|
||||
|
||||
// 构建缓存key
|
||||
var accessTokenCacheKey string
|
||||
// 每个应用有独立的secret,获取到的access_token只能本应用使用,所以每个应用的access_token应该分开来获取
|
||||
// API文档:https://developer.work.weixin.qq.com/document/path/91039
|
||||
if ak.AgentID != "" {
|
||||
// 如果设置了AgentID,使用新的key格式
|
||||
accessTokenCacheKey = fmt.Sprintf("%s_access_token_%s_%s", ak.cacheKeyPrefix, ak.CorpID, ak.AgentID)
|
||||
@@ -248,6 +252,9 @@ func (ak *WorkAccessToken) GetAccessTokenContext(ctx context.Context) (accessTok
|
||||
|
||||
expires := resAccessToken.ExpiresIn - 1500
|
||||
err = ak.cache.Set(accessTokenCacheKey, resAccessToken.AccessToken, time.Duration(expires)*time.Second)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
accessToken = resAccessToken.AccessToken
|
||||
return
|
||||
|
||||
@@ -7,12 +7,11 @@ import (
|
||||
|
||||
// Config for 企业微信
|
||||
type Config struct {
|
||||
CorpID string `json:"corp_id"` // corp_id
|
||||
CorpSecret string `json:"corp_secret"` // corp_secret,如果需要获取会话存档实例,当前参数请填写聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
|
||||
AgentID string `json:"agent_id"` // agent_id
|
||||
Cache cache.Cache
|
||||
RasPrivateKey string // 消息加密私钥,可以在企业微信管理端--管理工具--消息加密公钥查看对用公钥,私钥一般由自己保存
|
||||
|
||||
CorpID string `json:"corp_id"` // corp_id
|
||||
CorpSecret string `json:"corp_secret"` // corp_secret,如果需要获取会话存档实例,当前参数请填写聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
|
||||
AgentID string `json:"agent_id"` // agent_id
|
||||
Cache cache.Cache
|
||||
RasPrivateKey string // 消息加密私钥,可以在企业微信管理端--管理工具--消息加密公钥查看对用公钥,私钥一般由自己保存
|
||||
Token string `json:"token"` // 微信客服回调配置,用于生成签名校验回调请求的合法性
|
||||
EncodingAESKey string `json:"encoding_aes_key"` // 微信客服回调p配置,用于解密回调消息内容对应的密文
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user