69 lines
1.8 KiB
Go
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
|
|
}
|