1
0
mirror of https://github.com/silenceper/wechat.git synced 2026-02-23 13:42:25 +08:00

Merge branch 'v2' into v2

This commit is contained in:
ren-jimmy
2024-01-06 21:48:41 +08:00
committed by GitHub
4 changed files with 78 additions and 28 deletions

View File

@@ -22,6 +22,9 @@ type URIModifier func(uri string) string
var uriModifier URIModifier var uriModifier URIModifier
// DefaultHTTPClient 默认httpClient
var DefaultHTTPClient = http.DefaultClient
// SetURIModifier 设置URI修改器 // SetURIModifier 设置URI修改器
func SetURIModifier(fn URIModifier) { func SetURIModifier(fn URIModifier) {
uriModifier = fn uriModifier = fn
@@ -41,7 +44,7 @@ func HTTPGetContext(ctx context.Context, uri string) ([]byte, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := http.DefaultClient.Do(request) response, err := DefaultHTTPClient.Do(request)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -73,7 +76,7 @@ func HTTPPostContext(ctx context.Context, uri string, data []byte, header map[st
request.Header.Set(key, value) request.Header.Set(key, value)
} }
response, err := http.DefaultClient.Do(request) response, err := DefaultHTTPClient.Do(request)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -102,7 +105,7 @@ func PostJSONContext(ctx context.Context, uri string, obj interface{}) ([]byte,
return nil, err return nil, err
} }
req.Header.Set("Content-Type", "application/json;charset=utf-8") req.Header.Set("Content-Type", "application/json;charset=utf-8")
response, err := http.DefaultClient.Do(req) response, err := DefaultHTTPClient.Do(req)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -129,7 +132,7 @@ func PostJSONWithRespContentType(uri string, obj interface{}) ([]byte, string, e
return nil, "", err return nil, "", err
} }
response, err := http.Post(uri, "application/json;charset=utf-8", jsonBuf) response, err := DefaultHTTPClient.Post(uri, "application/json;charset=utf-8", jsonBuf)
if err != nil { if err != nil {
return nil, "", err return nil, "", err
} }
@@ -205,7 +208,7 @@ func PostMultipartForm(fields []MultipartFormField, uri string) (respBody []byte
contentType := bodyWriter.FormDataContentType() contentType := bodyWriter.FormDataContentType()
bodyWriter.Close() bodyWriter.Close()
resp, e := http.Post(uri, contentType, bodyBuf) resp, e := DefaultHTTPClient.Post(uri, contentType, bodyBuf)
if e != nil { if e != nil {
err = e err = e
return return
@@ -229,7 +232,7 @@ func PostXML(uri string, obj interface{}) ([]byte, error) {
} }
body := bytes.NewBuffer(xmlData) body := bytes.NewBuffer(xmlData)
response, err := http.Post(uri, "application/xml;charset=utf-8", body) response, err := DefaultHTTPClient.Post(uri, "application/xml;charset=utf-8", body)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -252,11 +255,10 @@ func httpWithTLS(rootCa, key string) (*http.Client, error) {
config := &tls.Config{ config := &tls.Config{
Certificates: []tls.Certificate{cert}, Certificates: []tls.Certificate{cert},
} }
tr := &http.Transport{ trans := (DefaultHTTPClient.Transport.(*http.Transport)).Clone()
TLSClientConfig: config, trans.TLSClientConfig = config
DisableCompression: true, trans.DisableCompression = true
} client = &http.Client{Transport: trans}
client = &http.Client{Transport: tr}
return client, nil return client, nil
} }

View File

@@ -1,6 +1,7 @@
package wechat package wechat
import ( import (
"net/http"
"os" "os"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
@@ -14,6 +15,7 @@ import (
openConfig "github.com/silenceper/wechat/v2/openplatform/config" openConfig "github.com/silenceper/wechat/v2/openplatform/config"
"github.com/silenceper/wechat/v2/pay" "github.com/silenceper/wechat/v2/pay"
payConfig "github.com/silenceper/wechat/v2/pay/config" payConfig "github.com/silenceper/wechat/v2/pay/config"
"github.com/silenceper/wechat/v2/util"
"github.com/silenceper/wechat/v2/work" "github.com/silenceper/wechat/v2/work"
workConfig "github.com/silenceper/wechat/v2/work/config" workConfig "github.com/silenceper/wechat/v2/work/config"
) )
@@ -81,3 +83,8 @@ func (wc *Wechat) GetWork(cfg *workConfig.Config) *work.Work {
} }
return work.NewWork(cfg) return work.NewWork(cfg)
} }
// SetHTTPClient 设置HTTPClient
func (wc *Wechat) SetHTTPClient(client *http.Client) {
util.DefaultHTTPClient = client
}

View File

@@ -63,16 +63,16 @@ type ExternalUserDetailResponse struct {
// ExternalUser 外部联系人 // ExternalUser 外部联系人
type ExternalUser struct { type ExternalUser struct {
ExternalUserID string `json:"external_userid"` ExternalUserID string `json:"external_userid"`
Name string `json:"name"` Name string `json:"name"`
Avatar string `json:"avatar"` Avatar string `json:"avatar"`
Type int64 `json:"type"` Type int64 `json:"type"`
Gender int64 `json:"gender"` Gender int64 `json:"gender"`
UnionID string `json:"unionid"` UnionID string `json:"unionid"`
Position string `json:"position"` Position string `json:"position"`
CorpName string `json:"corp_name"` CorpName string `json:"corp_name"`
CorpFullName string `json:"corp_full_name"` CorpFullName string `json:"corp_full_name"`
ExternalProfile string `json:"external_profile"` ExternalProfile *ExternalProfile `json:"external_profile,omitempty"`
} }
// FollowUser 跟进用户(指企业内部用户) // FollowUser 跟进用户(指企业内部用户)
@@ -104,6 +104,46 @@ type WechatChannel struct {
Source int `json:"source"` Source int `json:"source"`
} }
// ExternalProfile 外部联系人的自定义展示信息,可以有多个字段和多种类型,包括文本,网页和小程序
type ExternalProfile struct {
ExternalCorpName string `json:"external_corp_name"`
WechatChannels WechatChannels `json:"wechat_channels"`
ExternalAttr []ExternalAttr `json:"external_attr"`
}
// WechatChannels 视频号属性。须从企业绑定到企业微信的视频号中选择,可在“我的企业”页中查看绑定的视频号
type WechatChannels struct {
Nickname string `json:"nickname"`
Status int `json:"status"`
}
// ExternalAttr 属性列表,目前支持文本、网页、小程序三种类型
type ExternalAttr struct {
Type int `json:"type"`
Name string `json:"name"`
Text *Text `json:"text,omitempty"`
Web *Web `json:"web,omitempty"`
MiniProgram *MiniProgram `json:"miniprogram,omitempty"`
}
// Text 文本
type Text struct {
Value string `json:"value"`
}
// Web 网页
type Web struct {
URL string `json:"url"`
Title string `json:"title"`
}
// MiniProgram 小程序
type MiniProgram struct {
AppID string `json:"appid"`
Pagepath string `json:"pagepath"`
Title string `json:"title"`
}
// GetExternalUserDetail 获取外部联系人详情 // GetExternalUserDetail 获取外部联系人详情
// @see https://developer.work.weixin.qq.com/document/path/92114 // @see https://developer.work.weixin.qq.com/document/path/92114
func (r *Client) GetExternalUserDetail(externalUserID string, nextCursor ...string) (*ExternalUserDetailResponse, error) { func (r *Client) GetExternalUserDetail(externalUserID string, nextCursor ...string) (*ExternalUserDetailResponse, error) {

View File

@@ -76,13 +76,14 @@ type (
} }
//GroupChat 客户群详情 //GroupChat 客户群详情
GroupChat struct { GroupChat struct {
ChatID string `json:"chat_id"` //客户群ID ChatID string `json:"chat_id"` //客户群ID
Name string `json:"name"` //群名 Name string `json:"name"` //群名
Owner string `json:"owner"` //群主ID Owner string `json:"owner"` //群主ID
CreateTime int64 `json:"create_time"` //群的创建时间 CreateTime int64 `json:"create_time"` //群的创建时间
Notice string `json:"notice"` //群公告 Notice string `json:"notice"` //群公告
MemberList []GroupChatMember `json:"member_list"` //群成员列表 MemberList []GroupChatMember `json:"member_list"` //群成员列表
AdminList []GroupChatAdmin `json:"admin_list"` //群管理员列表 AdminList []GroupChatAdmin `json:"admin_list"` //群管理员列表
MemberVersion string `json:"member_version"` //当前群成员版本号。可以配合客户群变更事件减少主动调用本接口的次数
} }
//GroupChatDetailResponse 客户群详情 返回值 //GroupChatDetailResponse 客户群详情 返回值
GroupChatDetailResponse struct { GroupChatDetailResponse struct {