package weChat import ( "encoding/json" "errors" "io" "net/http" "vote-video-api/config" ) // GetWebAccessTokenResponse 获取网页授权access_token返回值 type GetWebAccessTokenResponse struct { AccessToken string `json:"access_token" form:"access_token" label:"网页授权接口调用凭证"` ExpiresIn int `json:"expires_in" form:"expires_in" label:"access_token接口调用凭证超时时间"` RefreshToken string `json:"refresh_token" form:"refresh_token" label:"用户刷新access_token"` OpenId string `json:"openid" form:"openid" label:"openid"` Scope string `json:"scope" form:"scope" label:"scope"` UnionId string `json:"unionid" form:"unionid" label:"unionid"` Errcode *int `json:"errcode" form:"errcode" label:"errcode"` Errmsg string `json:"errmsg" form:"errmsg" label:"errmsg"` } // GetWebAccessToken 获取网页授权access_token func GetWebAccessToken(code string) (r *GetWebAccessTokenResponse, err error) { // 拼接请求数据 requestUrl := "https://api.weixin.qq.com/sns/oauth2/access_token?" + "appid=" + config.C.Wechat.AppId + "&secret=" + config.C.Wechat.AppSecret + "&code=" + code + "&grant_type=authorization_code" // 发送GET请求 resp, err := http.Get(requestUrl) if err != nil { return nil, err } defer func(Body io.ReadCloser) { _ = Body.Close() }(resp.Body) if resp.StatusCode != 200 { return nil, errors.New("请求失败") } // 读取响应体 respBody, err := io.ReadAll(resp.Body) if err != nil { return nil, err } var response GetWebAccessTokenResponse err = json.Unmarshal([]byte(respBody), &response) if err != nil { // json解析失败 return nil, err } if response.Errcode != nil { if response.Errmsg != "" { return nil, errors.New(response.Errmsg) } else { return nil, errors.New("请求失败") } } return &response, nil }