public void OnPurchaseFailed(Product item, PurchaseFailureReason reason) { Debug.Log("Billing::OnPurchaseFailed:" + item.metadata.localizedTitle); PurchaseIAPResultCode resultCode = PurchaseIAPResultCode.Failed; BillerErrors error = BillerErrors.NO_ERROR; InAppPurchasableItem inApp = CreatePurchasableInAppItem(item); switch (reason) { case PurchaseFailureReason.ExistingPurchasePending: error = BillerErrors.ATTEMPTING_TO_PURCHASE_PRODUCT_WITH_SAME_RECEIPT; break; case PurchaseFailureReason.PaymentDeclined: error = BillerErrors.PAYMENT_DECLINED; break; case PurchaseFailureReason.ProductUnavailable: error = BillerErrors.PRODUCT_UNAVAILABLE; break; case PurchaseFailureReason.PurchasingUnavailable: error = BillerErrors.PURCHASING_UNAVAILABLE; break; case PurchaseFailureReason.SignatureInvalid: error = BillerErrors.REMOTE_VALIDATION_FAILED; break; case PurchaseFailureReason.Unknown: error = BillerErrors.UNKNOWN; break; case PurchaseFailureReason.UserCancelled: resultCode = PurchaseIAPResultCode.Cancelled; break; } _isPurchaseInProgress = false; PurchaseIAPResult result = new PurchaseIAPResult(inApp, resultCode, error); PsdkEventSystem.Instance.NotifyOnBillingPurchased(result); reportPurchaseCampaignResult(false); }
void OnPurchasedDone(PurchaseIAPResult result) { if (result.result != PurchaseIAPResultCode.Success) { return; } CheckAll(); CheckSlot(); CheckFullversion(); #if ABTEST if (globalRecordModel.CurGPType == GPType.None) { CheckABVersionSlot(); } #endif m_UpdateStoreStateSingal.Dispatch(); // SendOnPurchaseFlurry (); }
private void OnIAPPurchaseDone(PurchaseIAPResult iapResult) { if (!IsAutoRestoreInProgress) { return; } var itemKey = PSDKBilling.GetMainId(iapResult.purchasedItem.id); var itemData = StoreConfigData.GetItemData(itemKey); if (itemData == null) { return; } var resultCode = (iapResult.result == PurchaseIAPResultCode.Success) ? BuyItemResultCode.Success : BuyItemResultCode.InAppPurchaseFailed; var buyItemResult = new BuyItemResult(resultCode, iapResult); OnPurchaseDone(itemData, buyItemResult, null); }
private void OnBillingPurchased(PurchaseIAPResult purchaseIAPResult) { if (purchaseIAPResult.result == PurchaseIAPResultCode.Success && purchaseIAPResult.error == BillerErrors.NO_ERROR) { if (PSDKMgr.Instance.GetBilling().IsNoAdsItem(purchaseIAPResult.purchasedItem.id)) { DisableAdsPermanently(); } if (OnPurchaseOrRestoreSucceeded != null) { OnPurchaseOrRestoreSucceeded(purchaseIAPResult.purchasedItem, PSDKMgr.Instance.GetBilling().IsRestoreInProgress()); } } else if (purchaseIAPResult.result == PurchaseIAPResultCode.Failed) { if (OnPurchaseFailed != null) { OnPurchaseFailed(purchaseIAPResult.purchasedItem); } } }
internal void OnValidPurchaseResponseEvent(string price, string currency, string itemId, bool isValid) { Debug.Log("Billing::OnValidPurchaseResponseEvent: Receipt validation result : " + isValid); PurchaseIAPResult result; if (isValid) { result = new PurchaseIAPResult(_iapInValidation, PurchaseIAPResultCode.Success, BillerErrors.NO_ERROR); SavePurchaseLocally(_iapInValidation.id); if (IsNoAdsItem(_iapInValidation.id)) { Debug.Log("Billing::OnValidPurchaseResponseEvent IsNoAdsItem=true calling PurchaseAd"); PSDKMgr.Instance.PurchaseAd(); } else { Debug.Log("Billing::OnValidPurchaseResponseEvent IsNoAdsItem=false"); } } else { Debug.Log("Billing::OnValidPurchaseResponseEvent item is not valid"); result = new PurchaseIAPResult(_iapInValidation, PurchaseIAPResultCode.Failed, BillerErrors.REMOTE_VALIDATION_FAILED); } PsdkEventSystem.Instance.NotifyOnBillingPurchased(result); _isPurchaseInProgress = false; _storeController.ConfirmPendingPurchase(_iapInValidationArgs.purchasedProduct); ResetPurchasableItem(_iapInValidation); _iapInValidationArgs = null; }
private void onBillingPurchased(PurchaseIAPResult result) { Debug.Log("PurchaseResult - " + result.purchasedItem.id + " - " + result.result.ToString()); }
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e) { Debug.Log("Billing::Processing Purchase: " + e.purchasedProduct.definition.id); Debug.Log("Billing::Receipt: " + e.purchasedProduct.receipt); Debug.Log("Billing::Transaction Id: " + e.purchasedProduct.transactionID); _iapInValidation = CreatePurchasableInAppItem(e); _iapInValidationArgs = e; // If restore is in progress - Skip receipt validation ! We have to do this because the server will not validate a receipt that has already been validated in the past if (_isRestoreInProgress) { // Indicate we have handled this purchase, we will not be informed of it again. Debug.Log("Billing::ProcessPurchase : Skipping receipt validation since restore is in progress"); if (IsNoAdsItem(_iapInValidation.id)) { Debug.Log("Billing::ProcessPurchase : IsNoAdsItem=true calling PurchaseAd"); PSDKMgr.Instance.PurchaseAd(); } else { Debug.Log("Billing::ProcessPurchase : IsNoAdsItem=false"); } PurchaseIAPResult result = new PurchaseIAPResult(_iapInValidation, PurchaseIAPResultCode.Success, BillerErrors.NO_ERROR); SavePurchaseLocally(_iapInValidation.id); PsdkEventSystem.Instance.NotifyOnBillingPurchased(result); _isPurchaseInProgress = false; PSDKMgr.Instance.GetInAppPurchase().ItemPurchased(e.purchasedProduct.definition.storeSpecificId); return(PurchaseProcessingResult.Complete); } Dictionary <string, object> recieptJson = Json.Deserialize(_iapInValidation.receipt) as Dictionary <string, object>; string payload = recieptJson.Get <string>("Payload"); string purchaseToken = null; #if UNITY_ANDROID if (payload != null) { Dictionary <string, object> tmp = Json.Deserialize(payload) as Dictionary <string, object>; if (tmp != null) { string tmpStr = tmp.Get <string> ("json"); if (tmpStr != null) { Dictionary <string, object> innerTmp = Json.Deserialize(tmpStr) as Dictionary <string, object>; if (innerTmp != null) { purchaseToken = innerTmp.Get <string> ("purchaseToken"); } else { Debug.Log("ProcessPurchase failed to Deserialize json"); } } else { Debug.Log("ProcessPurchase failed to find json attribut in payload"); } } else { Debug.Log("ProcessPurchase failed to Deserialize payload"); } } else { Debug.Log("ProcessPurchase failed to find payload attribute"); } #else purchaseToken = payload; #endif if (purchaseToken != null) { Debug.Log("ProcessPurchase purchaseToken: " + purchaseToken); PSDKMgr.Instance.ValidateReceiptAndReport(purchaseToken, _iapInValidation.localizedPrice, _iapInValidation.currency, _iapInValidation.id); } else { Debug.Log("ProcessPurchase purchaseToken was not found."); } reportPurchaseCampaignResult(true); OnValidPurchaseResponseEvent(_iapInValidation.localizedPrice, _iapInValidation.currency, _iapInValidation.id, true); if (!IsConsumable(e.purchasedProduct.definition.storeSpecificId)) { PSDKMgr.Instance.GetInAppPurchase().ItemPurchased(e.purchasedProduct.definition.storeSpecificId); } return(PurchaseProcessingResult.Complete); }