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);
        }
Пример #2
0
    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");
        });
    }
Пример #3
0
        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);
                }
            }
        }
Пример #4
0
    //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();
        }
    }
Пример #5
0
        public void ConsumePurchaseWithPurchaseData(string inAppPurchaseData)
        {
            var    inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData);
            string purchaseToken         = inAppPurchaseDataBean.PurchaseToken;

            ConsumePurchaseWithToken(purchaseToken);
        }
Пример #6
0
        public void ReportInAppPurchase(InAppPurchaseData inAppPurchaseData)
        {
            if (inAppPurchaseData == null)
            {
                throw new ArgumentNullException("inAppPurchaseData");
            }

            SendPurchaseData(inAppPurchaseData);
        }
Пример #7
0
        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());
        }
Пример #8
0
        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;
            }
        }
Пример #9
0
        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));
            });
        }
Пример #10
0
    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);
     }
 }
Пример #12
0
        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();
            }
        }
Пример #13
0
        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;
            }
        }
Пример #14
0
        public void ReportInAppPurchase(InAppPurchaseData inAppPurchaseData)
        {
            if (inAppPurchaseData == null)
            {
                throw new ArgumentNullException("inAppPurchaseData");
            }

            SendPurchaseData(inAppPurchaseData);
        }
Пример #15
0
    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);
        });
    }
Пример #16
0
        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);
                }
            }
        }
Пример #17
0
        public void ConsumePurchaseWithPurchaseData(InAppPurchaseData inAppPurchaseData)
        {
            string purchaseToken = inAppPurchaseData.PurchaseToken;

            ConsumePurchaseWithToken(purchaseToken);
        }