//普通钉钉用户账号开放相关接口 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(unionid string) (*SnsUserInfoResponse, error) { var udata struct { OAPIResponse UserID string `json:"userid"` } uparams := url.Values{} uparams.Add("unionid", unionid) err := c.httpRPC("user/getUseridByUnionid", uparams, nil, &udata) if err != nil { return nil, err } var userdata SnsUserInfoResponse params := url.Values{} params.Add("userid", udata.UserID) err = c.httpRPC("user/get", params, nil, &userdata) return &userdata, err } //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 }