|
|
@@ -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
|
|
|
+}
|