iap
This commit is contained in:
2
comm.go
2
comm.go
@ -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
4
iap.go
@ -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))
|
||||
|
||||
|
||||
7
main.go
7
main.go
@ -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
39
service.sh
Normal 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
13
user.go
@ -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))
|
||||
// 这里不返回,继续尝试更新。
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user