u
This commit is contained in:
1 parent
6300778150
commit
e893ef2e48
27 files changed
+870
-33
No files matched your search
@@ -0,0 +1,102 @@
|
||||
package wechat
|
||||
|
||||
import (
|
||||
"allapp-go/pkg/common"
|
||||
"allapp-go/pkg/requestx"
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"github.com/gofiber/fiber/v3/client"
|
||||
)
|
||||
|
||||
type jwtManager struct {
|
||||
appid string
|
||||
secret string
|
||||
}
|
||||
|
||||
var (
|
||||
manager *jwtManager
|
||||
once sync.Once
|
||||
)
|
||||
|
||||
func Init(appid string, secret string) {
|
||||
once.Do(func() {
|
||||
manager = &jwtManager{
|
||||
appid: appid,
|
||||
secret: secret,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func getManager() *jwtManager {
|
||||
if manager == nil {
|
||||
panic("wechat未初始化,请先调用Init")
|
||||
}
|
||||
return manager
|
||||
}
|
||||
|
||||
func GetWechatAccess(code string) (openid string, accessToken string, err error) {
|
||||
bodyData, bodyCode, err := requestx.Get(
|
||||
"https://api.weixin.qq.com/sns/oauth2/access_token",
|
||||
client.Config{
|
||||
Param: map[string]string{
|
||||
"appid": getManager().appid,
|
||||
"secret": getManager().secret,
|
||||
"code": code,
|
||||
"grant_type": "authorization_code",
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
if bodyCode != 200 {
|
||||
return "", "", fmt.Errorf("微信Http请求失败: %d", bodyCode)
|
||||
}
|
||||
|
||||
accessMap, err := common.JSONStringToMap(bodyData)
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
accessToken, _ = accessMap["access_token"].(string)
|
||||
openid, _ = accessMap["openid"].(string)
|
||||
|
||||
if accessToken == "" || openid == "" {
|
||||
return "", "", fmt.Errorf("获取微信登录凭证失败: %s", bodyData)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func GetWechatUserInfo(accessToken, openid string) (nickname, avatar string, err error) {
|
||||
bodyData, bodyCode, err := requestx.Get(
|
||||
"https://api.weixin.qq.com/sns/userinfo",
|
||||
client.Config{
|
||||
Param: map[string]string{
|
||||
"access_token": accessToken,
|
||||
"openid": openid,
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
if bodyCode != 200 {
|
||||
return "", "", fmt.Errorf("微信Http请求失败")
|
||||
}
|
||||
|
||||
userMap, err := common.JSONStringToMap(bodyData)
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
nickname, _ = userMap["nickname"].(string)
|
||||
avatar, _ = userMap["headimgurl"].(string)
|
||||
|
||||
return
|
||||
}
|
||||
Reference in new issue
Block a user