in user-center-wecom/company.go [139:199]
func (c *Company) AuthUser(code string) (info *UserInfo, err error) {
token, err := c.Work.GetOauth().GetAccessToken()
if err != nil {
return nil, fmt.Errorf("get access token failed: %w", err)
}
getUserInfoResp, err := resty.New().R().Get(fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=" + token + "&code=" + code))
if err != nil {
log.Errorf("get user info failed: %v", err)
return nil, err
}
log.Debugf("get user info: %s", getUserInfoResp.String())
userTicket := gjson.Get(getUserInfoResp.String(), "user_ticket").String()
getUserDetailResp, err := resty.New().R().
SetHeader("Content-Type", "application/json").
SetBody(map[string]string{"user_ticket": userTicket}).
Post(fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=" + token))
if err != nil {
log.Errorf("get user info failed: %v", err)
return nil, err
}
var userInfoResp *AuthUserInfoResp
err = json.Unmarshal([]byte(getUserDetailResp.String()), &userInfoResp)
if err != nil {
log.Errorf("unmarshal user info failed: %s", err)
return nil, err
}
if userInfoResp.Errcode != 0 {
log.Errorf("get user info failed: %v", getUserDetailResp.String())
return nil, fmt.Errorf("get user info failed")
}
log.Debugf("get user info: %s", getUserDetailResp.String())
employee := c.EmployeeMapping[userInfoResp.Userid]
if employee == nil {
return nil, fmt.Errorf("user %s not found in employee list", userInfoResp.Userid)
}
userDetailInfo, err := c.GetUserDetailInfo(userInfoResp.Userid)
if err != nil {
return nil, err
}
userInfo := &UserInfo{
Userid: userInfoResp.Userid,
Mobile: userInfoResp.Mobile,
Gender: userInfoResp.Gender,
Email: userInfoResp.Email,
Avatar: userInfoResp.Avatar,
QrCode: userInfoResp.QrCode,
Address: userInfoResp.Address,
Name: employee.Name,
Position: userDetailInfo.Position,
IsAvailable: userDetailInfo.Status == 1,
DepartmentIDs: employee.Department,
}
return userInfo, nil
}