public bool ShouldOfferService(OwnedPurchasesResult result, String productId) { if (null == result) { Log.Error(TAG, "OwnedPurchasesResult is null"); return(false); } IList <String> inAppPurchaseDataList = result.InAppPurchaseDataList; foreach (String data in inAppPurchaseDataList) { try { InAppPurchaseData inAppPurchaseData = new InAppPurchaseData(data); if (productId.Equals(inAppPurchaseData.ProductId)) { return(inAppPurchaseData.IsSubValid); } } catch (JSONException e) { Log.Error(TAG, "parse InAppPurchaseData JSONException", e); return(false); } } return(false); }
public void ObtainOwnedPurchases() { Debug.Log("HMSP: ObtainOwnedPurchaseRequest"); OwnedPurchasesReq ownedPurchasesReq = new OwnedPurchasesReq(); ownedPurchasesReq.PriceType = 1; ITask <OwnedPurchasesResult> task = iapClient.ObtainOwnedPurchases(ownedPurchasesReq); task.AddOnSuccessListener((result) => { Debug.Log("HMSP: ObtainOwnedPurchases"); if (result != null && result.InAppPurchaseDataList != null) { Debug.Log("HMSP: Restored " + result.InAppPurchaseDataList.Count + "non consumable products"); foreach (string inAppPurchaseData in result.InAppPurchaseDataList) { InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData); Debug.Log("HMSP: " + inAppPurchaseDataBean.ProductId); } } }).AddOnFailureListener((exception) => { Debug.Log("HMSP: Error on ObtainOwnedPurchases"); }); }
private async void SendPurchaseData(InAppPurchaseData inAppPurchaseData) { var vkSaveTransationRequest = new VKRequest("apps.saveTransaction", "platform", "winphone", "app_id", VKSDK.Instance.CurrentAppID, "device_id", VKSDK.DeviceId, "receipt", inAppPurchaseData.ToJsonString()); bool success = false; int it = 0; while (!success && it < 3) { var result = await vkSaveTransationRequest.DispatchAsync <Object>((jsonStr) => new Object()); success = result.ResultCode == VKResultCode.Succeeded; it++; if (!success) { await Task.Delay(4000); } } }
//local data void FetchLocalData() { if (File.Exists(Application.persistentDataPath + "/" + LocalDataName)) { //deserialize local File BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + "/" + LocalDataName, FileMode.Open); localData = (InAppPurchaseData)bf.Deserialize(file); file.Close(); } else { BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Create(Application.persistentDataPath + "/" + LocalDataName); localData = new InAppPurchaseData(); localData.noAds = false; bf.Serialize(file, localData); file.Close(); } //trigger event that in app purchase is done if (completeLoadingEvent != null) { completeLoadingEvent(); } }
public void ConsumePurchaseWithPurchaseData(string inAppPurchaseData) { var inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData); string purchaseToken = inAppPurchaseDataBean.PurchaseToken; ConsumePurchaseWithToken(purchaseToken); }
public void ReportInAppPurchase(InAppPurchaseData inAppPurchaseData) { if (inAppPurchaseData == null) { throw new ArgumentNullException("inAppPurchaseData"); } SendPurchaseData(inAppPurchaseData); }
string CreateReciept(InAppPurchaseData purchaseData) { var sb = new StringBuilder(1024); sb.Append('{').Append("\"Store\":\"AppGallery\",\"TransactionID\":\"").Append(purchaseData.OrderID).Append("\", \"Payload\":{ "); sb.Append("\"product\":\"").Append(purchaseData.ProductId).Append("\""); sb.Append('}'); sb.Append('}'); return(sb.ToString()); }
void ParseOwned(OwnedPurchasesResult result) { if (result == null || result.InAppPurchaseDataList == null) { return; } foreach (string inAppPurchaseData in result.InAppPurchaseDataList) { InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData); this.purchasedData[inAppPurchaseDataBean.ProductId] = inAppPurchaseDataBean; } }
void PurchaseInitentCreated(PurchaseIntentResult intentResult, ProductDefinition product) { if (intentResult == null) { storeEvents.OnPurchaseFailed(new PurchaseFailureDescription(product.id, PurchaseFailureReason.Unknown, "IntentIsNull")); return; } var status = intentResult.Status; status.StartResolutionForResult((androidIntent) => { PurchaseResultInfo purchaseResultInfo = iapClient.ParsePurchaseResultInfoFromIntent(androidIntent); switch (purchaseResultInfo.ReturnCode) { case OrderStatusCode.ORDER_STATE_SUCCESS: var data = new InAppPurchaseData(purchaseResultInfo.InAppPurchaseData); this.purchasedData[product.storeSpecificId] = data; this.productsByID.TryGetValue(product.storeSpecificId, out var productInfo); var receipt = EncodeReceipt(purchaseResultInfo.InAppPurchaseData, purchaseResultInfo.InAppDataSignature, ProductToJson(productInfo)); storeEvents.OnPurchaseSucceeded(product.storeSpecificId, receipt, data.OrderID); break; case OrderStatusCode.ORDER_PRODUCT_OWNED: storeEvents.OnPurchaseFailed(new PurchaseFailureDescription(product.storeSpecificId, PurchaseFailureReason.DuplicateTransaction, purchaseResultInfo.ErrMsg)); break; case OrderStatusCode.ORDER_STATE_CANCEL: storeEvents.OnPurchaseFailed(new PurchaseFailureDescription(product.storeSpecificId, PurchaseFailureReason.UserCancelled, purchaseResultInfo.ErrMsg)); break; default: storeEvents.OnPurchaseFailed(new PurchaseFailureDescription(product.storeSpecificId, PurchaseFailureReason.Unknown, purchaseResultInfo.ErrMsg)); break; } }, (exception) => { storeEvents.OnPurchaseFailed(new PurchaseFailureDescription(product.id, PurchaseFailureReason.Unknown, exception.Message)); }); }
private void recoverPurchases() { OwnedPurchasesReq ownedPurchasesReq = new OwnedPurchasesReq(); ITask <OwnedPurchasesResult> task = iapClient.ObtainOwnedPurchases(ownedPurchasesReq); task.AddOnSuccessListener((result) => { Debug.Log("HMSP: recoverPurchases"); foreach (string inAppPurchaseData in result.InAppPurchaseDataList) { InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData); string purchaseToken = inAppPurchaseDataBean.PurchaseToken; ConsumePurchase(purchaseToken); Debug.Log("HMSP: recoverPurchases result> " + result.ReturnCode); } }).AddOnFailureListener((exception) => { Debug.Log("HMSP: Error on recoverPurchases" + exception.StackTrace); }); }
private void DeliverProduct(String inAppPurchaseDataStr, String inAppPurchaseDataSignature) { try { InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseDataStr); if (inAppPurchaseDataBean.PurchaseStatus != InAppPurchaseData.PurchaseState.Purchased) { return; } String purchaseToken = inAppPurchaseDataBean.PurchaseToken; String productId = inAppPurchaseDataBean.ProductId; if (DeliveryUtils.isDelivered(this, purchaseToken)) { Toast.MakeText(this, productId + " has been delivered", ToastLength.Long).Show(); ConsumeOwnedPurchase(mClient, purchaseToken); } else { if (DeliveryUtils.DeliverProduct(this, productId, purchaseToken)) { Log.Info(TAG, "delivery success"); Toast.MakeText(this, productId + " delivery success", ToastLength.Long).Show(); UpdateNumberOfGems(); ConsumeOwnedPurchase(mClient, purchaseToken); } else { Log.Error(TAG, productId + " delivery fail"); Toast.MakeText(this, productId + " delivery fail", ToastLength.Long).Show(); } } } catch (JSONException e) { Log.Error(TAG, "delivery:" + e.Message); } }
private void CheckHiddenLevelPurchaseState(OwnedPurchasesResult result) { if (result == null || result.InAppPurchaseDataList == null) { Log.Info(TAG, "result is null"); QueryProducts(); return; } IList <String> inAppPurchaseDataList = result.InAppPurchaseDataList; for (int i = 0; i < inAppPurchaseDataList.Count(); i++) { try { InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseDataList.ElementAt(i)); if (inAppPurchaseDataBean.PurchaseStatus == InAppPurchaseData.PurchaseState.Purchased) { if (HIDDEN_LEVEL_PRODUCTID.Equals(inAppPurchaseDataBean.ProductId)) { isHiddenLevelPurchased = true; } } } catch (JSONException e) { Log.Error(TAG, "delivery:" + e.Message); } } if (isHiddenLevelPurchased) { DeliverProduct(); } else { QueryProducts(); } }
void ParseOwned(OwnedPurchasesResult result) { if (result == null || result.InAppPurchaseDataList == null) { return; } // foreach (string inAppPurchaseData in result.InAppPurchaseDataList) // { // InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData); // this.purchasedData[inAppPurchaseDataBean.ProductId] = inAppPurchaseDataBean; // } for (var i = 0; i < result.InAppPurchaseDataList.Count; i++) { string inAppPurchaseData = result.InAppPurchaseDataList[i]; InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData); var productId = inAppPurchaseDataBean.ProductId; this.inAppSignature[productId] = result.InAppSignature[i]; this.inAppPurchaseData[productId] = inAppPurchaseData; this.purchasedData[productId] = inAppPurchaseDataBean; } }
public void BuyProduct(string productID) { PurchaseIntentReq purchaseIntentReq = new PurchaseIntentReq(); ProductInfo productInfo = productInfoList.Find(product => product.ProductId == productID); purchaseIntentReq.PriceType = productInfo.PriceType; purchaseIntentReq.ProductId = productID; // ToDo : developer payload??? purchaseIntentReq.DeveloperPayload = "test"; ITask <PurchaseIntentResult> task = iapClient.CreatePurchaseIntent(purchaseIntentReq); InAppPurchaseData inAppPurchaseDataBean; task.AddOnSuccessListener((result) => { if (result != null) { Debug.Log("[HMSPlugin]:" + result.ErrMsg + result.ReturnCode.ToString()); Debug.Log("[HMSPlugin]: Bought " + productID); Status status = result.Status; status.StartResolutionForResult((androidIntent) => { PurchaseResultInfo purchaseResultInfo = iapClient.ParsePurchaseResultInfoFromIntent(androidIntent); Debug.Log("HMSPluginResult: " + purchaseResultInfo.ReturnCode); Debug.Log("HMErrorMssg: " + purchaseResultInfo.ErrMsg); Debug.Log("HMS: HMSInAppPurchaseData" + purchaseResultInfo.InAppPurchaseData); Debug.Log("HMS: HMSInAppDataSignature" + purchaseResultInfo.InAppDataSignature); switch (purchaseResultInfo.ReturnCode) { case OrderStatusCode.ORDER_STATE_CANCEL: // User cancel payment. Debug.Log("[HMS]: User cancel payment"); break; case OrderStatusCode.ORDER_STATE_FAILED: Debug.Log("[HMS]: order paymentf failed"); break; case OrderStatusCode.ORDER_PRODUCT_OWNED: Debug.Log("[HMS]: Product owned"); inAppPurchaseDataBean = new InAppPurchaseData(purchaseResultInfo.InAppPurchaseData); ConsumePurchase(inAppPurchaseDataBean.PurchaseToken); // to check if there exists undelivered products. break; case OrderStatusCode.ORDER_STATE_SUCCESS: // pay success. Debug.Log("[HMSPlugin]: PURCHASE SUCCESS"); String inAppPurchaseData = purchaseResultInfo.InAppPurchaseData; String inAppPurchaseDataSignature = purchaseResultInfo.InAppDataSignature; Debug.Log("HMS" + inAppPurchaseData); Debug.Log("HMS:" + inAppPurchaseDataSignature); //ToDO: use the public key of your app to verify the signature. // If ok, you can deliver your products. // If the user purchased a consumable product, call the consumeOwnedPurchase API to consume it after successfully delivering the product. // Consume purchase inAppPurchaseDataBean = new InAppPurchaseData(purchaseResultInfo.InAppPurchaseData); ConsumePurchase(inAppPurchaseDataBean.PurchaseToken); break; default: break; } }, (exception) => { Debug.Log("[HMSPlugin]:startIntent ERROR"); } ); } }).AddOnFailureListener((exception) => { Debug.Log("[HMSPlugin]: ERROR BuyProduct!!" + exception.Message); }); }
private async void SendPurchaseData(InAppPurchaseData inAppPurchaseData) { var vkSaveTransationRequest = new VKRequest("apps.saveTransaction", "platform", "winphone", "app_id", VKSDK.Instance.CurrentAppID, "device_id", VKSDK.DeviceId, "receipt", inAppPurchaseData.ToJsonString()); bool success = false; int it = 0; while (!success && it < 3) { var result = await vkSaveTransationRequest.DispatchAsync<Object>((jsonStr) => new Object()); success = result.ResultCode == VKResultCode.Succeeded; it++; if (!success) { await Task.Delay(4000); } } }
public void ConsumePurchaseWithPurchaseData(InAppPurchaseData inAppPurchaseData) { string purchaseToken = inAppPurchaseData.PurchaseToken; ConsumePurchaseWithToken(purchaseToken); }