- eventhub
- sys/GetWXToken
This commit is contained in:
@@ -1,8 +1,15 @@
|
||||
package tasks
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/eventhub/syseventhub"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"git.rosy.net.cn/jx-callback/business/model/legacymodel"
|
||||
@@ -36,6 +43,12 @@ type ElmTokenForCompatible struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type CallResult struct {
|
||||
Code string `json:"code"`
|
||||
Desc string `json:"desc"`
|
||||
Data string `json:"data"`
|
||||
}
|
||||
|
||||
func RefreshConfig(configKey string, expiresTime time.Duration, configGetter func() (string, string), configSetter func(value string)) error {
|
||||
sleepGap := expiresTime / 10
|
||||
needRefreshGap := expiresTime * 8 / 10
|
||||
@@ -108,18 +121,23 @@ func RefreshConfig(configKey string, expiresTime time.Duration, configGetter fun
|
||||
|
||||
func RefreshWeixinToken() (err error) {
|
||||
if api.WeixinAPI != nil {
|
||||
err = RefreshConfig("wechat", weixinTokenExpires, func() (string, string) {
|
||||
err = RefreshConfig("wechat", weixinTokenExpires, func() (token string, expireTimeStr string) {
|
||||
globals.SugarLogger.Debugf("RefreshWeixinToken RunMode:%s", beego.BConfig.RunMode)
|
||||
if beego.BConfig.RunMode == "prod" {
|
||||
if tokenInfo, err := api.WeixinAPI.CBRetrieveToken(); err == nil {
|
||||
globals.SugarLogger.Debugf("RefreshWeixinToken tokenInfo:%s", utils.Format4Output(tokenInfo, true))
|
||||
return tokenInfo.AccessToken, ""
|
||||
if globals.IsProductEnv() {
|
||||
if beego.BConfig.RunMode == "prod" {
|
||||
if tokenInfo, err := api.WeixinAPI.CBRetrieveToken(); err == nil {
|
||||
globals.SugarLogger.Debugf("RefreshWeixinToken tokenInfo:%s", utils.Format4Output(tokenInfo, true))
|
||||
token = tokenInfo.AccessToken
|
||||
} else {
|
||||
globals.SugarLogger.Errorf("RefreshWeixinToken RefreshToken failed with error:%v", err)
|
||||
}
|
||||
} else {
|
||||
globals.SugarLogger.Errorf("RefreshWeixinToken RefreshToken failed with error:%v", err)
|
||||
token = getWXTokenFromProd(api.WeixinAPI.CBGetToken())
|
||||
}
|
||||
}
|
||||
return "", ""
|
||||
return token, ""
|
||||
}, func(value string) {
|
||||
syseventhub.SysEventHub.OnNewWXToken(value)
|
||||
api.WeixinAPI.CBSetToken(value)
|
||||
})
|
||||
}
|
||||
@@ -223,3 +241,37 @@ func RefreshYilianyunToken() (err error) {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func getWXTokenFromProd(oldToken string) (token string) {
|
||||
token = oldToken
|
||||
if globals.GetWeixinTokenKey != "" && globals.GetWeixinTokenURL != "" {
|
||||
for {
|
||||
waitSecond := 5 * 60
|
||||
response, err := http.Get(fmt.Sprintf("%s?accessKey=%s&oldToken=%s&waitSecond=%d", globals.GetWeixinTokenURL, globals.GetWeixinTokenKey, oldToken, waitSecond))
|
||||
if err == nil {
|
||||
defer response.Body.Close()
|
||||
if response.StatusCode == http.StatusOK {
|
||||
data, err2 := ioutil.ReadAll(response.Body)
|
||||
if err = err2; err == nil {
|
||||
var result CallResult
|
||||
if err = utils.UnmarshalUseNumber(data, &result); err == nil {
|
||||
if result.Code == "0" {
|
||||
token = strings.Replace(result.Data, "\"", "", -1)
|
||||
break
|
||||
} else {
|
||||
err = fmt.Errorf("return code is:%s", result.Code)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
err = platformapi.ErrHTTPCodeIsNot200
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
globals.SugarLogger.Infof("getWXTokenFromProd failed with error:%v", err)
|
||||
time.Sleep(30 * time.Second)
|
||||
}
|
||||
}
|
||||
}
|
||||
return token
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user