Browse Source

fix:微信token

zqbao 9 months ago
parent
commit
69fcc6f4fa
1 changed files with 36 additions and 15 deletions
  1. 36 15
      services/wechat.go

+ 36 - 15
services/wechat.go

@@ -1,7 +1,7 @@
 package services
 
 import (
-	"errors"
+	"eta/eta_mini_bridge/models"
 	"eta/eta_mini_bridge/utils"
 	"fmt"
 	"time"
@@ -36,27 +36,48 @@ func GetWxChat() (officialAccount *officialaccount.OfficialAccount) {
 
 // GetAccessToken 获取accessToken
 func (wechat WechatAccessToken) GetAccessToken() (accessToken string, err error) {
-	accessToken, err = utils.Rc.RedisString(utils.CACHE_WX_ACCESS_TOKEN_HZ)
-	if accessToken != "" {
+	//如果300s就要过期了,那么就去刷新accessToken
+	wxToken, err := models.GetWxTokenById()
+	if err != nil {
 		return
 	}
+	//如果300s就要过期了,那么就去刷新accessToken
+	if wxToken.ExpiresIn < time.Now().Unix()+300 {
+		tmpAccessToken, expires, tmpErr := getTokenFromServer(utils.DW_WX_APPID, utils.DW_WX_APP_SECRET)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
 
-	// 缓存中没有取到数据,那么就需要强制刷新的accessToken
-	tmpAccessToken, expires, tmpErr := getTokenFromServer(utils.DW_WX_APPID, utils.DW_WX_APP_SECRET)
-	if tmpAccessToken == "" {
-		err = errors.New("获取微信token失败,Err:" + tmpErr.Error())
-		return
-	}
-	redisTimeExpire := time.Duration(expires-600) * time.Second
-	err = utils.Rc.Put(utils.CACHE_WX_ACCESS_TOKEN_HZ, tmpAccessToken, redisTimeExpire)
-	if err != nil {
-		err = errors.New("更新微信token失败")
-		return
+		var updateCols = []string{"access_token", "expires_in"}
+		wxToken.AccessToken = tmpAccessToken
+		wxToken.ExpiresIn = time.Now().Unix() + expires - 600 //快过期前10分钟就刷新掉
+		wxToken.Update(updateCols)
 	}
-	accessToken = tmpAccessToken
+	accessToken = wxToken.AccessToken
 	return
 }
 
+// accessToken, err = utils.Rc.RedisString(utils.CACHE_WX_ACCESS_TOKEN_DW)
+// if accessToken != "" {
+// 	return
+// }
+
+// // 缓存中没有取到数据,那么就需要强制刷新的accessToken
+// tmpAccessToken, _, tmpErr := getTokenFromServer(utils.DW_WX_APPID, utils.DW_WX_APP_SECRET)
+// if tmpAccessToken == "" {
+// 	err = errors.New("获取微信token失败,Err:" + tmpErr.Error())
+// 	return
+// }
+
+// redisTimeExpire := time.Duration(expires-600) * time.Second
+// err = utils.Rc.Put(utils.CACHE_WX_ACCESS_TOKEN_HZ, tmpAccessToken, redisTimeExpire)
+// if err != nil {
+// 	err = errors.New("更新微信token失败")
+// 	return
+// }
+// accessToken = tmpAccessToken
+// return
 // //如果300s就要过期了,那么就去刷新accessToken
 // if wxToken.ExpiresIn < time.Now().Unix()+300 {
 // 	tmpAccessToken, expires, tmpErr := getTokenFromServer(WxAppId, WxAppSecret)