private void ProcessingRequestResult(int pType, RequestClass pRequestResult, Dictionary<string, object> pDataArgs)
        {
            if (!pRequestResult.HasError)
            {
                // Start Processing
                Debug.Log("Type -> " + pType);
                Debug.Log("WWW_request -> " + pRequestResult.TextRequest);

                JSONNode rootNode = JSON.Parse(pRequestResult.TextRequest);
                if(rootNode != null && rootNode.Count > 2 || rootNode["error"] == null) {
                    switch(pType)
                    {
                    case TRANSLATIONS:
                        {
                            if(rootNode.Count > 2){
                                XsollaUtils utils = new XsollaUtils().Parse(rootNode) as XsollaUtils;
                                projectId = utils.GetProject().id.ToString();

                                OnUtilsRecieved(utils);
                                // if base param not containKey access token, then add token from util
                                if (!baseParams.ContainsKey(XsollaApiConst.ACCESS_TOKEN))
                                    _accessToken = utils.GetAcceessToken();
                                OnTranslationRecieved(utils.GetTranslations());
                            } else {
                                XsollaError error = new XsollaError();
                                error.Parse(rootNode);
                                OnErrorReceived(error);
                            }
                        }
                        break;
                    case DIRECTPAYMENT_FORM:
                        {
                            if(rootNode.Count > 8) {
                                XsollaForm form = new XsollaForm();
                                form.Parse(rootNode);
                                switch (form.GetCurrentCommand()) {
                                case XsollaForm.CurrentCommand.STATUS:
                                    GetStatus(form.GetXpsMap());
                                    break;
                                case XsollaForm.CurrentCommand.CHECKOUT:
                                case XsollaForm.CurrentCommand.CHECK:
                                case XsollaForm.CurrentCommand.FORM:
                                case XsollaForm.CurrentCommand.CREATE:
                                case XsollaForm.CurrentCommand.ACCOUNT:
                                    OnFormReceived(form);
                                    break;
                                case XsollaForm.CurrentCommand.UNKNOWN:
                                    if(rootNode.Count > 10)
                                    {
                                        OnFormReceived(form);
                                    } else {
                                        XsollaError error = new XsollaError();
                                        error.Parse(rootNode);
                                        OnErrorReceived(error);
                                    }
                                    break;
                                default:
                                    break;
                                }
                            } else {
                                XsollaStatusPing statusPing = new XsollaStatusPing();
                                statusPing.Parse(rootNode);
                                OnStatusChecked(statusPing);
                            }
                        }
                        break;
                    case DIRECTPAYMENT_STATUS:
                        {
                            XsollaForm form = new XsollaForm();
                            form.Parse(rootNode);
                            XsollaStatus status = new XsollaStatus();
                            status.Parse(rootNode);
                            OnStatusReceived(status, form);
                        }
                        break;
                    case PRICEPOINTS:
                        {
                            XsollaPricepointsManager pricepoints = new XsollaPricepointsManager();
                            pricepoints.Parse(rootNode);
                            OnPricepointsRecieved(pricepoints);
                        }
                        break;
                    case GOODS:
                        {
                            XsollaGoodsManager goods = new XsollaGoodsManager();
                            goods.Parse(rootNode);
                            OnGoodsRecieved(goods);
                        }
                        break;
                    case GOODS_GROUPS:
                        {
                            XsollaGroupsManager groups = new XsollaGroupsManager();
                            groups.Parse(rootNode);
                            OnGoodsGroupsRecieved(groups);
                        }
                        break;
                    case GOODS_ITEMS:
                        {
                            XsollaGoodsManager goods = new XsollaGoodsManager();
                            goods.Parse(rootNode);
                            OnGoodsRecieved(goods);
                        }
                        break;
                    case PAYMENT_LIST:
                        {
                            XsollaPaymentMethods paymentMethods = new XsollaPaymentMethods();
                            paymentMethods.Parse(rootNode);
                            OnPaymentMethodsRecieved(paymentMethods);
                        }
                        break;
                    case SAVED_PAYMENT_LIST:
                        {
                            XsollaSavedPaymentMethods savedPaymentsMethods = new XsollaSavedPaymentMethods();
                            savedPaymentsMethods.Parse(rootNode);
                            OnSavedPaymentMethodsRecieved(savedPaymentsMethods);
                        }
                        break;
                    case QUICK_PAYMENT_LIST:
                        {
                            XsollaQuickPayments quickPayments = new XsollaQuickPayments();
                            quickPayments.Parse(rootNode);
                            OnQuickPaymentMethodsRecieved(quickPayments);
                        }
                        break;
                    case COUNTRIES:
                        {
                            XsollaCountries countries = new XsollaCountries();
                            countries.Parse(rootNode);
                            OnCountriesRecieved(countries);
                        }
                        break;
                    case VIRTUAL_PAYMENT_SUMMARY:
                        {
                            XVirtualPaymentSummary summary = new XVirtualPaymentSummary();
                            summary.Parse(rootNode);
                            Logger.Log("VIRTUAL_PAYMENT_SUMMARY " + summary.ToString());
                            if(summary.IsSkipConfirmation) {
                                Logger.Log("IsSkipConfirmation true");
                                pDataArgs.Add("dont_ask_again", 0);
                                ProceedVPayment(pDataArgs);
                            } else {
                                Logger.Log("IsSkipConfirmation false");
                                OnVPSummaryRecieved(summary);
                            }
                        }
                        break;
                    case VIRTUAL_PROCEED:
                        {
                            XProceed proceed = new XProceed();
                            proceed.Parse(rootNode);
                            Logger.Log ("VIRTUAL_PROCEED " + proceed.ToString());
                            if(proceed.IsInvoiceCreated) {
                                Logger.Log ("VIRTUAL_PROCEED 1");
                                long operationId = proceed.OperationId;
                                pDataArgs.Add("operation_id", operationId);
                                VPaymentStatus(pDataArgs);
                            } else {
                                Logger.Log ("VIRTUAL_PROCEED 0 ");
                                OnVPProceedError(proceed.Error);
                            }
                        }
                        break;
                    case VIRTUAL_STATUS:
                        {
                            XVPStatus vpStatus = new XVPStatus();
                            vpStatus.Parse(rootNode);
                            //{"errors":[ {"message":"Insufficient balance to complete operation"} ], "api":{"ver":"1.0.1"}, "invoice_created":"false", "operation_id":"0", "code":"0"}
                            Logger.Log ("VIRTUAL_STATUS" + vpStatus.ToString());
                            OnVPStatusRecieved(vpStatus);
                        }
                        break;

                    case APPLY_PROMO_COUPONE:
                        {
                            XsollaForm form = new XsollaForm();
                            form.Parse(rootNode);
                            OnApplyCouponeReceived(form);
                        }
                        break;
                    case COUPON_PROCEED:
                        {
                            XsollaCouponProceedResult couponProceed = new XsollaCouponProceedResult();
                            couponProceed.Parse(rootNode);
                            if (couponProceed._error != null)
                            {
                                Logger.Log("COUPON_PROCEED ERROR: " + couponProceed._error);
                                OnCouponProceedErrorRecived(couponProceed);
                            }
                            else
                            {
                                long operationId = couponProceed._operationId;
                                if (pDataArgs.ContainsKey("coupon_code"))
                                    pDataArgs.Remove("coupon_code");
                                pDataArgs.Add("operation_id", operationId);
                                VPaymentStatus(pDataArgs);
                            }
                        }
                        break;

                    case HISTORY:
                        {
                            XsollaHistoryList history = new XsollaHistoryList().Parse(rootNode["operations"]) as XsollaHistoryList;
                            OnHistoryRecieved(history);

                        }
                        break;
                    case CALCULATE_CUSTOM_AMOUNT:
                        {
                            //TODO: fill method
                            CustomVirtCurrAmountController.CustomAmountCalcRes res = new CustomVirtCurrAmountController.CustomAmountCalcRes().Parse(rootNode["calculation"]) as CustomVirtCurrAmountController.CustomAmountCalcRes;
                            OnCustomAmountResRecieved(res);
                        }
                        break;
                    default:
                        break;
                    }
                } else {
                    XsollaError error = new XsollaError();
                    error.Parse(rootNode);
                    OnErrorReceived(error);
                }
            }
            else
            {
                JSONNode errorNode = JSON.Parse(pRequestResult.TextRequest);
                string errorMsg = errorNode["errors"].AsArray[0]["message"].Value
                    + ". Support code " + errorNode["errors"].AsArray[0]["support_code"].Value;
                int errorCode = 0;
                if(pRequestResult.ErrorText.Length > 3)
                    errorCode = int.Parse(pRequestResult.ErrorText.Substring(0, 3));
                else
                    errorCode = int.Parse(pRequestResult.ErrorText);
                OnErrorReceived(new XsollaError(errorCode, errorMsg));
            }
            if(projectId != null && !"".Equals(projectId))
                LogEvent ("UNITY " + SDK_VERSION + " REQUEST", projectId, pRequestResult.Url);
            else
                LogEvent ("UNITY " + SDK_VERSION + " REQUEST", "undefined", pRequestResult.Url);
        }
        /* * * * * * * * * * * * * * * * * * * * * * * * * * *
        * OVERRIDED METHODS
        * * * * * * * * * * * * * * * * * * * * * * * * * * */
        //            if (errorNode != null && errorNode.GetType() != typeof(JSONLazyCreator))
        //            {
        //                this.xsollaError = new XsollaError().Parse(errorNode) as XsollaError;
        //            }
        //            //errorNode = rootNode [XsollaApiConst.R_TEXTALL] [XsollaApiConst.ERROR_MSG][0];
        //            errorNode = rootNode ["errors"][0];
        //            if (errorNode != null)
        //            {
        //                this.xsollaError = new XsollaError().Parse(errorNode) as XsollaError;
        //            }
        public IParseble Parse(JSONNode rootNode)
        {
            JSONNode errorNode = rootNode [XsollaApiConst.R_ERRORS];
            if(errorNode.Count > 0)
                this.xsollaError = new XsollaError().ParseNew(errorNode[0]) as XsollaError;

            JSONNode messagesNode = rootNode [XsollaApiConst.R_MESSAGES];
            if (messagesNode.Count > 0)
                this.xsollaMessage = new XsollaMessage ().Parse (messagesNode[0]) as XsollaMessage;

            this.SetAccount (rootNode [XsollaApiConst.R_ACCOUNT]);
            this.SetAccountXsolla (rootNode [XsollaApiConst.R_ACCOUNTXSOLLA]);
            this.SetCurrentCommand (rootNode[XsollaApiConst.R_CURRENTCOMMAND]);
            this.SetTitle (rootNode[XsollaApiConst.R_TITLE]);
            this.SetIconUrl (rootNode[XsollaApiConst.R_ICONURL]);
            this.SetCurrency (rootNode[XsollaApiConst.R_CURRENCY]);
            this.SetSum (rootNode[XsollaApiConst.R_BUYDATA]["sum"]);
            this.SetInstruction (rootNode[XsollaApiConst.R_INSTRUCTION]);
            this.SetPid (rootNode[XsollaApiConst.R_PID].AsInt);
            this.SetSkipForm(rootNode[XsollaApiConst.R_SKIPFORM].AsBool);
            this.SetSkipCheckout(rootNode[XsollaApiConst.R_SKIPCHECKOUT].AsBool);

            checkoutToken = rootNode ["checkoutToken"];
            JSONNode buyDataNode = rootNode ["buyData"];
            if (buyDataNode != null && !"null".Equals (buyDataNode)) {
                buyData = new BuyData ().Parse (buyDataNode) as BuyData;
            }

            JSONNode summaryNode = rootNode ["summary"];
            if (summaryNode != null && !"null".Equals(summaryNode)) {
                summary = new XsollaSummary ().Parse (summaryNode) as XsollaSummary;
            }

            JSONNode checkoutNode = rootNode ["checkout"];
            if(checkoutNode != null && !"null".Equals(checkoutNode)){
                chekout = new XsollaCheckout ().Parse (checkoutNode) as XsollaCheckout;
            }

            JSONNode formNode = rootNode [XsollaApiConst.R_FORM];
            IEnumerable<JSONNode> formElements = formNode.Childs;
            IEnumerator<JSONNode> enumerator = formElements.GetEnumerator();
            this.Clear ();
            while(enumerator.MoveNext())
            {
                this.AddElement((XsollaFormElement)new XsollaFormElement().Parse(enumerator.Current));
            }
            return this;
        }
        public IParseble Parse(JSONNode textAllNode)
        {
            IEnumerator<JSONNode> errorEnumerator = textAllNode ["error"].Childs.GetEnumerator ();
            errors = new List<XsollaError> ();
            while (errorEnumerator.MoveNext()) {
                XsollaError currentError = new XsollaError();
                currentError.Parse(errorEnumerator.Current);
                errors.Add(currentError);
            }

            IEnumerator<JSONNode> infoEnumerator = textAllNode ["info"].Childs.GetEnumerator ();
            info = new List<XsollaInfo> ();
            while (infoEnumerator.MoveNext()) {
                XsollaInfo currentInfo = new XsollaInfo();
                currentInfo.Parse(infoEnumerator.Current);
                info.Add(currentInfo);
            }
            return this;
        }
 protected virtual void OnErrorReceived(XsollaError error)
 {
     if (ErrorReceived != null)
         ErrorReceived(error);
 }
 public void SetError(XsollaError pError)
 {
     _errorLable.text = pError.errorMessage;
     _panelError.SetActive(true);
 }
 private void OnErrorRecivied(XsollaError xsollaError)
 {
     Logger.Log("ErrorRecivied " + xsollaError.ToString());
     if (ErrorHandler != null)
         ErrorHandler (xsollaError);
     else
         Logger.Log ("Have no ErrorHandler");
 }
 private void DrawError(XsollaError error)
 {
     if (mainScreenContainer != null) {
         currentActive = ActiveScreen.ERROR;
         GameObject errorScreen = Instantiate (Resources.Load (PREFAB_SCREEN_ERROR)) as GameObject;
         errorScreen.transform.SetParent (mainScreenContainer.transform);
         errorScreen.GetComponent<RectTransform> ().anchoredPosition = new Vector2 (0, 0);
         mainScreenContainer.GetComponentInParent<ScrollRect> ().content = errorScreen.GetComponent<RectTransform> ();
         ScreenErrorController controller = errorScreen.GetComponent<ScreenErrorController> ();
         controller.ErrorHandler += OnErrorRecivied;
         controller.DrawScreen (error);
     } else {
         GameObject errorScreen = Instantiate (Resources.Load (PREFAB_SCREEN_ERROR_MAIN)) as GameObject;
         errorScreen.transform.SetParent (container.transform);
         Text[] texts = errorScreen.GetComponentsInChildren<Text>();
         texts[1].text = "Somthing went wrong";
         texts[2].text = error.errorMessage;
         texts[3].text = error.errorCode.ToString();
         texts[3].gameObject.SetActive(false);
         Resizer.ResizeToParrent (errorScreen);
     }
 }
 protected override void ShowPaymentError(XsollaError error)
 {
     Logger.Log ("Show Payment Error " + error);
     SetLoading (false);
     DrawError (error);
 }
Exemple #9
0
 public new void OnErrorReceived(XsollaError error)
 {
 }