commit
7047ef642d
@ -0,0 +1,37 @@
|
|||||||
|
package wechat
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
post = "POST"
|
||||||
|
get = "GET"
|
||||||
|
)
|
||||||
|
|
||||||
|
var client = &http.Client{}
|
||||||
|
|
||||||
|
// @Title 请求
|
||||||
|
func request(method, url, data string, headers ...map[string]string) ([]byte, error) {
|
||||||
|
reqest, err := http.NewRequest(method, url, strings.NewReader(data))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(headers) > 0 {
|
||||||
|
for key, value := range headers[0] {
|
||||||
|
reqest.Header.Add(key, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response, err := client.Do(reqest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
result, err := io.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
@ -0,0 +1,75 @@
|
|||||||
|
package wechat
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Wechat = &wechat{}
|
||||||
|
|
||||||
|
type wechat struct {
|
||||||
|
appid string
|
||||||
|
secret string
|
||||||
|
}
|
||||||
|
|
||||||
|
type AuthAccessToken struct {
|
||||||
|
AccessToken string `json:"access_token"`
|
||||||
|
ExpiresIn int64 `json:"expires_in"`
|
||||||
|
Openid string `json:"openid"`
|
||||||
|
RefreshToken string `json:"refresh_token"`
|
||||||
|
Scope string `json:"scope"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// InitWechat @Title 初始化
|
||||||
|
func InitWechat(appid, secret string) *wechat {
|
||||||
|
Wechat.appid = appid
|
||||||
|
Wechat.secret = secret
|
||||||
|
return Wechat
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetOpenId @Title 获取openId
|
||||||
|
func (w *wechat) GetOpenId(code string) string {
|
||||||
|
accessToken, err := w.GetAccessToken(code)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return accessToken.Openid
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAccessToken @Title 获取微信验证结构体
|
||||||
|
func (w *wechat) GetAccessToken(code string) (*AuthAccessToken, 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 nil, err
|
||||||
|
}
|
||||||
|
result := AuthAccessToken{}
|
||||||
|
if err := json.Unmarshal(res, &result); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
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 *wechat) 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
|
||||||
|
}
|
Loading…
Reference in new issue