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;
 }
Beispiel #5
0
 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;
 }