public IPromise <bool> Validate(InAppPurchasableItem inAppItem) { var promise = new Promise <bool>(); logger.Log("NullReceiptValidator.Validate - Always returning true"); promise.Resolve(true); return(promise); }
public IPromise <bool> Validate(InAppPurchasableItem inAppItem) { var promise = new Promise <bool>(); if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.WindowsEditor) { promise.Resolve(true); } else { routineRunner.StartCoroutine(RemoteValidationCoro(inAppItem, promise)); } return(promise); }
IEnumerator RemoteValidationCoro(InAppPurchasableItem item, Promise <bool> promise) { var data = new ReceiptValidationData(); var receiptJson = JsonMapper.ToObject(item.receipt); data.receipt = receiptJson["Payload"].ToString(); data.appBundleId = appInfoService.BundleIdentifier; data.iapBundleId = item.id; #if UNITY_ANDROID data.receipt = Convert.ToBase64String(Encoding.UTF8.GetBytes(data.receipt)); data.platform = "Android"; #elif UNITY_IPHONE data.platform = "iOS"; #endif data.nonce = DateTime.Now.ToString(); string validationData = JsonMapper.ToJson(data); Action <ConnectionHandler.RequestResult, string> receiptValidationResponse = (result, responseData) => { logger.Log(Tag, "HandleLoginResponse (result=" + result + ")\nresponse=" + responseData.SSubstring(300)); if (result == ConnectionHandler.RequestResult.Ok) { ReceiptValidationResponse response = JsonMapper.ToObject <ReceiptValidationResponse>(responseData); string encryptedNonce = Sha256(data.nonce); if (response.nonce.Equals(encryptedNonce)) { if (response.verified) { logger.Log(Tag, "Validation successful"); analyticsService.LogEvent(AnalyticsTargets.ANALYTICS_TARGET_FLURRY, Tag, new Dictionary <string, object>() { { "Validation", "successful" } }, false); promise.Resolve(true); } else { logger.LogError(Tag, "Validation failed - not verified"); analyticsService.LogEvent(AnalyticsTargets.ANALYTICS_TARGET_FLURRY, Tag, new Dictionary <string, object>() { { "Validation", "failed" }, { "Reason", "Not verified" } }, false); promise.Resolve(false); } } else { logger.LogError(Tag, "Validation failed - non matching nonce"); analyticsService.LogEvent(AnalyticsTargets.ANALYTICS_TARGET_FLURRY, Tag, new Dictionary <string, object>() { { "Validation", "failed" }, { "Reason", "Non matching nonce" } }, false); promise.Resolve(false); } } else { logger.LogError(Tag, "Purchase Validation Failure"); } }; yield return(_coroutineFactory.StartCoroutine(() => _connectionHandler.SendRequest(ConnectionHandler.RequestType.ReceiptValidation, receiptValidationResponse, validationData))); }
public PurchaseIAPResult(InAppPurchasableItem purchasedItem, PurchaseIAPResultCode result = PurchaseIAPResultCode.Success, BillerErrors error = BillerErrors.NO_ERROR) { this.purchasedItem = purchasedItem; this.result = result; this.error = error; }