feat: 支付验签框架 — 策略模式 + 装饰器重试
- 新增 IPaymentVerifier 接口 (Verify + Consume),渠道无关 - 新增 PaymentVerifierFactory 按 Channel 分发 - 新增 FlexionPaymentVerifier: HTTP 验签 + 线性 backoff 重试 - 新增 DummyPaymentVerifier: 占位验签实现 - 新增 RetryablePaymentVerifier: 装饰器,流程级重试 - TYSdkFacade_Pay: PayResult 增加验签分支,先验签后消费再回调 - TYSdkModel: PaymentInfo 增加 verified 字段 - UnityBridgeFunc: 移除 ConsumeFlexionPurchase(职责收归 Verifier) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -128,7 +128,47 @@ namespace tysdk
|
||||
}
|
||||
return;
|
||||
}
|
||||
TYSDKCallbackManager.Instance.TryTriggerCallback(result);
|
||||
var verifier = PaymentVerifierFactory.GetVerifier();
|
||||
if (verifier != null && !string.IsNullOrEmpty(result.purchaseJson))
|
||||
{
|
||||
_VerifyPurchase(result, verifier);
|
||||
}
|
||||
else
|
||||
{
|
||||
TYSDKCallbackManager.Instance.TryTriggerCallback(result);
|
||||
}
|
||||
}
|
||||
|
||||
private async void _VerifyPurchase(PaymentInfo result, IPaymentVerifier verifier)
|
||||
{
|
||||
TYSDKCallbackManager.Instance.ResetCallbackTimeout<PaymentInfo>(TimeSpan.FromSeconds(60));
|
||||
try
|
||||
{
|
||||
var verifyResult = await verifier.Verify(result);
|
||||
if (verifyResult.success)
|
||||
{
|
||||
result.verified = true;
|
||||
if (!string.IsNullOrEmpty(result.purchaseToken))
|
||||
{
|
||||
verifier.Consume(result.purchaseToken);
|
||||
}
|
||||
TYSDKCallbackManager.Instance.TryTriggerCallback(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[TYSdkFacade] Payment verification failed: " + verifyResult.msg);
|
||||
result.code = "-1";
|
||||
result.msg = "verification_failed: " + verifyResult.msg;
|
||||
TYSDKCallbackManager.Instance.TryTriggerCallback(result);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError("[TYSdkFacade] Verification exception: " + e.Message);
|
||||
result.code = "-1";
|
||||
result.msg = "verification_error: " + e.Message;
|
||||
TYSDKCallbackManager.Instance.TryTriggerCallback(result);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ProductListInfo> GetSKUList()
|
||||
|
||||
Reference in New Issue
Block a user