fix(iap): 修复苹果IAP重复处理交易的问题
Build docker and publish / build (20.15.1) (push) Successful in 6m26s

添加对已存在订阅的检查逻辑,避免重复处理相同的苹果IAP交易
添加测试恢复接口的示例代码
This commit is contained in:
2025-12-17 04:00:02 -08:00
parent d8f5628bb1
commit d3541a89ae
3 changed files with 124 additions and 1 deletions
@@ -21,4 +21,3 @@ func RestoreAppleTransactionsHandler(svcCtx *svc.ServiceContext) func(c *gin.Con
result.HttpResult(c, map[string]bool{"success": err == nil}, err)
}
}
@@ -81,6 +81,19 @@ func (l *AttachTransactionLogic) Attach(req *types.AttachAppleTransactionRequest
}
}
exp := iapapple.CalcExpire(txPayload.PurchaseDate, duration)
if existTx != nil && existTx.Id > 0 {
token := fmt.Sprintf("iap:%s", txPayload.OriginalTransactionId)
existSub, err := l.svcCtx.UserModel.FindOneSubscribeByToken(l.ctx, token)
if err == nil && existSub != nil && existSub.Id > 0 {
// Already processed, return success
return &types.AttachAppleTransactionResponse{
ExpiresAt: exp.Unix(),
Tier: tier,
}, nil
}
}
sum := sha256.Sum256([]byte(req.SignedTransactionJWS))
jwsHash := hex.EncodeToString(sum[:])
iapTx := &iapmodel.Transaction{