Пример #1
0
        /// <summary>
        /// Consume a purchase with a purchase token.
        /// </summary>
        /// <param name="productId">Id or Sku of product</param>
        /// <param name="purchaseToken">Original Purchase Token</param>
        /// <returns>If consumed successful</returns>
        /// <exception cref="InAppBillingPurchaseException">If an error occures during processing</exception>
        public async override Task <InAppBillingPurchase> ConsumePurchaseAsync(string productId, string purchaseToken)
        {
            var result = await CurrentAppMock.ReportConsumableFulfillmentAsync(InTestingMode, productId, new Guid(purchaseToken));

            switch (result)
            {
            case FulfillmentResult.ServerError:
                throw new InAppBillingPurchaseException(PurchaseError.AppStoreUnavailable);

            case FulfillmentResult.NothingToFulfill:
                throw new InAppBillingPurchaseException(PurchaseError.ItemUnavailable);

            case FulfillmentResult.PurchasePending:
            case FulfillmentResult.PurchaseReverted:
                throw new InAppBillingPurchaseException(PurchaseError.GeneralError);

            case FulfillmentResult.Succeeded:
                return(new InAppBillingPurchase
                {
                    Id = purchaseToken,
                    AutoRenewing = false,
                    Payload = string.Empty,
                    PurchaseToken = purchaseToken,
                    ProductId = productId,
                    State = PurchaseState.Purchased,
                    TransactionDateUtc = DateTime.UtcNow
                });

            default:
                return(null);
            }
        }
Пример #2
0
        /// <summary>
        /// Consume a purchase with a purchase token.
        /// </summary>
        /// <param name="productId">Id or Sku of product</param>
        /// <param name="transactionIdentifier">Original Purchase Token</param>
        /// <returns>If consumed successful</returns>
        /// <exception cref="InAppBillingPurchaseException">If an error occures during processing</exception>
        public async override Task <bool> ConsumePurchaseAsync(string productId, string transactionIdentifier)
        {
            var result = await CurrentAppMock.ReportConsumableFulfillmentAsync(InTestingMode, productId, new Guid(transactionIdentifier));

            return(result switch
            {
                FulfillmentResult.ServerError => throw new InAppBillingPurchaseException(PurchaseError.AppStoreUnavailable),
                FulfillmentResult.NothingToFulfill => throw new InAppBillingPurchaseException(PurchaseError.ItemUnavailable),
                FulfillmentResult.PurchasePending or FulfillmentResult.PurchaseReverted => throw new InAppBillingPurchaseException(PurchaseError.GeneralError),
                FulfillmentResult.Succeeded => true,
                _ => false,
            });
Пример #3
0
        /// <summary>
        /// Consume a purchase
        /// </summary>
        /// <param name="productId">Id/Sku of the product</param>
        /// <param name="payload">Developer specific payload of original purchase</param>
        /// <param name="itemType">Type of product being consumed.</param>
        /// <param name="verifyPurchase">Verify Purchase implementation</param>
        /// <returns>If consumed successful</returns>
        /// <exception cref="InAppBillingPurchaseException">If an error occures during processing</exception>
        public async override Task <InAppBillingPurchase> ConsumePurchaseAsync(string productId, ItemType itemType, string payload, IInAppBillingVerifyPurchase verifyPurchase = null)
        {
            var items = await CurrentAppMock.GetAvailableConsumables(InTestingMode);

            var consumable = items.FirstOrDefault(i => i.ProductId == productId);

            if (consumable == null)
            {
                throw new InAppBillingPurchaseException(PurchaseError.ItemUnavailable);
            }

            var result = await CurrentAppMock.ReportConsumableFulfillmentAsync(InTestingMode, productId, consumable.TransactionId);

            switch (result)
            {
            case FulfillmentResult.ServerError:
                throw new InAppBillingPurchaseException(PurchaseError.GeneralError);

            case FulfillmentResult.NothingToFulfill:
                throw new InAppBillingPurchaseException(PurchaseError.ItemUnavailable);

            case FulfillmentResult.PurchasePending:
            case FulfillmentResult.PurchaseReverted:
                throw new InAppBillingPurchaseException(PurchaseError.GeneralError);

            case FulfillmentResult.Succeeded:
                return(new InAppBillingPurchase
                {
                    AutoRenewing = false,
                    Id = consumable.TransactionId.ToString(),
                    Payload = payload,
                    ProductId = consumable.ProductId,
                    PurchaseToken = consumable.TransactionId.ToString(),
                    State = PurchaseState.Purchased,
                    TransactionDateUtc = DateTime.UtcNow
                });

            default:
                return(null);
            }
        }
Пример #4
0
        /// <summary>
        /// Consume a purchase with a purchase token.
        /// </summary>
        /// <param name="productId">Id or Sku of product</param>
        /// <param name="purchaseToken">Original Purchase Token</param>
        /// <returns>If consumed successful</returns>
        /// <exception cref="InAppBillingPurchaseException">If an error occures during processing</exception>
        public async override Task <bool> ConsumePurchaseAsync(string productId, string purchaseToken)
        {
            var result = await CurrentAppMock.ReportConsumableFulfillmentAsync(InTestingMode, productId, new Guid(purchaseToken));

            switch (result)
            {
            case FulfillmentResult.ServerError:
                throw new InAppBillingPurchaseException(PurchaseError.AppStoreUnavailable);

            case FulfillmentResult.NothingToFulfill:
                throw new InAppBillingPurchaseException(PurchaseError.ItemUnavailable);

            case FulfillmentResult.PurchasePending:
            case FulfillmentResult.PurchaseReverted:
                throw new InAppBillingPurchaseException(PurchaseError.GeneralError);

            case FulfillmentResult.Succeeded:
                return(true);

            default:
                return(false);
            }
        }