godingtalk/api_sns.go

96 lines
2.1 KiB
Go
Raw Permalink Normal View History

2021-11-18 10:56:31 +00:00
//普通钉钉用户账号开放相关接口
package godingtalk
import (
"net/url"
"strconv"
"time"
)
type SnsUserInfoResponse struct {
OAPIResponse
2021-11-19 03:13:41 +00:00
Userid string
Name string
Mobile string
Tel string
Remark string
Order int
IsAdmin bool
IsBoss bool
IsLeader bool
Active bool
Department []int
Position string
Email string
OrgEmail string
Avatar string
Extattr interface{}
}
type SnsUserResponse struct {
OAPIResponse
2021-11-18 10:56:31 +00:00
CorpInfo []struct {
CorpName string `json:"corp_name"`
IsAuth bool `json:"is_auth"`
IsManager bool `json:"is_manager"`
RightsLevel int `json:"rights_level"`
} `json:"corp_info"`
UserInfo struct {
MaskedMobile string `json:"marskedMobile"`
Nick string `json:"nick"`
OpenID string `json:"openid"`
UnionID string `json:"unionid"`
DingID string `json:"dingId"`
} `json:"user_info"`
}
2021-11-19 02:36:38 +00:00
//SnsUserInfo 获取用户授权的个人信息详情
func (c *DingTalkClient) SnsUserInfo(userid string) (*SnsUserInfoResponse, error) {
var data SnsUserInfoResponse
params := url.Values{}
params.Add("userid", userid)
err := c.httpRPC("user/get", params, nil, &data)
if err != nil {
return nil, err
}
return &data, err
}
// SnsUserid 获取用户ID
func (c *DingTalkClient) SnsUserID(unionid string) (*string, error) {
var data struct {
2021-11-19 03:13:41 +00:00
OAPIResponse
UserID string `json:"userid"`
}
2021-11-18 10:56:31 +00:00
params := url.Values{}
params.Add("unionid", unionid)
err := c.httpRPC("user/getUseridByUnionid", params, nil, &data)
2021-11-19 03:13:41 +00:00
if err != nil {
return nil, err
}
return &data.UserID, nil
2021-11-18 10:56:31 +00:00
}
2021-11-19 02:36:38 +00:00
//SnsUser 获取用户授权的个人信息
2021-11-19 03:13:41 +00:00
func (c *DingTalkClient) SnsUser(code string) (SnsUserResponse, error) {
2021-11-19 02:36:38 +00:00
ts := strconv.FormatInt(time.Now().UnixNano()/1000000, 10)
params := url.Values{}
params.Add("accessKey", c.AppKey)
params.Add("timestamp", ts)
params.Add("signature", encodeSHA256(ts, c.AppSecret))
body := struct {
Code string `json:"tmp_auth_code"`
}{code}
2021-11-19 03:13:41 +00:00
var data SnsUserResponse
2021-11-19 02:36:38 +00:00
err := c.httpRequest("sns/getuserinfo_bycode", params, body, &data)
return data, err
}