Parcourir la source

feat:企业微信-身份验证-获取用户身份及敏感信息 (#692)

Co-authored-by: markwang <www.wang61@qq.com>
markwang il y a 3 ans
Parent
commit
822cfaa6c8
1 fichiers modifiés avec 74 ajouts et 0 suppressions
  1. 74 0
      work/oauth/oauth.go

+ 74 - 0
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
+}