You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.0 KiB
81 lines
2.0 KiB
package wx
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
var Wxopen = &wxopen{}
|
|
|
|
type wxopen struct {
|
|
appid string
|
|
secret string
|
|
}
|
|
|
|
// InitWxopen @Title 初始化开放平台
|
|
func InitWxopen(appid, secret string) {
|
|
Wxopen.appid = appid
|
|
Wxopen.secret = secret
|
|
}
|
|
|
|
type AccessInfo struct {
|
|
AccessToken string `json:"access_token"`
|
|
ExpiresIn int `json:"expires_in"`
|
|
RefreshToken string `json:"refresh_token"`
|
|
Openid string `json:"openid"`
|
|
Scope string `json:"scope"`
|
|
Unionid string `json:"unionid"`
|
|
}
|
|
type errInfo struct {
|
|
Errcode int `json:"errcode"`
|
|
Errmsg string `json:"errmsg"`
|
|
}
|
|
|
|
type resAccess struct {
|
|
errInfo
|
|
AccessInfo
|
|
}
|
|
|
|
// GetAccessInfo @Title 获取微信登录验证结构体
|
|
func (w *wxopen) GetAccessInfo(code string) (result AccessInfo, err error) {
|
|
res, err := request(get, fmt.Sprintf("https://api.weixin.qq.com/sns/oauth2/access_token?appid=%v&secret=%v&code=%v&grant_type=authorization_code", w.appid, w.secret, code), "")
|
|
if err != nil {
|
|
return
|
|
}
|
|
var resAcc resAccess
|
|
if err = json.Unmarshal(res, &resAcc); err != nil {
|
|
return
|
|
}
|
|
if resAcc.Errcode != 0 {
|
|
return result, errors.New(resAcc.Errmsg)
|
|
}
|
|
result = resAcc.AccessInfo
|
|
return
|
|
}
|
|
|
|
type userInfo struct {
|
|
City string `json:"city"`
|
|
Country string `json:"country"`
|
|
Headimgurl string `json:"headimgurl"`
|
|
Nickname string `json:"nickname"`
|
|
Openid string `json:"openid"`
|
|
Privilege []string `json:"privilege"`
|
|
Province string `json:"province"`
|
|
Sex uint `json:"sex"`
|
|
Unionid string `json:"unionid"`
|
|
}
|
|
|
|
// GetUserInfo @Title 获取微信登录会员信息
|
|
func (w *wxopen) GetUserInfo(accessToken, openId string) (*userInfo, error) {
|
|
res, err := request(get, fmt.Sprintf("https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN", accessToken, openId), "")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result := userInfo{}
|
|
if err := json.Unmarshal(res, &result); err != nil {
|
|
return nil, err
|
|
}
|
|
return &result, nil
|
|
}
|