/
client.go
88 lines (79 loc) · 1.96 KB
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package wecom
import (
"context"
"net/http"
"github.com/wenerme/go-req"
)
// Client of Wecom/WechatWork/企业微信
type Client struct {
Conf Conf
Request req.Request
TokenProvider TokenProvider
}
// NewClient create a new Client
func NewClient(conf Conf) *Client {
ctx := context.Background()
c := &Client{
Conf: conf,
Request: req.Request{
BaseURL: DefaultAPI,
Method: http.MethodGet,
Options: []interface{}{requestMiddleware, req.JSONEncode, req.JSONDecode},
},
}
c.Request.Context = NewContext(ctx, c)
c.Request.Extension.With(wecomeMiddleware)
c.TokenProvider = conf.TokenProvider
if c.TokenProvider == nil {
c.TokenProvider = &TokenCache{
Store: &SyncMapStore{},
}
}
return c
}
// With create new Client with this conf
func (c *Client) With(conf Conf) (neo *Client) {
cc := *c
neo = &cc
neo.Conf = conf
neo.Request.Context = NewContext(cc.Request.Context, neo)
return
}
// GetToken request an access_token
func (c *Client) GetToken() (out TokenResponse, err error) {
err = c.Request.With(req.Request{
URL: "/cgi-bin/gettoken",
Query: map[string]interface{}{
"corpid": c.Conf.CorpID,
"corpsecret": c.Conf.CorpSecret,
},
Options: []interface{}{WithoutAccessToken},
}).Fetch(&out)
if err == nil {
out.ExpiresAt = int64(out.ExpiresIn) + timeNow().Unix()
}
return out, err
}
// GetJsAPITicket request a JsAPITicket
func (c *Client) GetJsAPITicket() (out TicketResponse, err error) {
err = c.Request.With(req.Request{
URL: "/cgi-bin/get_jsapi_ticket",
}).Fetch(&out)
if err == nil {
out.ExpiresAt = int64(out.ExpiresIn) + timeNow().Unix()
}
return out, err
}
// GetAgentTicket request a AgentTicket
func (c *Client) GetAgentTicket() (out TicketResponse, err error) {
err = c.Request.With(req.Request{
URL: "/cgi-bin/ticket/get",
Query: map[string]interface{}{
"type": "agent_config",
},
}).Fetch(&out)
if err == nil {
out.ExpiresAt = int64(out.ExpiresIn) + timeNow().Unix()
}
return out, err
}