Esempio n. 1
0
        /// <summary>
        /// Cancels payment reservation
        /// </summary>
        /// <param name="paymentSystem">The payment system.</param>
        /// <param name="paymentArgs">The payment args.</param>
        /// <param name="reservationTicket">The reservation ticket.</param>
        public void CancelReservation([NotNull] PaymentSystem paymentSystem, [NotNull] PaymentArgs paymentArgs, [NotNull] ReservationTicket reservationTicket)
        {
            Assert.ArgumentNotNull(paymentSystem, "paymentSystem");
            Assert.ArgumentNotNull(paymentArgs, "paymentArgs");
            Assert.ArgumentNotNull(reservationTicket, "reservationTicket");

            ITransactionData transactionDataProvider = Context.Entity.Resolve <ITransactionData>();

            long   accountNumber     = TypeUtil.TryParse <long>(paymentSystem.Username, 0);
            int    transactionNumber = int.Parse(reservationTicket.TransactionNumber);
            string encryptionKey     = paymentSystem.Password;

            ArrayList param = new ArrayList
            {
                accountNumber,
                transactionNumber,
                encryptionKey
            };
            string hash = this.CreateMD5Hash(param);

            PxOrder order       = new PxOrder();
            string  xmlReturn   = order.Cancel2(accountNumber, transactionNumber, hash);
            string  errorCode   = this.ParseRes(xmlReturn, "/payex/status/errorCode");
            string  description = this.ParseRes(xmlReturn, "/payex/status/description");

            if (errorCode == "OK" && description == "OK")
            {
                transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, PaymentConstants.CancelSuccess);
            }
            else
            {
                transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, string.Format("errorCode={0} description={1}", errorCode, description));
            }
        }
        /// <summary>
        /// Cancels payment reservation
        /// </summary>
        /// <param name="paymentSystem">The payment system.</param>
        /// <param name="paymentArgs">The payment args.</param>
        /// <param name="reservationTicket">The reservation ticket.</param>
        public void CancelReservation([NotNull] PaymentSystem paymentSystem, [NotNull] PaymentArgs paymentArgs, [NotNull] ReservationTicket reservationTicket)
        {
            Assert.ArgumentNotNull(paymentSystem, "paymentSystem");
              Assert.ArgumentNotNull(paymentArgs, "paymentArgs");
              Assert.ArgumentNotNull(reservationTicket, "reservationTicket");

              ITransactionData transactionDataProvider = Context.Entity.Resolve<ITransactionData>();

              long accountNumber = TypeUtil.TryParse<long>(paymentSystem.Username, 0);
              int transactionNumber = int.Parse(reservationTicket.TransactionNumber);
              string encryptionKey = paymentSystem.Password;

              ArrayList param = new ArrayList
              {
            accountNumber,
            transactionNumber,
            encryptionKey
              };
              string hash = this.CreateMD5Hash(param);

              PxOrder order = new PxOrder();
              string xmlReturn = order.Cancel2(accountNumber, transactionNumber, hash);
              string errorCode = this.ParseRes(xmlReturn, "/payex/status/errorCode");
              string description = this.ParseRes(xmlReturn, "/payex/status/description");

              if (errorCode == "OK" && description == "OK")
              {
            transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, PaymentConstants.CancelSuccess);
              }
              else
              {
            transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, string.Format("errorCode={0} description={1}", errorCode, description));
              }
        }
Esempio n. 3
0
        /// <summary>
        /// Performs the completion of the conversation with PayPal.
        /// </summary>
        /// <param name="paymentSystem">The payment system.</param>
        /// <param name="orderRef">The order ref.</param>
        /// <param name="accountNumber">The account number.</param>
        /// <param name="hash">The hash.</param>
        /// <param name="transactionDataProvider">The transaction data provider.</param>
        protected void CompleteCallback(PaymentSystem paymentSystem, string orderRef, long accountNumber, string hash, ITransactionData transactionDataProvider)
        {
            PaymentSettingsReader configuration = new PaymentSettingsReader(paymentSystem);
            string        purchaseOperation     = configuration.GetSetting("purchaseOperation");
            PaymentStatus paymentStatusResult   = PaymentStatus.Failure;

            PxOrder payexOrder = new PxOrder();
            string  xmlReturn  = payexOrder.Complete(accountNumber, orderRef, hash);

            string transactionNumber = this.ParseRes(xmlReturn, "/payex/transactionNumber");
            string orderNumber       = this.ParseRes(xmlReturn, "/payex/orderId");
            string transactionAmount = this.ParseRes(xmlReturn, "/payex/amount");
            string errorCode         = this.ParseRes(xmlReturn, "/payex/status/errorCode");
            int    transactionStatus = int.Parse(this.ParseRes(xmlReturn, "/payex/transactionStatus"));

            if (errorCode == "OK")
            {
                switch (transactionStatus)
                {
                case (int)TransactionStatus.Sale:
                case (int)TransactionStatus.Authorize:
                {
                    paymentStatusResult = PaymentStatus.Succeeded;
                    transactionDataProvider.SaveCallBackValues(orderNumber, paymentStatusResult.ToString(), transactionNumber, transactionAmount, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty);

                    if (string.Compare(purchaseOperation, this.ReservableTransactionType, StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        decimal           amount            = transactionAmount.FromCents();
                        ReservationTicket reservationTicket = new ReservationTicket
                        {
                            InvoiceNumber     = orderNumber,
                            AuthorizationCode = PaymentConstants.EmptyAuthorizationCode,
                            TransactionNumber = transactionNumber,
                            Amount            = amount
                        };
                        transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, PaymentConstants.ReservationTicket, reservationTicket);
                    }

                    break;
                }

                default:
                {
                    string transactionErrorCode = this.ParseRes(xmlReturn, "/payex/errorDetails/transactionErrorCode");
                    if (transactionErrorCode == OperationCanceledError)
                    {
                        paymentStatusResult = PaymentStatus.Canceled;
                    }

                    break;
                }
                }
            }

            this.PaymentStatus = paymentStatusResult;
        }
Esempio n. 4
0
        protected PxOrder GetPayExServiceClient(IDictionary <string, string> settings)
        {
            settings.MustNotBeNull("settings");

            PxOrder pxOrder = new PxOrder {
                Url = settings.ContainsKey("testing") && settings["testing"] == "1" ? "https://external.externaltest.payex.com/pxorder/pxorder.asmx" : "https://external.payex.com/pxorder/pxorder.asmx"
            };

            return(pxOrder);
        }
Esempio n. 5
0
        protected virtual string PrepareOrderLine([NotNull] PxOrder order, long accountNumber, [NotNull] string orderRef, [NotNull] string itemNumber, [NotNull] string itemDescription1, int quantity, int orderLinePrice, int orderLineVatPrice, int orderLineVatPercent, [NotNull] string encryptionKey)
        {
            Assert.ArgumentNotNull(order, "order");
            Assert.ArgumentNotNull(orderRef, "orderRef");
            Assert.ArgumentNotNull(itemNumber, "itemNumber");
            Assert.ArgumentNotNull(itemDescription1, "itemDescription1");
            Assert.ArgumentNotNull(encryptionKey, "encryptionKey");

            ArrayList orderLineParams = new ArrayList
            {
                accountNumber,
                orderRef,
                itemNumber,
                itemDescription1,
                string.Empty,
                string.Empty,
                string.Empty,
                string.Empty,
                quantity,
                orderLinePrice,
                orderLineVatPrice,
                orderLineVatPercent,
                encryptionKey
            };
            string orderLineHash      = this.CreateMD5Hash(orderLineParams);
            string xmlReturnOrderLine = order.AddSingleOrderLine(
                accountNumber,
                orderRef,
                itemNumber,
                itemDescription1,
                string.Empty,
                string.Empty,
                string.Empty,
                string.Empty,
                quantity,
                orderLinePrice,
                orderLineVatPrice,
                orderLineVatPercent,
                orderLineHash);

            return(this.ParseRes(xmlReturnOrderLine, "/payex/status/errorCode"));
        }
Esempio n. 6
0
        /// <summary>
        /// Captures the payment
        /// </summary>
        /// <param name="paymentSystem">The payment system.</param>
        /// <param name="paymentArgs">The payment args.</param>
        /// <param name="reservationTicket">The reservation ticket.</param>
        /// <param name="amount">The amount.</param>
        public void Capture([NotNull] PaymentSystem paymentSystem, [NotNull] PaymentArgs paymentArgs, [NotNull] ReservationTicket reservationTicket, decimal amount)
        {
            Assert.ArgumentNotNull(paymentSystem, "paymentSystem");
            Assert.ArgumentNotNull(paymentArgs, "paymentArgs");
            Assert.ArgumentNotNull(reservationTicket, "reservationTicket");

            Assert.ArgumentCondition((amount > 0), "amount", "An amount should be greater than zero");
            Assert.ArgumentCondition((amount <= reservationTicket.Amount), "amount", "An amount should not be greater than the original reserved one");

            ITransactionData transactionDataProvider = Context.Entity.Resolve <ITransactionData>();

            long accountNumber     = TypeUtil.TryParse <long>(paymentSystem.Username, 0);
            int  transactionNumber = int.Parse(reservationTicket.TransactionNumber);
            int  amountInput       = int.Parse(amount.ToCents());

            string encryptionKey = paymentSystem.Password;

            ArrayList param = new ArrayList
            {
                accountNumber,
                transactionNumber,
                amountInput,
                encryptionKey
            };
            string hash = this.CreateMD5Hash(param);

            PxOrder order       = new PxOrder();
            string  xmlReturn   = order.Capture2(accountNumber, transactionNumber, amountInput, hash);
            string  errorCode   = this.ParseRes(xmlReturn, "/payex/status/errorCode");
            string  description = this.ParseRes(xmlReturn, "/payex/status/description");

            if (errorCode == "OK" && description == "OK")
            {
                transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, PaymentConstants.CaptureSuccess);
            }
            else
            {
                transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, string.Format("errorCode={0} description={1}", errorCode, description));
            }
        }
        /// <summary>
        /// Performs the completion of the conversation with PayPal.
        /// </summary>
        /// <param name="paymentSystem">The payment system.</param>
        /// <param name="orderRef">The order ref.</param>
        /// <param name="accountNumber">The account number.</param>
        /// <param name="hash">The hash.</param>
        /// <param name="transactionDataProvider">The transaction data provider.</param>
        protected void CompleteCallback(PaymentSystem paymentSystem, string orderRef, long accountNumber, string hash, ITransactionData transactionDataProvider)
        {
            PaymentSettingsReader configuration = new PaymentSettingsReader(paymentSystem);
              string purchaseOperation = configuration.GetSetting("purchaseOperation");
              PaymentStatus paymentStatusResult = PaymentStatus.Failure;

              PxOrder payexOrder = new PxOrder();
              string xmlReturn = payexOrder.Complete(accountNumber, orderRef, hash);

              string transactionNumber = this.ParseRes(xmlReturn, "/payex/transactionNumber");
              string orderNumber = this.ParseRes(xmlReturn, "/payex/orderId");
              string transactionAmount = this.ParseRes(xmlReturn, "/payex/amount");
              string errorCode = this.ParseRes(xmlReturn, "/payex/status/errorCode");
              int transactionStatus = int.Parse(this.ParseRes(xmlReturn, "/payex/transactionStatus"));

              if (errorCode == "OK")
              {
            switch (transactionStatus)
            {
              case (int)TransactionStatus.Sale:
              case (int)TransactionStatus.Authorize:
              {
            paymentStatusResult = PaymentStatus.Succeeded;
            transactionDataProvider.SaveCallBackValues(orderNumber, paymentStatusResult.ToString(), transactionNumber, transactionAmount, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty);

            if (string.Compare(purchaseOperation, this.ReservableTransactionType, StringComparison.OrdinalIgnoreCase) == 0)
            {
              decimal amount = transactionAmount.FromCents();
              ReservationTicket reservationTicket = new ReservationTicket
              {
                InvoiceNumber = orderNumber,
                AuthorizationCode = PaymentConstants.EmptyAuthorizationCode,
                TransactionNumber = transactionNumber,
                Amount = amount
              };
              transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, PaymentConstants.ReservationTicket, reservationTicket);
            }

            break;
              }

              default:
              {
            string transactionErrorCode = this.ParseRes(xmlReturn, "/payex/errorDetails/transactionErrorCode");
            if (transactionErrorCode == OperationCanceledError)
            {
              paymentStatusResult = PaymentStatus.Canceled;
            }

            break;
              }
            }
              }

              this.PaymentStatus = paymentStatusResult;
        }
        /// <summary>
        /// Begins the payment.
        /// </summary>
        /// <param name="paymentSystem">The payment System.</param>
        /// <param name="paymentArgs">The payment Args.</param>
        public override void Invoke([NotNull] PaymentSystem paymentSystem, [NotNull] PaymentArgs paymentArgs)
        {
            Assert.IsNotNull(paymentSystem, "Payment system is null");
              Assert.ArgumentNotNull(paymentArgs, "paymentArgs");
              Assert.IsNotNull(paymentArgs.ShoppingCart, "Shopping cart is null");

              ITransactionData transactionDataProvider = Context.Entity.Resolve<ITransactionData>();
              PaymentSettingsReader configuration = new PaymentSettingsReader(paymentSystem);

              long accountNumber = TypeUtil.TryParse<long>(paymentSystem.Username, 0);
              string purchaseOperation = configuration.GetSetting("purchaseOperation");
              int price = int.Parse(paymentArgs.ShoppingCart.Totals.TotalPriceIncVat.ToCents());
              int shippingPrice = int.Parse(paymentArgs.ShoppingCart.ShippingPrice.ToCents());
              string priceArgList = string.Empty;

              string currency = this.Currency(paymentArgs.ShoppingCart.Currency.Code);
              const int Vat = 0;
              string orderID = paymentArgs.ShoppingCart.OrderNumber;
              string productNumber = paymentArgs.ShoppingCart.ShoppingCartLines.Aggregate(string.Empty, (accumulator, next) => string.Format("{0}, {1}", accumulator, next.Product.Code)).Trim().TrimStart(',');
              string description = paymentArgs.Description;
              string clientIpAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
              string clientIdentifier = configuration.GetSetting("clientIdentifier");
              string additionalValues = configuration.GetSetting("additionalValues");
              string externalID = configuration.GetSetting("externalID");
              string returnUrl = paymentArgs.PaymentUrls.ReturnPageUrl;
              string cancelUrl = returnUrl + PaymentConstants.CancelQueryString;
              string view = configuration.GetSetting("view");
              string agreementRef = configuration.GetSetting("agreementRef");
              string clientLanguage = this.Language(Sitecore.Context.Language.Name);
              string encryptionKey = paymentSystem.Password;

              ArrayList param = new ArrayList
              {
            accountNumber.ToString(),
            purchaseOperation,
            price,
            priceArgList,
            currency,
            Vat,
            orderID,
            productNumber,
            description,
            clientIpAddress,
            clientIdentifier,
            additionalValues,
            externalID,
            returnUrl,
            view,
            agreementRef,
            cancelUrl,
            clientLanguage,
            encryptionKey
              };
              string hash = this.CreateMD5Hash(param);

              PxOrder order = new PxOrder();
              string xmlReturn = order.Initialize7(accountNumber, purchaseOperation, price, priceArgList, currency, Vat, orderID, productNumber, description, clientIpAddress, clientIdentifier, additionalValues, externalID, returnUrl, view, agreementRef, cancelUrl, clientLanguage, hash);

              string redirectUrl = this.ParseRes(xmlReturn, "/payex/redirectUrl");
              string orderRef = this.ParseRes(xmlReturn, "/payex/orderRef");
              int itemNumber = 1;
              string mainErrorDescription = this.ParseRes(xmlReturn, "/payex/status/description");
              List<string> errorCodes = new List<string>
              {
            this.ParseRes(xmlReturn, "/payex/status/errorCode"),
            mainErrorDescription,
            this.PrepareOrderLine(
              order,
              accountNumber,
              orderRef,
              itemNumber++.ToString(),
              description,
              paymentArgs.ShoppingCart.ShoppingCartLines.Count,
              price - shippingPrice,
              int.Parse(paymentArgs.ShoppingCart.Totals.TotalVat.ToCents()),
              int.Parse(paymentArgs.ShoppingCart.Totals.VAT.ToCents()) * 100,
              encryptionKey),
            this.PrepareOrderLine(
              order,
              accountNumber,
              orderRef,
              itemNumber++.ToString(),
              "Shipping price",
              1,
              shippingPrice,
              0,
              0,
              encryptionKey)
              };

              if (errorCodes.TrueForAll(x => x == "OK"))
              {
            transactionDataProvider.SaveStartValues(orderID, price.ToString(), currency, paymentSystem.Code);
              }
              else
              {
            transactionDataProvider.SavePersistentValue(orderID, TransactionConstants.PaymentStatus, PaymentStatus.Failure.ToString());
            redirectUrl = paymentArgs.PaymentUrls.FailurePageUrl;
            HttpContext.Current.Session["paymentErrorMessage"] = mainErrorDescription;
              }

              HttpContext.Current.Response.Redirect(redirectUrl, false);
              HttpContext.Current.ApplicationInstance.CompleteRequest();
        }
        /// <summary>
        /// Captures the payment
        /// </summary>
        /// <param name="paymentSystem">The payment system.</param>
        /// <param name="paymentArgs">The payment args.</param>
        /// <param name="reservationTicket">The reservation ticket.</param>
        /// <param name="amount">The amount.</param>
        public void Capture([NotNull] PaymentSystem paymentSystem, [NotNull] PaymentArgs paymentArgs, [NotNull] ReservationTicket reservationTicket, decimal amount)
        {
            Assert.ArgumentNotNull(paymentSystem, "paymentSystem");
              Assert.ArgumentNotNull(paymentArgs, "paymentArgs");
              Assert.ArgumentNotNull(reservationTicket, "reservationTicket");

              Assert.ArgumentCondition((amount > 0), "amount", "An amount should be greater than zero");
              Assert.ArgumentCondition((amount <= reservationTicket.Amount), "amount", "An amount should not be greater than the original reserved one");

              ITransactionData transactionDataProvider = Context.Entity.Resolve<ITransactionData>();

              long accountNumber = TypeUtil.TryParse<long>(paymentSystem.Username, 0);
              int transactionNumber = int.Parse(reservationTicket.TransactionNumber);
              int amountInput = int.Parse(amount.ToCents());

              string encryptionKey = paymentSystem.Password;

              ArrayList param = new ArrayList
              {
            accountNumber,
            transactionNumber,
            amountInput,
            encryptionKey
              };
              string hash = this.CreateMD5Hash(param);

              PxOrder order = new PxOrder();
              string xmlReturn = order.Capture2(accountNumber, transactionNumber, amountInput, hash);
              string errorCode = this.ParseRes(xmlReturn, "/payex/status/errorCode");
              string description = this.ParseRes(xmlReturn, "/payex/status/description");

              if (errorCode == "OK" && description == "OK")
              {
            transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, PaymentConstants.CaptureSuccess);
              }
              else
              {
            transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, string.Format("errorCode={0} description={1}", errorCode, description));
              }
        }
Esempio n. 10
0
        protected PxOrder GetPayExServiceClient( IDictionary<string, string> settings )
        {
            settings.MustNotBeNull( "settings" );

              PxOrder pxOrder = new PxOrder {
            Url = settings.ContainsKey( "testing" ) && settings[ "testing" ] == "1" ? "https://test-external.payex.com/pxorder/pxorder.asmx" : "https://external.payex.com/pxorder/pxorder.asmx"
              };
              return pxOrder;
        }
Esempio n. 11
0
        /// <summary>
        /// Begins the payment.
        /// </summary>
        /// <param name="paymentSystem">The payment System.</param>
        /// <param name="paymentArgs">The payment Args.</param>
        public override void Invoke([NotNull] PaymentSystem paymentSystem, [NotNull] PaymentArgs paymentArgs)
        {
            Assert.IsNotNull(paymentSystem, "Payment system is null");
            Assert.ArgumentNotNull(paymentArgs, "paymentArgs");
            Assert.IsNotNull(paymentArgs.ShoppingCart, "Shopping cart is null");

            ITransactionData      transactionDataProvider = Context.Entity.Resolve <ITransactionData>();
            PaymentSettingsReader configuration           = new PaymentSettingsReader(paymentSystem);

            long   accountNumber     = TypeUtil.TryParse <long>(paymentSystem.Username, 0);
            string purchaseOperation = configuration.GetSetting("purchaseOperation");
            int    price             = int.Parse(paymentArgs.ShoppingCart.Totals.TotalPriceIncVat.ToCents());
            int    shippingPrice     = int.Parse(paymentArgs.ShoppingCart.ShippingPrice.ToCents());
            string priceArgList      = string.Empty;

            string    currency         = this.Currency(paymentArgs.ShoppingCart.Currency.Code);
            const int Vat              = 0;
            string    orderID          = paymentArgs.ShoppingCart.OrderNumber;
            string    productNumber    = paymentArgs.ShoppingCart.ShoppingCartLines.Aggregate(string.Empty, (accumulator, next) => string.Format("{0}, {1}", accumulator, next.Product.Code)).Trim().TrimStart(',');
            string    description      = paymentArgs.Description;
            string    clientIpAddress  = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            string    clientIdentifier = configuration.GetSetting("clientIdentifier");
            string    additionalValues = configuration.GetSetting("additionalValues");
            string    externalID       = configuration.GetSetting("externalID");
            string    returnUrl        = paymentArgs.PaymentUrls.ReturnPageUrl;
            string    cancelUrl        = returnUrl + PaymentConstants.CancelQueryString;
            string    view             = configuration.GetSetting("view");
            string    agreementRef     = configuration.GetSetting("agreementRef");
            string    clientLanguage   = this.Language(Sitecore.Context.Language.Name);
            string    encryptionKey    = paymentSystem.Password;

            ArrayList param = new ArrayList
            {
                accountNumber.ToString(),
                      purchaseOperation,
                      price,
                      priceArgList,
                      currency,
                      Vat,
                      orderID,
                      productNumber,
                      description,
                      clientIpAddress,
                      clientIdentifier,
                      additionalValues,
                      externalID,
                      returnUrl,
                      view,
                      agreementRef,
                      cancelUrl,
                      clientLanguage,
                      encryptionKey
            };
            string hash = this.CreateMD5Hash(param);

            PxOrder order     = new PxOrder();
            string  xmlReturn = order.Initialize7(accountNumber, purchaseOperation, price, priceArgList, currency, Vat, orderID, productNumber, description, clientIpAddress, clientIdentifier, additionalValues, externalID, returnUrl, view, agreementRef, cancelUrl, clientLanguage, hash);

            string        redirectUrl          = this.ParseRes(xmlReturn, "/payex/redirectUrl");
            string        orderRef             = this.ParseRes(xmlReturn, "/payex/orderRef");
            int           itemNumber           = 1;
            string        mainErrorDescription = this.ParseRes(xmlReturn, "/payex/status/description");
            List <string> errorCodes           = new List <string>
            {
                this.ParseRes(xmlReturn, "/payex/status/errorCode"),
                mainErrorDescription,
                this.PrepareOrderLine(
                    order,
                    accountNumber,
                    orderRef,
                    itemNumber++.ToString(),
                    description,
                    paymentArgs.ShoppingCart.ShoppingCartLines.Count,
                    price - shippingPrice,
                    int.Parse(paymentArgs.ShoppingCart.Totals.TotalVat.ToCents()),
                    int.Parse(paymentArgs.ShoppingCart.Totals.VAT.ToCents()) * 100,
                    encryptionKey),
                this.PrepareOrderLine(
                    order,
                    accountNumber,
                    orderRef,
                    itemNumber++.ToString(),
                    "Shipping price",
                    1,
                    shippingPrice,
                    0,
                    0,
                    encryptionKey)
            };

            if (errorCodes.TrueForAll(x => x == "OK"))
            {
                transactionDataProvider.SaveStartValues(orderID, price.ToString(), currency, paymentSystem.Code);
            }
            else
            {
                transactionDataProvider.SavePersistentValue(orderID, TransactionConstants.PaymentStatus, PaymentStatus.Failure.ToString());
                redirectUrl = paymentArgs.PaymentUrls.FailurePageUrl;
                HttpContext.Current.Session["paymentErrorMessage"] = mainErrorDescription;
            }

            HttpContext.Current.Response.Redirect(redirectUrl, false);
            HttpContext.Current.ApplicationInstance.CompleteRequest();
        }