godingtalk/api_sns.go

96 lines
2.1 KiB
Go

//普通钉钉用户账号开放相关接口
package godingtalk
import (
"net/url"
"strconv"
"time"
)
type SnsUserInfoResponse struct {
OAPIResponse
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
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"`
}
//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 {
OAPIResponse
UserID string `json:"userid"`
}
params := url.Values{}
params.Add("unionid", unionid)
err := c.httpRPC("user/getUseridByUnionid", params, nil, &data)
if err != nil {
return nil, err
}
return &data.UserID, nil
}
//SnsUser 获取用户授权的个人信息
func (c *DingTalkClient) SnsUser(code string) (SnsUserResponse, error) {
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}
var data SnsUserResponse
err := c.httpRequest("sns/getuserinfo_bycode", params, body, &data)
return data, err
}