|
@@ -1,9 +1,7 @@
|
|
|
package wechat
|
|
|
|
|
|
import (
|
|
|
- "context"
|
|
|
"encoding/json"
|
|
|
- "errors"
|
|
|
"eta/eta_mini_api/models"
|
|
|
"eta/eta_mini_api/services/alarm_msg"
|
|
|
"eta/eta_mini_api/utils"
|
|
@@ -12,7 +10,6 @@ import (
|
|
|
"net/http"
|
|
|
"time"
|
|
|
|
|
|
- "github.com/go-redis/redis/v8"
|
|
|
"github.com/silenceper/wechat/v2"
|
|
|
"github.com/silenceper/wechat/v2/cache"
|
|
|
"github.com/silenceper/wechat/v2/credential"
|
|
@@ -32,13 +29,10 @@ type WechatAccessToken struct {
|
|
|
|
|
|
func GetWxChat() (officialAccount *officialaccount.OfficialAccount) {
|
|
|
wc := wechat.NewWechat()
|
|
|
- // minConf, _ := models.GetMiniConf()
|
|
|
memory := cache.NewMemory()
|
|
|
conf := &config.Config{
|
|
|
- AppID: utils.DW_WX_APPID,
|
|
|
- AppSecret: utils.DW_WX_APP_SECRET,
|
|
|
- // AppID: minConf["WxAppId"],
|
|
|
- // AppSecret: minConf["WxAppSecret"],
|
|
|
+ AppID: utils.DW_WX_APPID,
|
|
|
+ AppSecret: utils.DW_WX_APP_SECRET,
|
|
|
Token: "",
|
|
|
EncodingAESKey: "",
|
|
|
Cache: memory,
|
|
@@ -53,48 +47,59 @@ var DefaultKey = "zcmRedis"
|
|
|
|
|
|
// GetAccessToken 获取accessToken
|
|
|
func (wechat WechatAccessToken) GetAccessToken() (accessToken string, err error) {
|
|
|
- accessToken, err = utils.Redis.Get(context.TODO(), utils.CACHE_WX_ACCESS_TOKEN_DW).Result()
|
|
|
- // wxToken, err := models.GetWxTokenById()
|
|
|
- if err != nil && err != redis.Nil {
|
|
|
+ wxToken, err := models.GetWxTokenById()
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
- minConf, _ := models.GetMiniConf()
|
|
|
- // 缓存中没有取到数据,那么就需要强制刷新的accessToken
|
|
|
- tmpAccessToken, expires, tmpErr := getTokenFromServer(minConf["WxAppId"], minConf["WxAppSecret"])
|
|
|
- if tmpAccessToken == "" {
|
|
|
- err = errors.New("获取微信token失败,Err:" + tmpErr.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- redisTimeExpire := time.Duration(expires-600) * time.Second
|
|
|
- err = utils.Redis.SetEX(context.TODO(), utils.CACHE_WX_ACCESS_TOKEN_DW, tmpAccessToken, redisTimeExpire).Err()
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
- err = utils.Redis.HSet(context.TODO(), DefaultKey, utils.CACHE_WX_ACCESS_TOKEN_DW, true).Err()
|
|
|
- // err = utils.Redis.Put(utils.CACHE_WX_ACCESS_TOKEN_HZ, tmpAccessToken, redisTimeExpire)
|
|
|
- if err != nil {
|
|
|
- err = errors.New("更新微信token失败")
|
|
|
- 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
|
|
|
+ }
|
|
|
+
|
|
|
+ var updateCols = []string{"access_token", "expires_in"}
|
|
|
+ wxToken.AccessToken = tmpAccessToken
|
|
|
+ wxToken.ExpiresIn = time.Now().Unix() + expires - 600 //快过期前10分钟就刷新掉
|
|
|
+ wxToken.Update(updateCols)
|
|
|
}
|
|
|
+ accessToken = wxToken.AccessToken
|
|
|
return
|
|
|
- // //如果300s就要过期了,那么就去刷新accessToken
|
|
|
- // if wxToken.ExpiresIn < time.Now().Unix()+300 {
|
|
|
- // tmpAccessToken, expires, tmpErr := getTokenFromServer(utils.HZ_WX_APPID, utils.HZ_WX_APP_SECRET)
|
|
|
- // if tmpErr != nil {
|
|
|
- // err = tmpErr
|
|
|
- // return
|
|
|
- // }
|
|
|
-
|
|
|
- // var updateCols = []string{"access_token", "expires_in"}
|
|
|
- // wxToken.AccessToken = tmpAccessToken
|
|
|
- // wxToken.ExpiresIn = expires - 600 //快过期前10分钟就刷新掉
|
|
|
- // wxToken.Update(updateCols)
|
|
|
- // }
|
|
|
- // accessToken = wxToken.AccessToken
|
|
|
- // return
|
|
|
}
|
|
|
|
|
|
+// accessToken, err = utils.Redis.Get(context.TODO(), utils.CACHE_WX_ACCESS_TOKEN_DW).Result()
|
|
|
+// // wxToken, err := models.GetWxTokenById()
|
|
|
+// if err != nil && err != redis.Nil {
|
|
|
+// return
|
|
|
+// }
|
|
|
+
|
|
|
+// models.GetWxTokenById()
|
|
|
+// minConf, _ := models.GetMiniConf()
|
|
|
+// // 缓存中没有取到数据,那么就需要强制刷新的accessToken
|
|
|
+// tmpAccessToken, expires, tmpErr := getTokenFromServer(minConf["WxAppId"], minConf["WxAppSecret"])
|
|
|
+//
|
|
|
+// if tmpAccessToken == "" {
|
|
|
+// err = errors.New("获取微信token失败,Err:" + tmpErr.Error())
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// redisTimeExpire := time.Duration(expires-600) * time.Second
|
|
|
+// err = utils.Redis.SetEX(context.TODO(), utils.CACHE_WX_ACCESS_TOKEN_DW, tmpAccessToken, redisTimeExpire).Err()
|
|
|
+//
|
|
|
+// if err != nil {
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// err = utils.Redis.HSet(context.TODO(), DefaultKey, utils.CACHE_WX_ACCESS_TOKEN_DW, true).Err()
|
|
|
+// // err = utils.Redis.Put(utils.CACHE_WX_ACCESS_TOKEN_HZ, tmpAccessToken, redisTimeExpire)
|
|
|
+//
|
|
|
+// if err != nil {
|
|
|
+// err = errors.New("更新微信token失败")
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// 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"
|