|
@@ -3,8 +3,10 @@ package middleware
|
|
|
import (
|
|
|
"fmt"
|
|
|
"sfbase/global"
|
|
|
+ "sfbase/redis"
|
|
|
sutils "sfbase/utils"
|
|
|
-
|
|
|
+ "sfis/db"
|
|
|
+ "sfis/model"
|
|
|
"sfis/model/response"
|
|
|
"sfis/utils"
|
|
|
"strconv"
|
|
@@ -40,7 +42,7 @@ func TokenAuth() gin.HandlerFunc {
|
|
|
context.Abort()
|
|
|
return
|
|
|
}
|
|
|
- productID = 1000
|
|
|
+ // productID = 1000
|
|
|
token = context.Request.Header.Get("token")
|
|
|
timestamp = context.Request.Header.Get("timestamp")
|
|
|
appID = context.PostForm("app_id")
|
|
@@ -94,9 +96,35 @@ func TokenAuth() gin.HandlerFunc {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ userProduct := &model.UserProduct{}
|
|
|
+ db.GetSFISDB().First(userProduct, &model.UserProduct{AppID: appID, ProductID: productID})
|
|
|
+ //校验是否过期
|
|
|
+ end := userProduct.EndAt
|
|
|
+ loc, _ := time.LoadLocation("Local")
|
|
|
+ endTimes := int64(0)
|
|
|
+ if endTime, err := time.ParseInLocation("2006-01-02 15:04:05", end, loc); err == nil {
|
|
|
+ endTimes = endTime.Unix()
|
|
|
+ }
|
|
|
+ if now > endTimes {
|
|
|
+ response.FailWithDetailed(response.InterfaceExpired, nil, "剩余量已过期", context)
|
|
|
+ context.Abort()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //校验每日调用上限
|
|
|
+ limittodaykey := fmt.Sprintf("limittoday_%d_%d_%s", time.Now().Day(), productID, appID)
|
|
|
+ limittoday := redis.GetInt("limit", limittodaykey)
|
|
|
+ if limittoday > userProduct.CallTimesLimitDay { //当天调用超过次数
|
|
|
+ response.FailWithDetailed(response.MoreThanEveryDayDataNumberLimit, nil, "请求超过每日调用总量限制", context)
|
|
|
+ context.Abort()
|
|
|
+ return
|
|
|
+ } else {
|
|
|
+ if limittoday == 0 {
|
|
|
+ _, max := sutils.GetDayMinMax(time.Now())
|
|
|
+ redis.Put("limit", limittodaykey, 0, int(max-now))
|
|
|
+ }
|
|
|
+ }
|
|
|
context.Set("appID", appID)
|
|
|
context.Set("productID", productID)
|
|
|
context.Set("requestIP", requestIP)
|
|
|
-
|
|
|
}
|
|
|
}
|