コード例 #1
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var data = HttpContext.Current.Request["Data"];
            var seal = HttpContext.Current.Request["Seal"];

            Log.Instance.LogDebug("Omnikassa data: " + data + " Omnikassa seal: " + seal);

            var securityKey = paymentProvider.GetSetting("SecurityKey");

            // Verifieer de Seal
            var sha256    = SHA256.Create();
            var hashValue = sha256.ComputeHash(new UTF8Encoding().GetBytes(data + securityKey));

            if (seal.ToLower() == ByteArrayToHexString(hashValue).ToLower())             // Seal is goed
            {
                // Lees de gewenste waarden uit de server response
                var dataItems       = ParseData(data);
                var transactionCode = dataItems.First(i => i.Key == "transactionReference").Value;
                var responseCode    = dataItems.First(i => i.Key == "responseCode").Value;

                Log.Instance.LogDebug("Omnikassa transactionCode: " + transactionCode + " responseCode: " + responseCode);

                orderInfo = OrderHelper.GetOrder(transactionCode);

                Log.Instance.LogDebug("Omnikassa orderInfo: " + orderInfo.OrderNumber);

                var successUrl = paymentProvider.SuccessUrl();
                var cancelUrl  = paymentProvider.ErrorUrl();

                var redirectUrl = successUrl;

                //Code	Beschrijving
                //00	Transaction success, authorization accepted (transactie gelukt, autorisatie geaccepteerd).
                //02	Please call the bank because the authorization limit on the card has been exceeded (neem contact op met de bank; de autorisatielimiet op de kaart is overschreden)
                //03	Invalid merchant contract (ongeldig contract webwinkel)
                //05	Do not honor, authorization refused (niet inwilligen, autorisatie geweigerd)
                //12	Invalid transaction, check the parameters sent in the request (ongeldige transactie, controleer de in het verzoek verzonden parameters).
                //14	Invalid card number or invalid Card Security Code or Card (for
                //MasterCard) or invalid Card Verification Value (for Visa/MAESTRO) (ongeldig kaartnummer of ongeldige beveiligingscode of kaart (voor MasterCard) of ongeldige waarde kaartverificatie (voor Visa/MAESTRO))
                //17	Cancellation of payment by the end user (betaling geannuleerd door eindgebruiker/klant)
                //24	Invalid status (ongeldige status).
                //25	Transaction not found in database (transactie niet gevonden in database)
                //30	Invalid format (ongeldig formaat)
                //34	Fraud suspicion (vermoeden van fraude)
                //40	Operation not allowed to this Merchant (handeling niet toegestaan voor deze webwinkel)
                //60	Pending transaction (transactie in behandeling)
                //63	Security breach detected, transaction stopped (beveiligingsprobleem gedetecteerd, transactie gestopt).
                //75	The number of attempts to enter the card number has been exceeded (three tries exhausted) (het aantal beschikbare pogingen om het card‐nummer in te geven is overschreden (max. drie))
                //90	Acquirer server temporarily unavailable (server acquirer tijdelijk onbeschikbaar)
                //94	Duplicate transaction (duplicaattransactie). (transactiereferentie al gereserveerd)
                //97	Request time‐out; transaction refused (time‐out voor verzoek; transactie geweigerd)
                //99	Payment page temporarily unavailable (betaalpagina tijdelijk niet beschikbaar)


                if (orderInfo.Paid == false)
                {
                    switch (responseCode)
                    {
                    case "00":
                        orderInfo.Paid   = true;
                        orderInfo.Status = OrderStatus.ReadyForDispatch;
                        break;

                    case "60":
                    case "90":
                        orderInfo.Paid   = false;
                        orderInfo.Status = OrderStatus.WaitingForPaymentProvider;
                        break;

                    case "17":
                        orderInfo.Paid   = false;
                        orderInfo.Status = OrderStatus.PaymentFailed;
                        orderInfo.PaymentInfo.ErrorMessage = "CANCELLED";
                        redirectUrl = cancelUrl;
                        break;

                    case "EXPIRED":
                        orderInfo.Paid   = false;
                        orderInfo.Status = OrderStatus.PaymentFailed;
                        orderInfo.PaymentInfo.ErrorMessage = "EXPIRED";

                        redirectUrl = cancelUrl;
                        break;

                    default:
                        orderInfo.Paid   = false;
                        orderInfo.Status = OrderStatus.WaitingForPaymentProvider;

                        redirectUrl = cancelUrl;
                        break;
                    }

                    orderInfo.Save();
                }

                HttpContext.Current.Response.Redirect(redirectUrl);
            }
            else
            {
                throw new Exception("SEAL BROKEN");
            }

            return(orderInfo);
        }
コード例 #2
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var data = HttpContext.Current.Request["Data"];
            var seal = HttpContext.Current.Request["Seal"];

            Log.Instance.LogDebug("Omnikassa data: " + data + " Omnikassa seal: " + seal);

            var securityKey = paymentProvider.GetSetting("SecurityKey");

            // Verifieer de Seal
            var sha256 = SHA256.Create();
            var hashValue = sha256.ComputeHash(new UTF8Encoding().GetBytes(data + securityKey));

            if (seal.ToLower() == ByteArrayToHexString(hashValue).ToLower()) // Seal is goed
            {
                // Lees de gewenste waarden uit de server response
                var dataItems = ParseData(data);
                var transactionCode = dataItems.First(i => i.Key == "transactionReference").Value;
                var responseCode = dataItems.First(i => i.Key == "responseCode").Value;

                Log.Instance.LogDebug("Omnikassa transactionCode: " + transactionCode + " responseCode: " + responseCode);

                orderInfo = OrderHelper.GetOrder(transactionCode);

                Log.Instance.LogDebug("Omnikassa orderInfo: " + orderInfo.OrderNumber);

                var successUrl = paymentProvider.SuccessUrl();
                var cancelUrl = paymentProvider.ErrorUrl();

                var redirectUrl = successUrl;

                //Code	Beschrijving
                //00	Transaction success, authorization accepted (transactie gelukt, autorisatie geaccepteerd).
                //02	Please call the bank because the authorization limit on the card has been exceeded (neem contact op met de bank; de autorisatielimiet op de kaart is overschreden)
                //03	Invalid merchant contract (ongeldig contract webwinkel)
                //05	Do not honor, authorization refused (niet inwilligen, autorisatie geweigerd)
                //12	Invalid transaction, check the parameters sent in the request (ongeldige transactie, controleer de in het verzoek verzonden parameters).
                //14	Invalid card number or invalid Card Security Code or Card (for
                //MasterCard) or invalid Card Verification Value (for Visa/MAESTRO) (ongeldig kaartnummer of ongeldige beveiligingscode of kaart (voor MasterCard) of ongeldige waarde kaartverificatie (voor Visa/MAESTRO))
                //17	Cancellation of payment by the end user (betaling geannuleerd door eindgebruiker/klant)
                //24	Invalid status (ongeldige status).
                //25	Transaction not found in database (transactie niet gevonden in database)
                //30	Invalid format (ongeldig formaat)
                //34	Fraud suspicion (vermoeden van fraude)
                //40	Operation not allowed to this Merchant (handeling niet toegestaan voor deze webwinkel)
                //60	Pending transaction (transactie in behandeling)
                //63	Security breach detected, transaction stopped (beveiligingsprobleem gedetecteerd, transactie gestopt).
                //75	The number of attempts to enter the card number has been exceeded (three tries exhausted) (het aantal beschikbare pogingen om het card‐nummer in te geven is overschreden (max. drie))
                //90	Acquirer server temporarily unavailable (server acquirer tijdelijk onbeschikbaar)
                //94	Duplicate transaction (duplicaattransactie). (transactiereferentie al gereserveerd)
                //97	Request time‐out; transaction refused (time‐out voor verzoek; transactie geweigerd)
                //99	Payment page temporarily unavailable (betaalpagina tijdelijk niet beschikbaar)

                if (orderInfo.Paid == false)
                {
                    switch (responseCode)
                    {
                        case "00":
                            orderInfo.Paid = true;
                            orderInfo.Status = OrderStatus.ReadyForDispatch;
                            break;
                        case "60":
                        case "90":
                            orderInfo.Paid = false;
                            orderInfo.Status = OrderStatus.WaitingForPaymentProvider;
                            break;
                        case "17":
                            orderInfo.Paid = false;
                            orderInfo.Status = OrderStatus.PaymentFailed;
                            orderInfo.PaymentInfo.ErrorMessage = "CANCELLED";
                            redirectUrl = cancelUrl;
                            break;
                        case "EXPIRED":
                            orderInfo.Paid = false;
                            orderInfo.Status = OrderStatus.PaymentFailed;
                            orderInfo.PaymentInfo.ErrorMessage = "EXPIRED";

                            redirectUrl = cancelUrl;
                            break;
                        default:
                            orderInfo.Paid = false;
                            orderInfo.Status = OrderStatus.WaitingForPaymentProvider;

                            redirectUrl = cancelUrl;
                            break;
                    }

                    orderInfo.Save();
                }

                HttpContext.Current.Response.Redirect(redirectUrl);
            }
            else
            {
                throw new Exception("SEAL BROKEN");
            }

            return orderInfo;
        }
コード例 #3
0
        /// <summary>
        /// Handles the response
        /// </summary>
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            #region config helper



            var merchantId = paymentProvider.GetSetting("merchantId");

            var merchantKey = paymentProvider.GetSetting("merchantKey");

            var merchantSecret = paymentProvider.GetSetting("merchantSecret");

            var url = paymentProvider.GetSetting("url");

            var transactionId = HttpContext.Current.Request["id"];



            if (orderInfo == null)
            {
                orderInfo = OrderHelper.GetOrder(transactionId);
            }


            if (orderInfo == null)
            {
                Log.Instance.LogError("Easy iDeal response: Order Not Found For TransactionId: " + transactionId);

                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                return(null);
            }

            // get the localized (for the right store) payment provider to get the right success/return urls
            var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias);

            var redirectUrl = localizedPaymentProvider.ErrorUrl();
            var successUrl  = localizedPaymentProvider.SuccessUrl();

            #endregion
            try
            {
                var paymentStatus = HttpContext.Current.Request["status"];
                var salt          = HttpContext.Current.Request["salt"];
                var checksum      = HttpContext.Current.Request["checksum"];

                if (string.IsNullOrEmpty(transactionId))
                {
                    Log.Instance.LogError("Easy iDeal response: TransactionId IsNullOrEmpty");
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return(null);
                }
                if (orderInfo.Paid != false)
                {
                    Log.Instance.LogDebug("Easy iDeal response: Order already paid! TransactionId: " + transactionId);
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return(null);
                }

                var transactionCode = OrderHelper.ExtraInformationValue(orderInfo, "extraTransactionCode");

                if (string.IsNullOrEmpty(transactionCode))
                {
                    Log.Instance.LogDebug("Easy iDeal response: OrderTransactionCode IsNullOrEmpty ");
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return(null);
                }

                //check validity of request
                if (CheckChecksumPaymentStatus(transactionId, transactionCode, paymentStatus, salt, checksum)) //only check for payment status if request is valid.
                //This is a bit redundant, since you allready now the paymentStatus. But we could choose to do something with the extra info you get from this request e.g. IBAN
                {
                    var args = new SortedList <string, string>
                    {
                        { "TransactionID", transactionId },
                        { "TransactionCode", transactionCode }
                    };


                    var xmlRequest = GetXml(TRANSACTIONSTATUS, args, merchantId, merchantKey, merchantSecret);

                    XDocument xmlResponse = XDocument.Parse(PostXml(xmlRequest, url));

                    var responseStatus = xmlResponse.Element("Response").Element("Status").FirstNode.ToString();

                    if (responseStatus == "OK")
                    {
                        if (xmlResponse.Element("Response").Element("Transaction").Element("Paid").FirstNode.ToString() == "Y")
                        {
                            orderInfo.Paid   = true;
                            orderInfo.Status = OrderStatus.ReadyForDispatch;
                            redirectUrl      = successUrl;
                        }
                        else
                        {
                            orderInfo.Paid   = false;
                            orderInfo.Status = OrderStatus.PaymentFailed;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Instance.LogError("EasyIdealPaymentResponseHandler.HandlePaymentResponse: " + ex);
            }

            HttpContext.Current.Response.Redirect(redirectUrl);

            return(orderInfo);
        }
コード例 #4
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var httpRequest = HttpContext.Current.Request;

            var requestParams = new Dictionary<string, string>();
            NameValueCollection httpRequestParams = httpRequest.HttpMethod == "POST" ? httpRequest.Form : httpRequest.QueryString;

            foreach (string key in httpRequestParams)
            {
                requestParams.Add(key, httpRequest[key]);
            }

            var buckarooParams = new BuckarooResponseParameters(paymentProvider.GetSetting("SecretKey"), requestParams);
            if (buckarooParams.IsValid())
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            orderInfo = OrderHelper.GetOrder(buckarooParams.TransactionId);
            if (orderInfo == null)
            {
                throw new ApplicationException("Buckaroo payment handler: no order found with transactionId " + buckarooParams.TransactionId);
            }

            var signatureFromBuckaroo = buckarooParams.Signature;
            var calculatedSignature = buckarooParams.GetSignature();

            if (string.Compare(signatureFromBuckaroo, calculatedSignature) != 0)
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            Log.Instance.LogError("Buckaroo returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount);

            if (string.IsNullOrEmpty(buckarooParams.TransactionId))
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias);

            var succesUrl = localizedPaymentProvider.SuccessUrl();
            var failUrl = localizedPaymentProvider.ErrorUrl();

            var redirectUrl = succesUrl;

            if (orderInfo.Paid == true)
            {
                Log.Instance.LogError("Buckaroo Already PAID returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount);
                HttpContext.Current.Response.Redirect(succesUrl);
                HttpContext.Current.Response.End();
            }
            else
            {
                redirectUrl = failUrl;
            }

            //190	 Succes: De transactie is geslaagd en de betaling is ontvangen / goedgekeurd.	 Definitief	 Ja
            //490	 Mislukt: De transactie is mislukt.	 Definitief	 Nee
            //491	 Validatie mislukt: De transactie verzoek bevatte fouten en kon niet goed verwerkt worden	 Definitief	 Nee
            //492	 Technische storing: Door een technische storing kon de transactie niet worden afgerond
            //Definitief	 Nee
            //690	 Afgekeurd: De transactie is afgewezen door de (derde) payment provider.	 Definitief	 Nee
            //790	 In afwachting van invoer: De transactie is in de wacht, terwijl de payment enginge staat te wachten
            //op de inbreng van de consument.	 Tijdelijk	 Nee
            //791	 In afwachting van verwerking: De transactie wordt verwerkt.	 Tijdelijk	 Nee
            //792	 In afwachting van de consument: de betaling Engine wacht voor de consument om terug te keren van
            //een website van derden, die nodig is om de transactie te voltooien.	 Tijdelijk	 Nee
            //793	 De transactie is onhold.
            //Tijdelijk	 Nee
            //890	 Geannuleerd door Gebruiker: De transactie is geannuleerd door de klant.
            //Definitief	 Nee
            //891	 Geannuleerd door Merchant: De merchant heeft de transactie geannuleerd.	 Definitief	 Nee

            switch (buckarooParams.StatusCode)
            {
                case "190":
                    orderInfo.Paid = true;
                    orderInfo.Status = OrderStatus.ReadyForDispatch;
                    redirectUrl = succesUrl;
                    break;
                case "490":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Transaction Failed (490) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "491":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Validation Failed (491) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "492":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Technical Failure (492) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "690":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Payment Denied by 3rd Party (690) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "790":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer input (790) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "791":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Waiting for transaction handling (791) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "792":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer to return from 3rd party website (792) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "793":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Transaction is On Hold (793) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "890":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Customer (890) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "891":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Merchant (891) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
            }

            orderInfo.Save();

            HttpContext.Current.Response.Redirect(redirectUrl);

            return orderInfo;
        }
コード例 #5
0
        /// <summary>
        /// Handles the response
        /// </summary>
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            #region config helper

            var merchantId = paymentProvider.GetSetting("merchantId");

            var merchantKey = paymentProvider.GetSetting("merchantKey");

            var merchantSecret = paymentProvider.GetSetting("merchantSecret");

            var url = paymentProvider.GetSetting("url");

            var transactionId = HttpContext.Current.Request["id"];

            if (orderInfo == null)
            {
                orderInfo = OrderHelper.GetOrder(transactionId);
            }

            if (orderInfo == null)
            {
                Log.Instance.LogError("Easy iDeal response: Order Not Found For TransactionId: " + transactionId);

                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                return null;
            }

            // get the localized (for the right store) payment provider to get the right success/return urls
            var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias);

            var redirectUrl = localizedPaymentProvider.ErrorUrl();
            var successUrl = localizedPaymentProvider.SuccessUrl();

            #endregion
            try
            {
                var paymentStatus = HttpContext.Current.Request["status"];
                var salt = HttpContext.Current.Request["salt"];
                var checksum = HttpContext.Current.Request["checksum"];

                if (string.IsNullOrEmpty(transactionId))
                {
                    Log.Instance.LogError("Easy iDeal response: TransactionId IsNullOrEmpty");
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return null;
                }
                if (orderInfo.Paid != false)
                {
                    Log.Instance.LogDebug("Easy iDeal response: Order already paid! TransactionId: " + transactionId);
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return null;
                }

                var transactionCode = OrderHelper.ExtraInformationValue(orderInfo, "extraTransactionCode");

                if (string.IsNullOrEmpty(transactionCode))
                {
                    Log.Instance.LogDebug("Easy iDeal response: OrderTransactionCode IsNullOrEmpty ");
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return null;
                }

                //check validity of request
                if (CheckChecksumPaymentStatus(transactionId, transactionCode, paymentStatus, salt, checksum)) //only check for payment status if request is valid.
                    //This is a bit redundant, since you allready now the paymentStatus. But we could choose to do something with the extra info you get from this request e.g. IBAN
                {

                    var args = new SortedList<string, string>
                        {
                            {"TransactionID", transactionId},
                            {"TransactionCode", transactionCode}
                        };

                    var xmlRequest = GetXml(TRANSACTIONSTATUS, args, merchantId, merchantKey, merchantSecret);

                    XDocument xmlResponse = XDocument.Parse(PostXml(xmlRequest, url));

                    var responseStatus = xmlResponse.Element("Response").Element("Status").FirstNode.ToString();

                    if (responseStatus == "OK")
                    {
                        if (xmlResponse.Element("Response").Element("Transaction").Element("Paid").FirstNode.ToString() == "Y")
                        {
                            orderInfo.Paid = true;
                            orderInfo.Status = OrderStatus.ReadyForDispatch;
                            redirectUrl = successUrl;

                        }
                        else
                        {
                            orderInfo.Paid = false;
                            orderInfo.Status = OrderStatus.PaymentFailed;
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                Log.Instance.LogError("EasyIdealPaymentResponseHandler.HandlePaymentResponse: " + ex);
            }

            HttpContext.Current.Response.Redirect(redirectUrl);

            return orderInfo;
        }
コード例 #6
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var httpRequest = HttpContext.Current.Request;

            Dictionary <string, string> requestParams     = new Dictionary <string, string>();
            NameValueCollection         httpRequestParams = httpRequest.HttpMethod == "POST"
                                                                ? httpRequest.Form
                                                                : httpRequest.QueryString;

            foreach (string key in httpRequestParams)
            {
                requestParams.Add(key, httpRequest[key]);
            }

            BuckarooResponseParameters buckarooParams = new BuckarooResponseParameters(paymentProvider.GetSetting("SecretKey"), requestParams);

            if (buckarooParams.IsValid())
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            string signatureFromBuckaroo = buckarooParams.Signature;
            string calculatedSignature   = buckarooParams.GetSignature();

            if (string.Compare(signatureFromBuckaroo, calculatedSignature) != 0)
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            Log.Instance.LogError("Buckaroo returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount);

            if (string.IsNullOrEmpty(buckarooParams.TransactionId))
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias);

            var succesUrl = localizedPaymentProvider.SuccessUrl();
            var failUrl   = localizedPaymentProvider.ErrorUrl();

            var redirectUrl = succesUrl;

            if (orderInfo.Paid == true)
            {
                Log.Instance.LogError("Buckaroo Already PAID returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount);
                HttpContext.Current.Response.Redirect(succesUrl);
                HttpContext.Current.Response.End();
            }
            else
            {
                redirectUrl = failUrl;
            }

            //190	 Succes: De transactie is geslaagd en de betaling is ontvangen / goedgekeurd.	 Definitief	 Ja
            //490	 Mislukt: De transactie is mislukt.	 Definitief	 Nee
            //491	 Validatie mislukt: De transactie verzoek bevatte fouten en kon niet goed verwerkt worden	 Definitief	 Nee
            //492	 Technische storing: Door een technische storing kon de transactie niet worden afgerond
            //Definitief	 Nee
            //690	 Afgekeurd: De transactie is afgewezen door de (derde) payment provider.	 Definitief	 Nee
            //790	 In afwachting van invoer: De transactie is in de wacht, terwijl de payment enginge staat te wachten
            //op de inbreng van de consument.	 Tijdelijk	 Nee
            //791	 In afwachting van verwerking: De transactie wordt verwerkt.	 Tijdelijk	 Nee
            //792	 In afwachting van de consument: de betaling Engine wacht voor de consument om terug te keren van
            //een website van derden, die nodig is om de transactie te voltooien.	 Tijdelijk	 Nee
            //793	 De transactie is onhold.
            //Tijdelijk	 Nee
            //890	 Geannuleerd door Gebruiker: De transactie is geannuleerd door de klant.
            //Definitief	 Nee
            //891	 Geannuleerd door Merchant: De merchant heeft de transactie geannuleerd.	 Definitief	 Nee

            switch (buckarooParams.StatusCode)
            {
            case "190":
                orderInfo.Paid   = true;
                orderInfo.Status = OrderStatus.ReadyForDispatch;
                redirectUrl      = succesUrl;
                break;

            case "490":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.PaymentFailed;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Transaction Failed (490) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "491":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.PaymentFailed;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Validation Failed (491) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "492":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.PaymentFailed;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Technical Failure (492) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "690":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.PaymentFailed;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Payment Denied by 3rd Party (690) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "790":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer input (790) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "791":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Waiting for transaction handling (791) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "792":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer to return from 3rd party website (792) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "793":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Transaction is On Hold (793) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "890":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Customer (890) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "891":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Merchant (891) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;
            }

            orderInfo.Save();


            HttpContext.Current.Response.Redirect(redirectUrl);

            return(orderInfo);
        }