diff --git a/work/oauth/oauth.go b/work/oauth/oauth.go index 3f475d9..f1acf61 100644 --- a/work/oauth/oauth.go +++ b/work/oauth/oauth.go @@ -23,6 +23,10 @@ var ( oauthUserInfoURL = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=%s&code=%s" // oauthQrContentTargetURL 构造独立窗口登录二维码 oauthQrContentTargetURL = "https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=%s&agentid=%s&redirect_uri=%s&state=%s" + // getUserInfoURL 获取访问用户身份&获取用户登录身份 + getUserInfoURL = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%s&code=%s" + // getUserDetailURL 获取访问用户敏感信息 + getUserDetailURL = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=%s" ) // NewOauth new init oauth @@ -93,3 +97,73 @@ func (ctr *Oauth) UserFromCode(code string) (result ResUserInfo, err error) { } return } + +// GetUserInfoResponse 获取访问用户身份&获取用户登录身份响应 +type GetUserInfoResponse struct { + util.CommonError + UserID string `json:"userid"` + UserTicket string `json:"user_ticket"` + OpenID string `json:"openid"` + ExternalUserID string `json:"external_userid"` +} + +// GetUserInfo 获取访问用户身份&获取用户登录身份 +// @see https://developer.work.weixin.qq.com/document/path/90213 获取访问用户身份 +// @see https://developer.work.weixin.qq.com/document/path/98176 获取用户登录身份 +func (ctr *Oauth) GetUserInfo(code string) (*GetUserInfoResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = ctr.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.HTTPGet(fmt.Sprintf(getUserInfoURL, accessToken, code)); err != nil { + return nil, err + } + result := &GetUserInfoResponse{} + if err = util.DecodeWithError(response, result, "GetUserInfo"); err != nil { + return nil, err + } + return result, nil +} + +// GetUserDetailRequest 获取访问用户敏感信息请求 +type GetUserDetailRequest struct { + UserTicket string `json:"user_ticket"` +} + +// GetUserDetailResponse 获取访问用户敏感信息响应 +type GetUserDetailResponse struct { + util.CommonError + UserID string `json:"userid"` + Gender string `json:"gender"` + Avatar string `json:"avatar"` + QrCode string `json:"qr_code"` + Mobile string `json:"mobile"` + Email string `json:"email"` + BizMail string `json:"biz_mail"` + Address string `json:"address"` +} + +// GetUserDetail 获取访问用户敏感信息 +// @see https://developer.work.weixin.qq.com/document/path/95833 +func (ctr *Oauth) GetUserDetail(req *GetUserDetailRequest) (*GetUserDetailResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = ctr.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.PostJSON(fmt.Sprintf(getUserDetailURL, accessToken), req); err != nil { + return nil, err + } + result := &GetUserDetailResponse{} + if err = util.DecodeWithError(response, result, "GetUserDetail"); err != nil { + return nil, err + } + return result, nil +}