mirror of https://gitee.com/godoos/godoos.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.5 KiB
60 lines
1.5 KiB
package dingtalk
|
|
|
|
import (
|
|
"godocms/common"
|
|
"godocms/pkg/dingtalk/payload"
|
|
"net/http"
|
|
"net/url"
|
|
"time"
|
|
|
|
"github.com/spf13/cast"
|
|
)
|
|
|
|
// GetAccessToken 获取token
|
|
func (ding *DingTalk) GetAccessToken() (token string, err error) {
|
|
if ding.cache != "" {
|
|
data, err := common.Cache.Get(DingDingAccessTokenCachekey)
|
|
if err == nil && data != nil {
|
|
return cast.ToString(data), nil
|
|
}
|
|
}
|
|
args := url.Values{}
|
|
args.Set("appkey", ding.key)
|
|
args.Set("appsecret", ding.secret)
|
|
resp := &payload.AccessToken{}
|
|
if err = ding.Request(http.MethodGet, GetTokenKey, args, nil, resp); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
resp.Create = time.Now().Unix()
|
|
common.Cache.Set(DingDingAccessTokenCachekey, resp.Token, 60*60*time.Minute)
|
|
|
|
return resp.Token, nil
|
|
}
|
|
|
|
// GetJsApiTicket 获取jsapi_ticket
|
|
func (ding *DingTalk) GetJsApiTicket() (ticket string, err error) {
|
|
resp := &payload.JsApiTicket{}
|
|
|
|
// get cache
|
|
|
|
if err = ding.Request(http.MethodGet, GetJsApiTicketKey, nil, nil, resp); err != nil {
|
|
return "", err
|
|
}
|
|
resp.Create = time.Now().Unix()
|
|
|
|
// set cache
|
|
|
|
return resp.Ticket, nil
|
|
}
|
|
|
|
// GetUserAccessToken 通过oauth2临时授权码获取用户Token
|
|
// https://open.dingtalk.com/document/orgapp/obtain-user-token
|
|
func (ding *DingTalk) GetUserAccessToken(authCode string) (res payload.UserAccessTokenResponse, err error) {
|
|
req := payload.NewUserAuthToken(authCode)
|
|
req.ClientId = ding.key
|
|
req.ClientSecret = ding.secret
|
|
|
|
err = ding.Request(http.MethodPost, GetUserAccessToken, nil, req, &res)
|
|
return
|
|
}
|
|
|