wangchuanjin před 5 roky
rodič
revize
3110c1b91c
1 změnil soubory, kde provedl 32 přidání a 22 odebrání
  1. 32 22
      src/jfw/modules/wxtoken/src/main.go

+ 32 - 22
src/jfw/modules/wxtoken/src/main.go

@@ -48,9 +48,11 @@ type accessToken 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 {
@@ -178,17 +180,19 @@ func createAccessToken(appid string) {
 			AllCountT[appid].dayTimes++
 			resp, err := http.Get(weixinHost + "/token?grant_type=client_credential&appid=" + appid + "&secret=" + AllWxs[appid].Appsecret)
 			if err != nil {
-				log.Println(appid, "Get access token failed: ", err)
+				log.Println(appid, "Get access token error", err)
 			} else {
 				defer resp.Body.Close()
 				body, err := ioutil.ReadAll(resp.Body)
 				if err != nil {
-					log.Println(appid, "Read access token failed: ", err)
+					log.Println(appid, "Read access token error", err)
 				} else {
 					var res wxToken
 					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.Expires = time.Now().Add(time.Duration(res.ExpiresIn * 1000 * 1000 * 1000))
 						*token.Lasttime = time.Now().Unix()
@@ -238,7 +242,7 @@ func createJsApiTicket(appid string) {
 		}
 		if time.Since(ticket.Expires).Seconds() >= 0 {
 			t, err := getJsApiTicket(appid, ticketKey)
-			if err == nil {
+			if err == nil && t != nil {
 				ticket = *t
 			}
 		}
@@ -258,29 +262,35 @@ func getJsApiTicket(appid, ticketKey string) (*jsApiTicket, error) {
 		return nil, err
 	}
 	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
 }
 
 func sendGetRequest(appid, reqURL string) ([]byte, error) {
 	for i := 0; i < retryMaxN; i++ {
 		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)
 			if err != nil {
-				log.Println(appid, "get JsApiTicket error", err)
+				log.Println(appid, "Get Request error", err)
 				continue
 			}
 			defer r.Body.Close()
 			reply, err := ioutil.ReadAll(r.Body)
 			if err != nil {
-				log.Println(appid, "Read access token failed: ", err)
+				log.Println(appid, "Read RequestBody error", err)
 				return nil, err
 			}
 			var result struct {
@@ -288,7 +298,7 @@ func sendGetRequest(appid, reqURL string) ([]byte, error) {
 				ErrorMessage string `json:"errmsg,omitempty"`
 			}
 			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
 			}
 			switch result.ErrorCode {
@@ -296,12 +306,12 @@ func sendGetRequest(appid, reqURL string) ([]byte, error) {
 				return reply, nil
 			case 42001, 40001:
 				refreshAccessToken(appid)
-				log.Println(appid, "reget the tocken by ", result.ErrorCode, result.ErrorMessage)
+				log.Println(appid, "reget by", result.ErrorCode, result.ErrorMessage)
 				continue
 			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)
 }