public void OnPurchaseFailed(PurchaseFailureDescription failure, string json = null) { m_LastPurchaseFailureDescription = failure; m_LastPurchaseErrorCode = ParseStoreSpecificPurchaseErrorCode(json); unity.OnPurchaseFailed(failure); }
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); }
public void OnPurchaseFailed(PurchaseFailureDescription failure, string json = null) { if (!eventsDisabled) { SendPurchaseFailedEvent(failure, json); } lastPurchaseFailureDescription = failure; _lastPurchaseErrorCode = ParseStoreSpecificPurchaseErrorCode(json); unity.OnPurchaseFailed(failure); }
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); }
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 }
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)); }