vote-api/extend/weChat/webAccessToken.go
2024-08-27 14:51:15 +08:00

69 lines
1.8 KiB
Go

package weChat
import (
"encoding/json"
"errors"
"io"
"net/http"
"vote-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
}