public void OnPurchaseFailed(PurchaseFailureDescription failure, string json = null)
        {
            m_LastPurchaseFailureDescription = failure;
            m_LastPurchaseErrorCode          = ParseStoreSpecificPurchaseErrorCode(json);

            unity.OnPurchaseFailed(failure);
        }
Beispiel #2
0
        public override void Purchase(ProductDefinition product, string developerPayload)
        {
            m_Bindings.Purchase(product.storeSpecificId, (success, message) =>
            {
                var dic = message.HashtableFromJson();
                if (success)
                {
                    var transactionId   = dic.GetString("GameOrderId");
                    var storeSpecificId = dic.GetString("ProductId");
                    if (!string.IsNullOrEmpty(transactionId))
                    {
                        dic["transactionId"] = transactionId;
                    }

                    if (!string.IsNullOrEmpty(storeSpecificId))
                    {
                        dic["storeSpecificId"] = storeSpecificId;
                    }

                    if (!product.storeSpecificId.Equals(storeSpecificId))
                    {
                        m_Logger.LogFormat(LogType.Error,
                                           "UDPImpl received mismatching product Id for purchase. Expected {0}, received {1}",
                                           product.storeSpecificId, storeSpecificId);
                    }

                    var data = dic.toJson();
                    unity.OnPurchaseSucceeded(product.storeSpecificId, data, transactionId);
                }
                else
                {
                    if (dic.ContainsKey(k_Errorcode) && Convert.ToInt32(dic[k_Errorcode]) == PURCHASE_PENDING_CODE)
                    {
                        if (null != m_DeferredCallback)
                        {
                            OnPurchaseDeferred(product.storeSpecificId);
                        }
                        return;
                    }

                    PurchaseFailureReason reason = (PurchaseFailureReason)Enum.Parse(typeof(PurchaseFailureReason),
                                                                                     k_Unknown);

                    var reasonString = reason.ToString();
                    var errDic       = new Dictionary <string, object> {
                        ["error"] = reasonString
                    };

                    if (dic.ContainsKey("purchaseInfo"))
                    {
                        errDic["purchaseInfo"] = dic["purchaseInfo"];
                    }

                    var errData = errDic.toJson();
                    var pfd     = new PurchaseFailureDescription(product.storeSpecificId, reason, message);
                    unity.OnPurchaseFailed(pfd);
                }
            }, developerPayload);
        }
Beispiel #3
0
        public void OnPurchaseFailed(PurchaseFailureDescription failure, string json = null)
        {
            if (!eventsDisabled)
            {
                SendPurchaseFailedEvent(failure, json);
            }

            lastPurchaseFailureDescription = failure;
            _lastPurchaseErrorCode         = ParseStoreSpecificPurchaseErrorCode(json);

            unity.OnPurchaseFailed(failure);
        }
Beispiel #4
0
        public void OnPurchaseFailed(PurchaseFailureDescription description)
        {
            var product = products.WithStoreSpecificID(description.productId);

            if (null == product)
            {
                m_Logger.LogError("Failed to purchase unknown product {0}", description.productId);
                return;
            }
            m_Logger.Log("onPurchaseFailedEvent({0})", product.definition.id);
            m_Listener.OnPurchaseFailed(product, description.reason);
        }
Beispiel #5
0
        protected void SendPurchaseFailedEvent(PurchaseFailureDescription failure, string json)
        {
#if HIGH_PERMISSION_DATA
            if (promoPayload != null)
            {
                promoPayload["type"] = "iap.purchasefailed";
                promoPayload.Add("purchase", "FAILED");
                if (json != null)
                {
                    promoPayload.Add("failureJSON", json);
                }

                var purchaseEvent = new PurchasingEvent(promoPayload);
                var profileDict   = m_profileData.GetProfileDict();
                var eventjson     = purchaseEvent.FlatJSON(profileDict);

                m_EventQueue.SendEvent(EventDestType.IAP, eventjson); // don't use Ads tracking event here

                promoPayload.Clear();
                promoPayload = null;
            }
            else
            {
                // enriched "organic" purchases here

                Product thisProduct = unity.products.WithStoreSpecificID(failure.productId);

                if (thisProduct != null)
                {
                    var purchaseDict = new Dictionary <string, object>();
                    purchaseDict.Add("type", "iap.purchasefailed");
                    purchaseDict.Add("iap_service", true);
                    purchaseDict.Add("iapPromo", false);
                    purchaseDict.Add("purchase", "FAILED");
                    purchaseDict.Add("productId", thisProduct.definition.id);
                    purchaseDict.Add("storeSpecificId", thisProduct.definition.storeSpecificId);
                    purchaseDict.Add("amount", thisProduct.metadata.localizedPrice);
                    purchaseDict.Add("currency", thisProduct.metadata.isoCurrencyCode);
                    if (json != null)
                    {
                        purchaseDict.Add("failureJSON", json);
                    }

                    var purchaseEvent = new PurchasingEvent(purchaseDict);
                    var profileDict   = ProfileData.Instance(m_Module.util).GetProfileDict();
                    var eventjson     = purchaseEvent.FlatJSON(profileDict);

                    m_EventQueue.SendEvent(EventDestType.IAP, eventjson, eventBaseUrl + "/v1/organic_purchase");
                }
            }
#endif
        }
Beispiel #6
0
        public void OnPurchaseFailed(PurchaseFailureDescription description)
        {
            if (description != null)
            {
                var product = products.WithStoreSpecificID(description.productId);
                if (null == product)
                {
                    m_Logger.LogFormat(LogType.Error, "Failed to purchase unknown product {0}", "productId:" + description.productId + " reason:" + description.reason + " message:" + description.message);
                    return;
                }

                m_Logger.LogFormat(LogType.Warning, "onPurchaseFailedEvent({0})", "productId:" + product.definition.id + " message:" + description.message);
                m_Listener.OnPurchaseFailed(product, description.reason);
            }
        }
        public void onPurchaseFailedEvent(PurchaseFailureDescription description)
        {
            if (!verifyPlatformId(description.ProductId))
            {
                return;
            }

            PurchasableItem item = remapper.getPurchasableItemFromPlatformSpecificId(description.ProductId);

            logger.Log("onPurchaseFailedEvent({0})", item.Id);
            if (null != onPurchaseFailed)
            {
                onPurchaseFailedEvent(item, description.Reason);
            }
        }
        void FakePurchase(ProductDefinition product, string developerPayload)
        {
            purchaseCalled = true;
            // Our billing systems should only keep track of non consumables.
            if (product.type != ProductType.Consumable)
            {
                m_PurchasedProducts.Add(product.storeSpecificId);
            }

            Action <bool, PurchaseFailureReason> handleAllowPurchase =
                (bool allow, PurchaseFailureReason failureReason) =>
            {
                if (allow)
                {
                    base.OnPurchaseSucceeded(product.storeSpecificId, "{ \"this\" : \"is a fake receipt\" }", Guid.NewGuid().ToString());
                }
                else
                {
                    if (failureReason == (PurchaseFailureReason)Enum.Parse(typeof(PurchaseFailureReason), "Unknown"))
                    {
                        failureReason = PurchaseFailureReason.UserCancelled;
                    }

                    PurchaseFailureDescription failureDescription =
                        new PurchaseFailureDescription(product.storeSpecificId, failureReason, "failed a fake store purchase");

                    base.OnPurchaseFailed(failureDescription);
                }
            };

            if (!(StartUI <PurchaseFailureReason> (product, DialogType.Purchase, handleAllowPurchase)))
            {
                // Default non-UI FakeStore purchase behavior is to succeed
                handleAllowPurchase(true, (PurchaseFailureReason)Enum.Parse(typeof(PurchaseFailureReason), "Unknown"));
            }
        }
 public void OnPurchaseFailed(PurchaseFailureDescription purchaseFailureDescription)
 {
     m_StoreCallback?.OnPurchaseFailed(purchaseFailureDescription);
 }
 public void OnPurchaseFailed(PurchaseFailureDescription desc)
 {
     m_Util.RunOnMainThread(() => m_ForwardTo.OnPurchaseFailed(desc));
 }