|
@@ -4,9 +4,13 @@ import (
|
|
|
"fmt"
|
|
|
"github.com/silenceper/wechat/v2"
|
|
|
"github.com/silenceper/wechat/v2/cache"
|
|
|
+ "github.com/silenceper/wechat/v2/credential"
|
|
|
"github.com/silenceper/wechat/v2/officialaccount"
|
|
|
"github.com/silenceper/wechat/v2/officialaccount/config"
|
|
|
+ "github.com/silenceper/wechat/v2/officialaccount/user"
|
|
|
"hongze/hongze_yb/global"
|
|
|
+ "hongze/hongze_yb/models/tables/wx_token"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
var (
|
|
@@ -72,25 +76,55 @@ func GetWxChat() (officialAccount *officialaccount.OfficialAccount) {
|
|
|
Cache: memory,
|
|
|
}
|
|
|
officialAccount = wc.GetOfficialAccount(conf)
|
|
|
+
|
|
|
+ wechatAccessToken := &WechatAccessToken{}
|
|
|
+ officialAccount.SetAccessTokenHandle(wechatAccessToken)
|
|
|
return
|
|
|
}
|
|
|
-func GetUser() {
|
|
|
- wechat := GetWxChat()
|
|
|
- a := &WechatAccessToken{}
|
|
|
- wechat.SetAccessTokenHandle(a)
|
|
|
- user := wechat.GetUser()
|
|
|
- userInfo, err := user.GetUserInfo("oN0jD1S3P-FVosLhq-YiVOXldtRo")
|
|
|
- if err != nil {
|
|
|
- fmt.Println("err:", err)
|
|
|
- }
|
|
|
- fmt.Println(userInfo)
|
|
|
+
|
|
|
+// GetUserInfo 获取微信用户详情
|
|
|
+func GetUserInfo(openid string) (userInfo *user.Info, err error) {
|
|
|
+ wechatClient := GetWxChat()
|
|
|
+ userClient := wechatClient.GetUser()
|
|
|
+ userInfo, err = userClient.GetUserInfo(openid)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
type WechatAccessToken struct {
|
|
|
}
|
|
|
|
|
|
+// GetAccessToken 获取accessToken
|
|
|
func (wechat WechatAccessToken) GetAccessToken() (accessToken string, err error) {
|
|
|
- accessToken = `51_419EOfFPrNWU4FvPI2RVbE-Dgde406YbT0SEpYGIoOXKrqXojpSvLjzXExESYYCEf_2VGwbNZAdmh1TimSgfa9YY-FOjx2gsFEulvonBPZW4KN_eu7Z5gXqlt3tCy7MQo7XnxXg-sFR3ihSTYDVjAIAKPH`
|
|
|
+ wxToken, err := wx_token.GetById()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //如果300s就要过期了,那么就去刷新accessToken
|
|
|
+ if wxToken.ExpiresIn < time.Now().Unix()+300 {
|
|
|
+ tmpAccessToken, expires, tmpErr := getTokenFromServer(WxAppId, WxAppSecret)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var updateCols = []string{"AccessToken", "ExpiresIn"}
|
|
|
+ wxToken.AccessToken = tmpAccessToken
|
|
|
+ wxToken.ExpiresIn = expires - 600 //快过期前10分钟就刷新掉
|
|
|
+ wxToken.Update(updateCols)
|
|
|
+ }
|
|
|
+ accessToken = wxToken.AccessToken
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// getTokenFromServer 服务端获取accessToken
|
|
|
+func getTokenFromServer(appid, wxSecret string) (accessToken string, expires int64, err error) {
|
|
|
+ apiUrl := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"
|
|
|
+ resAccessToken, err := credential.GetTokenFromServer(fmt.Sprintf(apiUrl, appid, wxSecret))
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ expires = resAccessToken.ExpiresIn
|
|
|
+ accessToken = resAccessToken.AccessToken
|
|
|
return
|
|
|
}
|