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

BIN
aigrammar

Binary file not shown.

View File

@ -9,6 +9,8 @@ const (
KEY_HEADER_TIMEZONE = "timezone"
KEY_HEADER_SECONDSFROMGMT = "secondsfromgmt"
KEY_LOCAL_TIMEZONE = "Asia/Shanghai"
// 定义每日免费次数
DAILY_FREE_COUNT = 3

4
iap.go
View File

@ -75,7 +75,7 @@ func IapVerify(c echo.Context) error {
if err := json.Unmarshal([]byte(request.ReceiptData), &jsonObj); err != nil {
logger.Debug("receiptdata from request", zap.Any("receiptdata", request.ReceiptData)) // 打印日志
} else {
logger.Debug("receiptdata from request", zap.Any("receiptdata", jsonObj)) // 打印日志
logger.Error("receiptdata from request", zap.Any("receiptdata", request.ReceiptData)) // 打印日志
}
var isSandBox = true
@ -105,7 +105,7 @@ func IapVerify(c echo.Context) error {
return echo.NewHTTPError(http.StatusInternalServerError, "ParseSignedTransaction error")
}
logger.Debug("transantion", zap.Any("transantion", transantion)) // 打印日志
logger.Debug("transantion", zap.Any("transantion", transantion), zap.Any("request", request)) // 打印日志
//buff, _ := json.Marshal(&transantion)
//fmt.Println(string(buff))

View File

@ -21,7 +21,14 @@ import (
var jwtSigningKey []byte
func main() {
//检查时区配置,需要包含东八区
_, err := time.LoadLocation(KEY_LOCAL_TIMEZONE)
if err != nil {
fmt.Println("Error loading location:", err)
return
}
// 获取配置
configManager, err := GetConfigManager()
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to load config: %v\n", err)

39
service.sh Normal file
View File

@ -0,0 +1,39 @@
#!/bin/bash
# 确保脚本使用一个参数
if [ $# -ne 1 ]; then
echo "Usage: $0 {start|stop|restart}"
exit 1
fi
# 定义程序的目录路径
program_dir="/usr/local/aigrammar"
program_name="aigrammar"
log_file="output.log"
case "$1" in
start)
echo "Starting $program_name..."
cd $program_dir
nohup ./$program_name > $log_file 2>&1 &
echo "$program_name started."
;;
stop)
echo "Stopping $program_name..."
killall $program_name
echo "$program_name stopped."
;;
restart)
echo "Restarting $program_name..."
killall $program_name
sleep 2
cd $program_dir
nohup ./$program_name > $log_file 2>&1 &
echo "$program_name restarted."
;;
*)
echo "Unknown command: $1"
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac

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))
// 这里不返回,继续尝试更新。
}