diff --git a/sdk-intergration/Packages/tysdk/Runtime/TYSDKCallbackManager.cs b/sdk-intergration/Packages/tysdk/Runtime/TYSDKCallbackManager.cs
index 80c948e..0e82232 100644
--- a/sdk-intergration/Packages/tysdk/Runtime/TYSDKCallbackManager.cs
+++ b/sdk-intergration/Packages/tysdk/Runtime/TYSDKCallbackManager.cs
@@ -71,6 +71,49 @@ namespace tysdk
return tcs.Task;
}
+ ///
+ /// 重置已注册 callback 的超时时间:取消先前安排的延时 ,
+ /// 并从当前时刻起在 后触发取消(与构造时传入的延时等价,见 )。
+ ///
+ /// Callback 数据类型
+ /// 新的超时时间;若需立即按超时处理可使用
+ /// 找到未完成 pending 并成功重置则为 true
+ public bool ResetCallbackTimeout(TimeSpan newTimeout) where T : class
+ {
+ if (_disposed)
+ throw new ObjectDisposedException(nameof(TYSDKCallbackManager));
+
+ var callbackId = typeof(T).Name;
+
+ if (!_callbacks.TryGetValue(callbackId, out var entry))
+ {
+ UnityEngine.Debug.LogWarning($"[TYSDKCallbackManager] No pending callback found for type: {callbackId}");
+ return false;
+ }
+
+ if (entry.Task.IsCompleted)
+ {
+ UnityEngine.Debug.LogWarning($"[TYSDKCallbackManager] Callback {callbackId} already completed, cannot reset timeout");
+ return false;
+ }
+
+ var cts = entry.CancellationTokenSource;
+ if (cts == null)
+ return false;
+
+ try
+ {
+ cts.CancelAfter(newTimeout);
+ UnityEngine.Debug.Log($"[TYSDKCallbackManager] Reset timeout for {callbackId} to {newTimeout.TotalSeconds}s");
+ return true;
+ }
+ catch (ObjectDisposedException)
+ {
+ UnityEngine.Debug.LogWarning($"[TYSDKCallbackManager] CancellationTokenSource already disposed for {callbackId}");
+ return false;
+ }
+ }
+
///
/// 触发callback
///
diff --git a/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs b/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs
index 895a370..3e14a70 100644
--- a/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs
+++ b/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs
@@ -20,6 +20,8 @@ namespace tysdk
|___/
=================================================*/
+ private bool _payFirstNegativeHandled;
+
//public async Task Pay(string prodId, string prodPrice, string prodName, int count, string pType, string price_amount_micros =null)
public async Task Pay(SKUDetail prod, int count, float usdprice, JObject purchaseInfo)
{
@@ -76,6 +78,10 @@ namespace tysdk
Debug.LogWarning($"[TYSdkFacade::Pay] Faild {e.Message}");
return new PaymentInfo(){code = "-1"};
}
+ finally
+ {
+ _payFirstNegativeHandled = false;
+ }
#elif UNITY_IOS
@@ -95,6 +101,10 @@ namespace tysdk
Debug.LogWarning($"[TYSdkFacade::Pay] Faild {e.Message}");
return new PaymentInfo(){code = "-1"};
}
+ finally
+ {
+ _payFirstNegativeHandled = false;
+ }
#endif
}
@@ -108,7 +118,16 @@ namespace tysdk
result.msg = jresult["errStr"].ToString();
if(result.code == "-1")
{
- Debug.Log("[TYSdkFacade] pay failed: waiting next pay callback");
+ if (!_payFirstNegativeHandled)
+ {
+ _payFirstNegativeHandled = true;
+ TYSDKCallbackManager.Instance.ResetCallbackTimeout(TimeSpan.FromSeconds(5));
+ Debug.Log("[TYSdkFacade] pay failed (first time): reset timeout to 5s, waiting next pay callback");
+ }
+ else
+ {
+ Debug.Log("[TYSdkFacade] pay failed: waiting next pay callback");
+ }
return;
}
TYSDKCallbackManager.Instance.TryTriggerCallback(result);