//通过access_token获取用户个人信息(UnionID机制)
//http请求方式: GET
//https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
var p2 = url.Values{}
p2.Set("access_token", respToken.AccessToken)
p2.Set("openid", respToken.Openid)
getUserUrl := "https://api.weixin.qq.com/sns/userinfo"
result2, err := url.Parse(getUserUrl + "?" + p.Encode())
resp2, err := client.Get(result2.String())
if err != nil {
zap.S().Errorf("通过access_token获取用户信息失败%s", err.Error())
c.JSON(http.StatusInternalServerError, gin.H{"msg": "获取用户信息失败"})
return
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp2.Body)
fmt.Println("返回数据", resp2.Body)
//读取返回数据
body2, err := ioutil.ReadAll(resp2.Body)
if err != nil {
zap.S().Errorf("读取返回UserInfo的数据失败%s", err.Error())
c.JSON(http.StatusInternalServerError, gin.H{"msg": "获取用户信息失败,请重试"})
return
}
wxUser := form.WxUserInfo{
Privilege: make([]string, 0),
}
err = json.Unmarshal(body2, &wxUser)
if err != nil {
zap.S().Errorf("解析返回userInfo的数据失败%s", err.Error())
c.JSON(http.StatusInternalServerError, gin.H{"msg": "获取用户信息失败,请重试"})
return
}
userInfo := model.User{
WxOpenId: wxUser.OpenId,
Nickname: wxUser.Nickname,
Gender: strconv.Itoa(wxUser.Sex),
Province: wxUser.Province,
City: wxUser.City,
AvatarURL: wxUser.HeadImageUrl,
WxUnionid: wxUser.Unionid,
}
返回数据 &{0xc0003d7f80 {0 0} false <nil> 0x7c32e0 0x7c33e0}
用户信息:openid
用户信息:Nickname
用户信息:Gender 0
用户信息:Province
用户信息:City
用户信息:AvatarURL
只有openid值