This commit is contained in:
2024-08-17 04:29:48 +00:00
parent a55ef32347
commit 587c31e8cc
6 changed files with 60 additions and 5 deletions

13
user.go
View File

@ -5,6 +5,7 @@ import (
"encoding/json"
"net/http"
"strconv"
"strings"
"time"
"github.com/awa/go-iap/appstore/api"
@ -60,8 +61,8 @@ func queryUserHandler(c echo.Context) error {
}
}
// 查询 vip 表
err = db.MySQL.QueryRow("SELECT IsVIP FROM vip WHERE ID = ?", response.ID).Scan(&response.VIP)
// 查询 vip 表因为可能VIP过期所以要加上时间戳的判断。这里的服务器是东八区时间。
err = db.MySQL.QueryRow("SELECT IsVIP FROM vip WHERE ID = ? and ExpDate >= ?", response.ID, time.Now()).Scan(&response.VIP)
if err == sql.ErrNoRows {
response.VIP = 0 // 默认非VIP
} else if err != nil {
@ -188,6 +189,12 @@ func UpdateOrderByVerify(ID int, AppAcountToken string, OriginTransID string, tr
currentTime := time.Now()
nextDay := time.Now().AddDate(0, 0, Duration)
// 如果是Sandbox交易那么直接使用Transaction中的过期时间注意匹配时区
if strings.EqualFold(string(transantion.Environment), "Sandbox") {
nextDay = time.Unix(transantion.ExpiresDate/1000, 0).In(time.Local)
logger.Debug("Sandbox ExpireDate", zap.Any("ExpireDate", nextDay), zap.Any("NowDate", currentTime))
}
// TODO: transaction.TransactionReason 有新购和续费,需要区分;同一个购买或者续费事件,可能有通知多次,需要排重
var tmpID int
errDup := db.MySQL.QueryRow("SELECT ID from vip where TransactionID = ? and OriginalTransactionID = ? and IsVip = 1 and ExpDate > ?", transantion.TransactionID, transantion.OriginalTransactionId, currentTime).Scan(&tmpID)
@ -196,7 +203,7 @@ func UpdateOrderByVerify(ID int, AppAcountToken string, OriginTransID string, tr
logger.Info("duplicate request", zap.Int("ID", ID), zap.String("AppAcountToken", AppAcountToken), zap.String("OriginTransID", OriginTransID), zap.String("TransactionID", transantion.TransactionID))
return nil
} else if errDup != nil {
logger.Error("query error", zap.Error(errDup), zap.Int("ID", ID), zap.String("AppAcountToken", AppAcountToken), zap.String("OriginTransID", OriginTransID))
logger.Info("prepare to insert record", zap.Int("ID", ID), zap.String("AppAcountToken", AppAcountToken), zap.String("OriginTransID", OriginTransID))
// 这里不返回,继续尝试更新。
}