|
@@ -48,9 +48,11 @@ type accessToken struct {
|
|
}
|
|
}
|
|
|
|
|
|
type wxToken struct {
|
|
type wxToken struct {
|
|
- AccessToken string `json:"access_token"`
|
|
|
|
- ExpiresIn int64 `json:"expires_in"`
|
|
|
|
- LastTime int64 `json:"last_time"`
|
|
|
|
|
|
+ ErrorCode int `json:"errcode,omitempty"`
|
|
|
|
+ ErrorMessage string `json:"errmsg,omitempty"`
|
|
|
|
+ AccessToken string `json:"access_token"`
|
|
|
|
+ ExpiresIn int64 `json:"expires_in"`
|
|
|
|
+ LastTime int64 `json:"last_time"`
|
|
}
|
|
}
|
|
|
|
|
|
type wxTicket struct {
|
|
type wxTicket struct {
|
|
@@ -178,17 +180,19 @@ func createAccessToken(appid string) {
|
|
AllCountT[appid].dayTimes++
|
|
AllCountT[appid].dayTimes++
|
|
resp, err := http.Get(weixinHost + "/token?grant_type=client_credential&appid=" + appid + "&secret=" + AllWxs[appid].Appsecret)
|
|
resp, err := http.Get(weixinHost + "/token?grant_type=client_credential&appid=" + appid + "&secret=" + AllWxs[appid].Appsecret)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println(appid, "Get access token failed: ", err)
|
|
|
|
|
|
+ log.Println(appid, "Get access token error", err)
|
|
} else {
|
|
} else {
|
|
defer resp.Body.Close()
|
|
defer resp.Body.Close()
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println(appid, "Read access token failed: ", err)
|
|
|
|
|
|
+ log.Println(appid, "Read access token error", err)
|
|
} else {
|
|
} else {
|
|
var res wxToken
|
|
var res wxToken
|
|
if err := json.Unmarshal(body, &res); err != nil {
|
|
if err := json.Unmarshal(body, &res); err != nil {
|
|
- log.Println(appid, "Parse access token failed: ", err)
|
|
|
|
- } else {
|
|
|
|
|
|
+ log.Println(appid, "Parse access token error", err)
|
|
|
|
+ } else if res.ErrorCode != 0 {
|
|
|
|
+ log.Println(appid, "Reply access token error", res.ErrorCode, res.ErrorMessage)
|
|
|
|
+ } else if res.AccessToken != "" {
|
|
token.Token = res.AccessToken
|
|
token.Token = res.AccessToken
|
|
token.Expires = time.Now().Add(time.Duration(res.ExpiresIn * 1000 * 1000 * 1000))
|
|
token.Expires = time.Now().Add(time.Duration(res.ExpiresIn * 1000 * 1000 * 1000))
|
|
*token.Lasttime = time.Now().Unix()
|
|
*token.Lasttime = time.Now().Unix()
|
|
@@ -238,7 +242,7 @@ func createJsApiTicket(appid string) {
|
|
}
|
|
}
|
|
if time.Since(ticket.Expires).Seconds() >= 0 {
|
|
if time.Since(ticket.Expires).Seconds() >= 0 {
|
|
t, err := getJsApiTicket(appid, ticketKey)
|
|
t, err := getJsApiTicket(appid, ticketKey)
|
|
- if err == nil {
|
|
|
|
|
|
+ if err == nil && t != nil {
|
|
ticket = *t
|
|
ticket = *t
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -258,29 +262,35 @@ func getJsApiTicket(appid, ticketKey string) (*jsApiTicket, error) {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
var ticket jsApiTicket
|
|
var ticket jsApiTicket
|
|
- ticket.Ticket = res.Ticket
|
|
|
|
- ticket.Expires = time.Now().Add(time.Duration(res.ExpiresIn * 1000 * 1000 * 1000))
|
|
|
|
- redis.Put(RedisCode, ticketKey, map[string]interface{}{
|
|
|
|
- "ticket": res.Ticket,
|
|
|
|
- "expires_in": ticket.Expires.Unix(),
|
|
|
|
- }, int(res.ExpiresIn))
|
|
|
|
- log.Println(appid, "获取ticket:", "ticket", res.Ticket, "expires_in", res.ExpiresIn, "expires", ticket.Expires.Unix())
|
|
|
|
|
|
+ if res.Ticket != "" {
|
|
|
|
+ ticket.Ticket = res.Ticket
|
|
|
|
+ ticket.Expires = time.Now().Add(time.Duration(res.ExpiresIn * 1000 * 1000 * 1000))
|
|
|
|
+ redis.Put(RedisCode, ticketKey, map[string]interface{}{
|
|
|
|
+ "ticket": res.Ticket,
|
|
|
|
+ "expires_in": ticket.Expires.Unix(),
|
|
|
|
+ }, int(res.ExpiresIn))
|
|
|
|
+ log.Println(appid, "获取ticket:", "ticket", res.Ticket, "expires_in", res.ExpiresIn, "expires", ticket.Expires.Unix())
|
|
|
|
+ }
|
|
return &ticket, nil
|
|
return &ticket, nil
|
|
}
|
|
}
|
|
|
|
|
|
func sendGetRequest(appid, reqURL string) ([]byte, error) {
|
|
func sendGetRequest(appid, reqURL string) ([]byte, error) {
|
|
for i := 0; i < retryMaxN; i++ {
|
|
for i := 0; i < retryMaxN; i++ {
|
|
token := <-AllWxs[appid].TokenChan
|
|
token := <-AllWxs[appid].TokenChan
|
|
- if time.Since(token.Expires).Seconds() < 0 {
|
|
|
|
|
|
+ if token.Token == "" {
|
|
|
|
+ log.Println(appid, "Request AccessToken is empty")
|
|
|
|
+ } else if time.Since(token.Expires).Seconds() >= 0 {
|
|
|
|
+ log.Println(appid, "Request AccessToken is expire")
|
|
|
|
+ } else {
|
|
r, err := http.Get(reqURL + token.Token)
|
|
r, err := http.Get(reqURL + token.Token)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println(appid, "get JsApiTicket error", err)
|
|
|
|
|
|
+ log.Println(appid, "Get Request error", err)
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
defer r.Body.Close()
|
|
defer r.Body.Close()
|
|
reply, err := ioutil.ReadAll(r.Body)
|
|
reply, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println(appid, "Read access token failed: ", err)
|
|
|
|
|
|
+ log.Println(appid, "Read RequestBody error", err)
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
var result struct {
|
|
var result struct {
|
|
@@ -288,7 +298,7 @@ func sendGetRequest(appid, reqURL string) ([]byte, error) {
|
|
ErrorMessage string `json:"errmsg,omitempty"`
|
|
ErrorMessage string `json:"errmsg,omitempty"`
|
|
}
|
|
}
|
|
if err := json.Unmarshal(reply, &result); err != nil {
|
|
if err := json.Unmarshal(reply, &result); err != nil {
|
|
- log.Println(appid, "Parse JsApiTicket error", err)
|
|
|
|
|
|
+ log.Println(appid, "Parse Reply error", err)
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
switch result.ErrorCode {
|
|
switch result.ErrorCode {
|
|
@@ -296,12 +306,12 @@ func sendGetRequest(appid, reqURL string) ([]byte, error) {
|
|
return reply, nil
|
|
return reply, nil
|
|
case 42001, 40001:
|
|
case 42001, 40001:
|
|
refreshAccessToken(appid)
|
|
refreshAccessToken(appid)
|
|
- log.Println(appid, "reget the tocken by ", result.ErrorCode, result.ErrorMessage)
|
|
|
|
|
|
+ log.Println(appid, "reget by", result.ErrorCode, result.ErrorMessage)
|
|
continue
|
|
continue
|
|
default:
|
|
default:
|
|
- return nil, errors.New(fmt.Sprintf("WeiXin send get request reply[%d]: %s", result.ErrorCode, result.ErrorMessage))
|
|
|
|
|
|
+ return nil, errors.New(fmt.Sprintf("%s WeiXin request reply error: %d %s", appid, result.ErrorCode, result.ErrorMessage))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return nil, errors.New("WeiXin post request too many times:" + reqURL)
|
|
|
|
|
|
+ return nil, errors.New(appid + " WeiXin request too many times:" + reqURL)
|
|
}
|
|
}
|