private void SetPurchaseFailed(IStoreProduct product, StoreTransaction transactionInfo, PurchaseValidationResult validationResult, StorePurchaseError failReason, Exception e = null) { var result = new PurchaseResult(product, transactionInfo, validationResult); if (_purchaseOpCs != null) { if (failReason == StorePurchaseError.UserCanceled) { _purchaseOpCs.SetCanceled(); } else if (e != null) { _purchaseOpCs.SetException(new StorePurchaseException(result, failReason, e)); } else { _purchaseOpCs.SetException(new StorePurchaseException(result, failReason)); } } else { InvokePurchaseFailed(result, failReason, e); ReleaseTransaction(); } }
private void SetPurchaseCompleted(IStoreProduct product, StoreTransaction transactionInfo, PurchaseValidationResult validationResult) { var result = new PurchaseResult(product, transactionInfo, validationResult); if (_purchaseOpCs != null) { _purchaseOpCs.SetResult(result); } else { InvokePurchaseCompleted(result); ReleaseTransaction(); } }
private async void ValidatePurchase(IStoreProduct userProduct, StoreTransaction transactionInfo) { var product = transactionInfo.Product; var resultStatus = PurchaseValidationStatus.Failure; try { _console.TraceEvent(TraceEventType.Verbose, _traceEventPurchase, $"ValidatePurchase: {product.definition.id}, transactionId = {product.transactionID}"); var validationResult = await _delegate.ValidatePurchaseAsync(userProduct, transactionInfo); if (!_disposed) { if (validationResult == null) { // No result returned from the validator means validation succeeded. ConfirmPendingPurchase(product); SetPurchaseCompleted(_purchaseProduct, transactionInfo, validationResult); } else { resultStatus = validationResult.Status; if (resultStatus == PurchaseValidationStatus.Ok) { // The purchase validation succeeded. ConfirmPendingPurchase(product); SetPurchaseCompleted(_purchaseProduct, transactionInfo, validationResult); } else if (resultStatus == PurchaseValidationStatus.Failure) { // The purchase validation failed: confirm to avoid processing it again. ConfirmPendingPurchase(product); SetPurchaseFailed(_purchaseProduct, transactionInfo, validationResult, StorePurchaseError.ReceiptValidationFailed); } else { // Need to re-validate the purchase: do not confirm. SetPurchaseFailed(_purchaseProduct, transactionInfo, validationResult, StorePurchaseError.ReceiptValidationNotAvailable); } } } } catch (Exception e) { // NOTE: Should not really get here (do we need to confirm it in this case?). ConfirmPendingPurchase(product); SetPurchaseFailed(_purchaseProduct, transactionInfo, null, StorePurchaseError.ReceiptValidationFailed, e); } }
public ProductController(IStoreProduct mainStore) { _mainStore = mainStore; }
public bool TryGetValue(string productId, out IStoreProduct product) { ThrowIfInvalidProductId(productId); return(_products.TryGetValue(productId, out product)); }
/// <summary> /// Initializes a new instance of the <see cref="PurchaseResult"/> class. /// </summary> public PurchaseResult(IStoreProduct product, StoreTransaction transactionInfo, PurchaseValidationResult validationResult) { Product = product; TransactionInfo = transactionInfo; ValidationResult = validationResult; }
/// <summary> /// Initializes a new instance of the <see cref="PurchaseResult"/> class. /// </summary> public PurchaseResult(IStoreProduct product) { Product = product; }