コード例 #1
0
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);

            var partnerId = paymentProvider.GetSetting("PartnerId");
            var returnUrl = paymentProvider.SuccessUrl();
            var reportUrl = paymentProvider.ReportUrl();
            var testMode  = paymentProvider.TestMode;

            var idealFetch = new IdealFetch(partnerId, testMode, orderInfo.OrderNumber, reportUrl, returnUrl, orderInfo.PaymentInfo.MethodId, orderInfo.ChargedAmount);

            if (idealFetch.Error)
            {
                Log.Instance.LogError("Mollie PaymentRequestHandler.CreatePaymentRequest: idealFetch.Error: " + idealFetch.ErrorMessage);
                return(null);
            }

            var transactionId = idealFetch.TransactionId;

            orderInfo.PaymentInfo.Url = idealFetch.Url;

            PaymentProviderHelper.SetTransactionId(orderInfo, transactionId);

            return(new PaymentRequest());
        }
コード例 #2
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var orderId = HttpContext.Current.Request.QueryString["orderid"] ?? "";

            if (paymentProvider == null || string.IsNullOrEmpty(orderId))
            {
                return(null);
            }
            orderInfo = OrderHelper.GetOrder(orderId);
            if (orderInfo != null)
            {
                var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);
                var secret    = paymentProvider.GetSetting("secret");
                var amount    = HttpContext.Current.Request.QueryString["amount"] ?? "0";
                var validated = true;
                if (secret != string.Empty)
                {
                    var sb = new StringBuilder();
                    foreach (var key in HttpContext.Current.Request.QueryString.AllKeys)
                    {
                        if (key != "hash")
                        {
                            sb.Append(HttpContext.Current.Request.QueryString[key]);
                        }
                    }
                    var calculated = ePayPaymentBase.MD5(sb.ToString() + secret).ToUpperInvariant();
                    var incoming   = (HttpContext.Current.Request.QueryString["hash"] ?? "").ToUpperInvariant();
                    validated = calculated == incoming;
                    if (!validated)
                    {
                        //checksum error
                        Log.Instance.LogError("Payment provider (ePay) error : Orderid " + orderId + " - incoming hash " + incoming + " - calculated hash " + calculated);
                    }
                }
                if (validated && (amount == orderInfo.ChargedAmountInCents.ToString()))
                {
                    orderInfo.Paid   = true;
                    orderInfo.Status = OrderStatus.ReadyForDispatch;
                    orderInfo.Save();
                }
                else
                {
                    orderInfo.Paid   = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    orderInfo.Save();
                    if (validated)
                    {
                        //checksum already logged, must be problem with amount
                        Log.Instance.LogError("Payment provider (ePay) error : Orderid " + orderId + " - incoming amount " + amount.ToString() + " - order amount " + orderInfo.ChargedAmountInCents.ToString());
                    }
                }
            }
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.Write("OK");
            HttpContext.Current.Response.Flush();
            return(orderInfo);
        }
コード例 #3
0
        /// <summary>
        /// Creates a payment request for this payment provider
        /// </summary>
        /// <param name="orderInfo"> </param>
        /// <returns>Payment request</returns>
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);

            #region build urls

            var returnUrl = paymentProvider.SuccessUrl();

            var reportUrl = paymentProvider.ReportUrl();

            var testMode = paymentProvider.TestMode;  //currently we don't have a testmode for easy-ideal this var is unused

            #endregion

            #region config helper

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

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

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

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

            #endregion

            var args = new SortedList <string, string>();
            var ci   = new CultureInfo("en-US");
            args.Add("Amount", orderInfo.ChargedAmount.ToString("G", ci));
            args.Add("Currency", "EUR");
            args.Add("Bank", orderInfo.PaymentInfo.MethodId);
            args.Add("Description", orderInfo.OrderNumber);
            args.Add("Return", reportUrl);

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

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

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

            var transactionId   = xmlResponse.Element("Response").Element("Response").Element("TransactionID").FirstNode.ToString();
            var transactionCode = xmlResponse.Element("Response").Element("Response").Element("Code").FirstNode.ToString();
            var bankUrl         = HttpUtility.HtmlDecode(xmlResponse.Element("Response").Element("Response").Element("BankURL").FirstNode.ToString());

            orderInfo.PaymentInfo.Url = bankUrl;


            PaymentProviderHelper.SetTransactionId(orderInfo, transactionId); //transactionCode hierin verwerken??

            //IO.Container.Resolve<IOrderUpdatingService>().AddCustomerFields(order, new Dictionary<string, string>({ "extraBilling", value }), CustomerDatatypes.Extra);
            orderInfo.AddCustomerFields(new Dictionary <string, string> {
                { "extraTransactionCode", transactionCode }
            }, Common.CustomerDatatypes.Extra);
            orderInfo.Save();

            return(new PaymentRequest());
        }
コード例 #4
0
        public IEnumerable <PaymentProviderMethod> GetAllPaymentMethods(int id)
        {
            var paymentMethods  = new List <PaymentProviderMethod>();
            var paymentProvider = PaymentProvider.GetPaymentProvider(id);

            var directoryLiveUrl = "https://www.sisow.nl/Sisow/iDeal/RestHandler.ashx/DirectoryRequest";
            var directoryTestUrl = "https://www.sisow.nl/Sisow/iDeal/RestHandler.ashx/DirectoryRequest?test=true";

            var configDirectoryLiveUrl = paymentProvider.GetSetting("DirectoryRequestUrl");
            var configDirectoryTestUrl = paymentProvider.GetSetting("DirectoryRequestTestUrl");

            if (!string.IsNullOrEmpty(configDirectoryLiveUrl))
            {
                directoryLiveUrl = configDirectoryLiveUrl;
            }
            if (!string.IsNullOrEmpty(configDirectoryTestUrl))
            {
                directoryTestUrl = configDirectoryTestUrl;
            }

            var apiURL = paymentProvider.TestMode ? directoryTestUrl : directoryLiveUrl;

            var issuerRequest = HttpGet(apiURL);

            XNamespace ns        = "https://www.sisow.nl/Sisow/REST";
            var        issuerXml = XDocument.Parse(issuerRequest);

            foreach (var issuer in issuerXml.Descendants(ns + "issuer"))
            {
                var issuerId   = issuer.Element(ns + "issuerid").Value;
                var issuerName = issuer.Element(ns + "issuername").Value;

                var paymentImageId = 0;

                var logoDictionaryItem = library.GetDictionaryItem(issuerId + "LogoId");

                if (string.IsNullOrEmpty(logoDictionaryItem))
                {
                    int.TryParse(library.GetDictionaryItem(issuerId + "LogoId"), out paymentImageId);
                }

                paymentMethods.Add(new PaymentProviderMethod
                {
                    Id           = issuerId,
                    Description  = issuerName,
                    Title        = issuerName,
                    Name         = issuerName,
                    ProviderName = GetName(),
                    ImageId      = paymentImageId
                });
            }

            return(paymentMethods);
        }
コード例 #5
0
        public string GetPaymentUrl(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id);

            if (!string.IsNullOrEmpty(orderInfo.PaymentInfo.Parameters))
            {
                var status = orderInfo.PaymentInfo.Parameters.Split('&')[0];

                return(status.ToUpperInvariant() == "OK" ? paymentProvider.SuccessUrl() : paymentProvider.ErrorUrl());
            }

            return(paymentProvider.ErrorUrl());
        }
コード例 #6
0
        public List <OrderValidationError> ValidatePayment(OrderInfo orderInfo)
        {
            try
            {
                if (orderInfo == null)
                {
                    throw new ArgumentNullException("orderInfo", "Geen order?!");
                }
                if (orderInfo.PaymentInfo == null)
                {
                    throw new NullReferenceException("orderInfo.PaymentInfo");
                }

                var errors = new List <OrderValidationError>();
                if (orderInfo.PaymentInfo.Id != 0)
                {
                    var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id);
                    if (paymentProvider == null)
                    {
                        throw new NullReferenceException("paymentProvider");
                    }
                    if (paymentProvider.Zones == null)
                    {
                        throw new NullReferenceException("paymentProvider.Zones");
                    }

                    if ((paymentProvider.Type != PaymentProviderType.OfflinePaymentAtCustomer && paymentProvider.Type != PaymentProviderType.OfflinePaymentInStore) && !paymentProvider.Zones.SelectMany(x => x.CountryCodes).Contains(orderInfo.CustomerInfo.CountryCode))
                    {
                        // country code for customer does not match zones for payment provider.
                        Log.Instance.LogWarning("ORDERVALIDATIONERROR: CUSTOMER COUNTRY DOES NOT MATCH PAYMENT PROVIDER");
                        errors.Add(new OrderValidationError {
                            Id = orderInfo.PaymentInfo.Id, Key = "ValidationCustomerCountryPaymentProviderMismatch", Value = "The Customer Country Does Not Match Countries Allowed For The Chosen Payment Provider"
                        });
                    }
                    errors.AddRange(PaymentProviderHelper.GetPaymentValidationResults(orderInfo).Where(e => e.Id == orderInfo.PaymentInfo.Id));
                }
                if (orderInfo.ConfirmValidationFailed && (orderInfo.PaymentInfo.Id == 0 && PaymentProviderHelper.GetPaymentProvidersForOrder(orderInfo).Count > 0))
                {
                    Log.Instance.LogWarning("ORDERVALIDATIONERROR: PAYMENT PROVIDERS AVAILABLE BUT NOT CHOSEN");
                    errors.Add(new OrderValidationError {
                        Id = 0, Key = "ValidationNoPaymentProviderChosen", Value = "No Payment Provider Chosen"
                    });
                }
                return(errors);
            }
            catch (Exception)
            {
                return(new List <OrderValidationError>());
            }
        }
コード例 #7
0
        public IEnumerable <PaymentProviderMethod> GetAllPaymentMethods(int id)
        {
            var paymentMethods = new List <PaymentProviderMethod>();

            var paymentProvider = PaymentProvider.GetPaymentProvider(id);


            if (paymentProvider == null)
            {
                Log.Instance.LogError(
                    "Mollie PaymentProvider 'GetAllPaymentMethods' paymentProvider == null");

                return(paymentMethods);
            }

            var testMode = paymentProvider.TestMode;

            var partnerId = paymentProvider.GetSetting("PartnerId");

            if (partnerId == null)
            {
                Log.Instance.LogError(
                    "Mollie PaymentProvider 'partnerId' not found in the PaymentProvider config file. Is the config correct?");
            }
            else
            {
                var banks = new IdealBanks(partnerId, testMode);

                foreach (var bank in banks.Banks)
                {
                    int paymentImageId;

                    int.TryParse(umbraco.library.GetDictionaryItem(bank.Name + "LogoId"), out paymentImageId);

                    paymentMethods.Add(new PaymentProviderMethod
                    {
                        Id           = bank.Id,
                        Description  = string.Format("iDEAL via {0}", bank.Name),
                        Title        = bank.Name,
                        Name         = bank.Name,
                        ProviderName = GetName()
                    });
                }
            }

            return(paymentMethods);
        }
コード例 #8
0
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);

            var failedUrl = paymentProvider.ErrorUrl();

            var reportUrl = paymentProvider.ReportUrl();

            #region config helper

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

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

            var uniqueId = orderInfo.OrderNumber + "x" + DateTime.Now.ToString("hhmmss");

            Log.Instance.LogDebug("ePay uniqueId " + uniqueId + ", paymentProviderNodeId: " + paymentProvider.Id);

            //<provider title="ePay">
            //  <merchantnumber>#YOUR Merchant Number#</accountId>
            //  <url>https://ssl.ditonlinebetalingssystem.dk/integration/ewindow/Default.aspx</url>
            //</provider>

            #endregion

            var request = new PaymentRequest();

            // retrieve Account ID
            request.Parameters.Add("merchantnumber", merchantnumber);
            request.Parameters.Add("amount", orderInfo.ChargedAmountInCents.ToString());
            request.Parameters.Add("orderid", uniqueId);

            request.Parameters.Add("callbackurl", reportUrl);
            request.Parameters.Add("accepturl", reportUrl);
            request.Parameters.Add("cancelurl", failedUrl);
            request.Parameters.Add("currency", orderInfo.StoreInfo.Store.CurrencyCultureSymbol);
            request.Parameters.Add("windowstate", "3");
            request.PaymentUrlBase = url;

            PaymentProviderHelper.SetTransactionId(orderInfo, uniqueId);

            orderInfo.PaymentInfo.Url        = request.PaymentUrl;
            orderInfo.PaymentInfo.Parameters = request.ParametersAsString;

            return(request);
        }
コード例 #9
0
        public IEnumerable <PaymentProviderMethod> GetAllPaymentMethods(int id = 0)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(id);

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

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

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

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

            var xmlRequest = GetXml(IDEAL_GETBANKS, new SortedList <string, string>(), merchantId, merchantKey, merchantSecret);

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

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

            var paymentProviderMethodList = new List <PaymentProviderMethod> {
            };

            if (responseStatus == "OK")
            {
                foreach (XElement bank in xmlResponse.Descendants("Bank"))
                {
                    paymentProviderMethodList.Add(new PaymentProviderMethod
                    {
                        Id           = bank.Element("Id").Value,
                        Description  = bank.Element("Name").Value,
                        Title        = bank.Element("Name").Value,
                        Name         = "Easy iDeal",
                        ProviderName = GetName(),
                        ImageId      = 0
                    });
                }
            }

            return(paymentProviderMethodList);
        }
コード例 #10
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo order)
        {
            var orderId = HttpContext.Current.Request.QueryString["orderid"];

            if (paymentProvider == null || string.IsNullOrEmpty(orderId))
            {
                return(null);
            }

            order = OrderHelper.GetOrder(orderId);

            var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(order.PaymentInfo.Id, order.StoreInfo.Alias);

            var acceptUrl = localizedPaymentProvider.SuccessUrl();
            var failedUrl = localizedPaymentProvider.ErrorUrl();

            var redirectUrl = failedUrl;

            var amount = HttpContext.Current.Request.QueryString["amount"];

            if (amount == order.ChargedAmountInCents.ToString())
            {
                order.Paid   = true;
                order.Status = OrderStatus.ReadyForDispatch;
                order.Save();

                redirectUrl = acceptUrl;
            }
            else
            {
                order.Paid = false;
                order.Save();
            }

            HttpContext.Current.Response.Redirect(redirectUrl);

            return(order);
        }
コード例 #11
0
        private void SetRequestData(IDirectPayment request, OrderInfo orderInfo)
        {
            // API Call for easier access (but not able to write to)
            var basket = API.Basket.GetBasket(orderInfo.UniqueOrderId);

            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id);

            var vendorName = paymentProvider.GetSetting("VendorName");

            request.VpsProtocol     = SagePaySettings.ProtocolVersion;
            request.TransactionType = SagePaySettings.DefaultTransactionType;
            request.Vendor          = SagePaySettings.VendorName;

            //Assign Vendor tx Code.
            request.VendorTxCode = SagePayAPIIntegration.GetNewVendorTxCode();

            request.Amount        = orderInfo.ChargedAmount;
            request.Currency      = new RegionInfo(orderInfo.StoreInfo.Store.CurrencyCultureInfo.LCID).ISOCurrencySymbol;
            request.Description   = orderInfo.OrderNumber + " " + vendorName;
            request.CustomerEmail = GetSagePaySafeCustomerInfo(basket.Customer.Email);

            request.BillingSurname    = GetSagePaySafeCustomerInfo(basket.Customer.LastName);
            request.BillingFirstnames = GetSagePaySafeCustomerInfo(basket.Customer.FirstName);
            request.BillingAddress1   = GetSagePaySafeCustomerInfo(basket.Customer.Address1);
            request.BillingPostCode   = GetSagePaySafeCustomerInfo(basket.Customer.ZipCode);
            request.BillingCity       = GetSagePaySafeCustomerInfo(basket.Customer.City);
            request.BillingCountry    = string.IsNullOrEmpty(basket.Customer.Country) ? "GB" : basket.Customer.Country;

            request.DeliverySurname    = GetSagePaySafeCustomerInfo(basket.Customer.Shipping.LastName);
            request.DeliveryFirstnames = GetSagePaySafeCustomerInfo(basket.Customer.Shipping.FirstName);
            request.DeliveryAddress1   = GetSagePaySafeCustomerInfo(basket.Customer.Shipping.Address1);
            request.DeliveryPostCode   = GetSagePaySafeCustomerInfo(basket.Customer.Shipping.ZipCode);
            request.DeliveryCity       = GetSagePaySafeCustomerInfo(basket.Customer.Shipping.City);
            request.DeliveryCountry    = string.IsNullOrEmpty(basket.Customer.Shipping.Country) ? "GB" : basket.Customer.Shipping.Country;


            var useToken = false;

            bool.TryParse(HttpContext.Current.Request["useToken"], out useToken);



            var cardTypeMethod   = orderInfo.PaymentInfo.MethodId;
            var creditCardNumber = string.Empty;

            if (paymentProvider.TestMode)
            {
                switch (cardTypeMethod.ToUpperInvariant())
                {
                case "VISA":
                    creditCardNumber = "4929000000006";
                    break;

                case "MC":
                    creditCardNumber = "5404000000000001";
                    break;

                case "MCDEBIT":
                    creditCardNumber = "5573470000000001";
                    break;

                case "DELTA":
                    creditCardNumber = "4462000000000003";
                    break;

                case "MAESTRO":
                    creditCardNumber = "5641820000000005";
                    break;

                case "UKE":
                    creditCardNumber = "4917300000000008";
                    break;

                case "AMEX":
                    creditCardNumber = "374200000000004";
                    break;

                case "DINERS":
                    creditCardNumber = "36000000000008";
                    break;

                case "DC":
                    creditCardNumber = "4929000000006";
                    break;

                case "JCB":
                    creditCardNumber = "3569990000000009";
                    break;

                case "LASER":
                    creditCardNumber = "6304990000000000044";
                    break;
                }
            }
            else
            {
                creditCardNumber = HttpContext.Current.Request["cardNumber"];
            }

            // uWebshop does not store card data, therefore the data is taken from the current Request
            if (useToken == false)
            {
                request.CardType   = (CardType)Enum.Parse(typeof(CardType), cardTypeMethod);
                request.CardHolder = paymentProvider.TestMode ? "T.Ester" : HttpContext.Current.Request["cardHolder"];
                request.CardNumber = creditCardNumber;
                //request.StartDate = HttpContext.Current.Request["cardStartDate"];
                request.ExpiryDate = paymentProvider.TestMode ? DateTime.Now.AddMonths(6).ToString("MMyy") : HttpContext.Current.Request["cardExpiryDate"];
                request.Cv2        = paymentProvider.TestMode ? "123" : HttpContext.Current.Request["cardCV2"];;
            }
            else
            {
                request.Token      = HttpContext.Current.Request["cardToken"];
                request.Cv2        = paymentProvider.TestMode ? "123" : HttpContext.Current.Request["cardCV2"];;
                request.StoreToken = 1;
            }
        }
コード例 #12
0
        public IEnumerable <PaymentProviderMethod> GetAllPaymentMethods(int id)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(id);

            var providerSettingsXML = paymentProvider.GetSettingsXML();

            //amex
            //Bancontact Mister Cash
            //directdebit
            //directdebitrecurring
            //giropay
            //ideal
            //idealprocessing
            //mastercard
            //Overboeking
            //Payment guarantee
            //paypal
            //sofortbanking
            //visa
            //Giftcards

            var enabledServices = providerSettingsXML.Descendants("Services").FirstOrDefault();

            var paymentMethods = new List <PaymentProviderMethod>();

            foreach (var service in enabledServices.Descendants("Service"))
            {
                var serviceName  = service.Attribute("name").Value;
                var serviceTitle = serviceName;

                if (service.Attribute("title") != null)
                {
                    serviceTitle = service.Attribute("title").Value;
                }

                var paymentImageId = 0;

                if (service.Descendants().Any())
                {
                    foreach (var issuer in service.Descendants("Issuer"))
                    {
                        var name = issuer.Element("Name").Value;
                        var code = issuer.Element("Code").Value;

                        var methodId = code;                         //string.Format("{0}{1}", serviceName, code);

                        paymentMethods.Add(new PaymentProviderMethod
                        {
                            Id           = methodId,
                            Description  = name,
                            Title        = name,
                            Name         = serviceTitle,
                            ProviderName = GetName(),
                            ImageId      = paymentImageId
                        });
                    }
                }
                else
                {
                    var nameForLogoDictionaryItem = string.Format("{0}LogoId", serviceName.Replace(" ", string.Empty));

                    var logoDictionaryItem = library.GetDictionaryItem(nameForLogoDictionaryItem);

                    if (string.IsNullOrEmpty(logoDictionaryItem))
                    {
                        int.TryParse(library.GetDictionaryItem(nameForLogoDictionaryItem), out paymentImageId);
                    }

                    paymentMethods.Add(new PaymentProviderMethod
                    {
                        Id           = serviceName,
                        Description  = serviceName,
                        Title        = serviceTitle,
                        Name         = serviceName,
                        ProviderName = GetName(),
                        ImageId      = paymentImageId
                    });
                }
            }



            return(paymentMethods);
        }
コード例 #13
0
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            // reportUrl  - is a server-to-server call, changes order state, sends out e-mail
            // successUrl - is a browser redirect, page is shown to card holder after payment success, this is where you show a receipt
            // errorUrl   - is a browser redirect, page is shown to card holder if a payment error occured
            //
            // parameters http://tech.epay.dk/da/betalingsvindue-parametre
            //
            // payment provider configuration is made in ~\App_Plugins\uWebshop\config\PaymentProviders.config
            // example:
            // <provider title="ePay">
            //   <merchantnumber>12345678</merchantnumber>
            //   <url>https://ssl.ditonlinebetalingssystem.dk/integration/ewindow/Default.aspx</url>
            //   ..
            //   <secret>xc78ekjY3H!K</secret>
            //   <language>0</language>
            // </provider>

            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);
            var request         = new PaymentRequest();

            request.Parameters.Add("currency", orderInfo.StoreInfo.Store.CurrencyCultureSymbol);
            request.Parameters.Add("amount", orderInfo.ChargedAmountInCents.ToString());
            request.Parameters.Add("orderid", orderInfo.OrderNumber);
            request.Parameters.Add("windowstate", "3");
            request.Parameters.Add("instantcallback", "1");
            request.Parameters.Add("callbackurl", paymentProvider.ReportUrl());     // server-to-server GET http://host/payment-providers/payment-providers/ePay?txnid=12345678&orderid=W0061..
            request.Parameters.Add("accepturl", paymentProvider.SuccessUrl());      // browser redirect GET http://host/receipt/?txnid=12345678&orderid=W0061..
            request.Parameters.Add("cancelurl", paymentProvider.ErrorUrl());

            //filter params
            var filter = new List <string> {
                "hash", "secret", "url"
            };
            var settings = paymentProvider.GetSettingsXML();

            foreach (var setting in settings.Descendants())
            {
                var key = setting.Name.LocalName.ToLowerInvariant();
                if (!string.IsNullOrEmpty(setting.Value) && !request.Parameters.ContainsKey(key) && !filter.Contains(key))
                {
                    request.Parameters.Add(key, setting.Value);
                }
            }
            request.PaymentUrlBase = settings.Element("url").Value;

            //build MD5 if secret present
            if (settings.Element("secret") != null)
            {
                var sb = new StringBuilder();
                foreach (var parameter in request.Parameters)
                {
                    sb.Append(parameter.Value);
                }
                request.Parameters.Add("hash", ePayPaymentBase.MD5(sb.ToString() + settings.Element("secret").Value));
            }

            PaymentProviderHelper.SetTransactionId(orderInfo, orderInfo.OrderNumber);
            orderInfo.PaymentInfo.Url        = request.PaymentUrl;
            orderInfo.PaymentInfo.Parameters = request.ParametersAsString;
            return(request);
        }
コード例 #14
0
        public IEnumerable <PaymentProviderMethod> GetAllPaymentMethods(int id)
        {
            var basket = Basket.GetBasket();

            var paymentProvider = PaymentProvider.GetPaymentProvider(id);

            if (paymentProvider == null)
            {
                throw new Exception("PaymentProvider with id " + id + " not found.");
            }

            var customerCountryCode = API.Store.GetStore().CountryCode;

            if (basket != null && !string.IsNullOrEmpty(basket.Customer.CountryCode))
            {
                customerCountryCode = basket.Customer.CountryCode;
            }

            var accountId    = paymentProvider.GetSetting("accountId");
            var siteId       = paymentProvider.GetSetting("siteId");
            var siteSecureId = paymentProvider.GetSetting("siteSecureId");

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

            var gatewaysRequest = new GatewayRequest
            {
                AccountId    = long.Parse(accountId),
                Country      = customerCountryCode,
                SiteId       = int.Parse(siteId),
                SiteSecureId = int.Parse(siteSecureId)
            };

            var apiURL = paymentProvider.TestMode ? testUrl : url;

            var httpWebRequest = (HttpWebRequest)WebRequest.Create(apiURL);

            httpWebRequest.Method        = "POST";
            httpWebRequest.ContentLength = Encoding.UTF8.GetByteCount(gatewaysRequest.GetXml());
            httpWebRequest.ContentType   = "application/x-www-form-urlencoded";

            var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream());

            streamWriter.Write(gatewaysRequest.GetXml());
            streamWriter.Close();

            var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

            var streamReader = new StreamReader(httpWebResponse.GetResponseStream());
            var xmlDoc       = XDocument.Parse(streamReader.ReadToEnd());

            Log.Instance.LogDebug("MultiSafePay GetAllPaymentMethods MultiSafePay XML Answer: " + HttpUtility.HtmlEncode(xmlDoc.ToString(SaveOptions.None)));

            var gateways = xmlDoc.Descendants("gateway");

            // example answer from MultiSafepay
            //<?xml version="1.0" encoding="UTF-8"?>
            //<gateways result="ok">
            //    <gateways>
            //      <gateway>
            //        <id>IDEAL</id>
            //        <description>iDeal</description>
            //      </gateway>
            //      <gateway>
            //        <id> MASTERCARD</id>
            //        <description>Visa via Multipay</description>
            //      </gateway>
            //      <gateway>
            //        <id> BANKTRANS</id>
            //       <description> Bank Transfer</description>
            //      </gateway>
            //      <gateway>
            //        <id> VISA</id>
            //        <description> Visa CreditCardsdescription>
            //      </gateway>
            //    </gateways>
            //</gateways>
            //int paymentImageId;
            //int.TryParse(umbraco.library.GetDictionaryItem(gateway.Element("id").Value + "LogoId"), out paymentImageId);
            return(gateways.Select(gateway => new PaymentProviderMethod {
                Id = gateway.Element("id").Value, Description = gateway.Element("description").Value, Title = gateway.Element("description").Value, Name = gateway.Element("description").Value, ProviderName = GetName()
            }).ToList());
        }
コード例 #15
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);
        }
コード例 #16
0
        /// <summary>
        /// Gets the redirect URL after confirmation.
        /// </summary>
        /// <param name="orderInfo">The order information.</param>
        /// <param name="confirmedNodeId">The confirmed node unique identifier.</param>
        /// <returns></returns>
        public static string HandlePaymentRequest(OrderInfo orderInfo, int confirmedNodeId)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id);

            var currentDomain = HttpContext.Current.Request.Url.Authority;

            if (paymentProvider != null)
            {
                Log.Instance.LogDebug("HandlePaymentRequest paymentProvider: " + paymentProvider.Title + " " + paymentProvider.Type);

                switch (paymentProvider.Type)
                {
                case PaymentProviderType.OfflinePaymentAtCustomer:
                case PaymentProviderType.OfflinePaymentInStore:
                    if (!string.IsNullOrEmpty(paymentProvider.SuccesNodeId))
                    {
                        int succesNodeId;

                        int.TryParse(paymentProvider.SuccesNodeId, out succesNodeId);

                        if (succesNodeId != 0)
                        {
                            var urlToReturn = IO.Container.Resolve <ICMSApplication>().GetUrlForContentWithId(succesNodeId);
                            if (!urlToReturn.ToString().ToLower().StartsWith("http"))
                            {
                                urlToReturn = string.Format("//{0}{1}", currentDomain, urlToReturn);
                            }
                            Log.Instance.LogDebug("HandlePaymentRequest SuccesNodeId: " + urlToReturn);

                            return(urlToReturn);
                        }
                    }
                    break;

                case PaymentProviderType.OnlinePayment:
                    var iPaymentProvider = PaymentProviderHelper.GetAllIPaymentProviders().FirstOrDefault(x => x.GetName().ToLowerInvariant() == paymentProvider.Name.ToLowerInvariant());

                    if (iPaymentProvider != null)
                    {
                        var handler = PaymentProviderHelper.GetAllPaymentRequestHandlers().FirstOrDefault(x => x.GetName().ToLowerInvariant() == paymentProvider.Name.ToLowerInvariant());

                        if (handler != null)
                        {
                            try
                            {
                                orderInfo.PaymentInfo.TransactionMethod = iPaymentProvider.GetParameterRenderMethod();
                                var handlerResult = handler.CreatePaymentRequest(orderInfo);
                                orderInfo.Save();

                                if (handlerResult == null)
                                {
                                    Log.Instance.LogError("HandlePaymentRequest handler.CreatePaymentRequest(orderInfo) == null");
                                    return("failed");
                                }
                            }
                            catch (Exception ex)
                            {
                                Log.Instance.LogError("HandlePaymentRequest handler.CreatePaymentRequest(orderInfo) FAILED " + ex);
                                return("failed");
                            }
                        }

                        switch (iPaymentProvider.GetParameterRenderMethod())
                        {
                        case PaymentTransactionMethod.Form:
                        case PaymentTransactionMethod.Custom:
                            if (!string.IsNullOrEmpty(paymentProvider.ControlNodeId))
                            {
                                int controlNodeId;

                                int.TryParse(paymentProvider.ControlNodeId, out controlNodeId);

                                if (controlNodeId != 0)
                                {
                                    string urlToReturn = IO.Container.Resolve <ICMSApplication>().GetUrlForContentWithId(controlNodeId);

                                    urlToReturn = string.Format("//{0}{1}", currentDomain, urlToReturn);

                                    Log.Instance.LogDebug("HandlePaymentRequest ControlNodeId: " + urlToReturn);
                                    return(urlToReturn);
                                }
                            }
                            Log.Instance.LogWarning("HandlePaymentRequest PaymentTransactionMethod.Form/Custom FAILED - paymentProvider.ControlNodeId not found: try fallback to orderInfo.PaymentInfo.Url");
                            if (!string.IsNullOrWhiteSpace(orderInfo.PaymentInfo.Url))
                            {
                                string value = string.Format("{0}{1}", orderInfo.PaymentInfo.Url, "?" + orderInfo.PaymentInfo.Parameters);

                                if (string.IsNullOrEmpty(orderInfo.PaymentInfo.Parameters))
                                {
                                    value = orderInfo.PaymentInfo.Url;
                                }

                                Log.Instance.LogDebug("HandlePaymentRequest PaymentTransactionMethod.QueryString: " + value);

                                return(value);
                            }
                            Log.Instance.LogWarning("HandlePaymentRequest PaymentTransactionMethod.Form/Custom FAILED");
                            return("failed");

                        case PaymentTransactionMethod.QueryString:
                            if (!string.IsNullOrWhiteSpace(orderInfo.PaymentInfo.Url))
                            {
                                string value = string.Format("{0}{1}", orderInfo.PaymentInfo.Url, "?" + orderInfo.PaymentInfo.Parameters);

                                if (string.IsNullOrEmpty(orderInfo.PaymentInfo.Parameters))
                                {
                                    value = orderInfo.PaymentInfo.Url;
                                }

                                Log.Instance.LogDebug("HandlePaymentRequest PaymentTransactionMethod.QueryString: " + value);

                                return(value);
                            }
                            Log.Instance.LogError("HandlePaymentRequest PaymentTransactionMethod.QueryString FAILED");
                            return("failed");

                        case PaymentTransactionMethod.ServerPost:

                            if (handler != null)
                            {
                                Log.Instance.LogDebug("HandlePaymentRequest paymentRequestHandlers.GetName(): " + handler.GetName());

                                string nextURL = handler.GetPaymentUrl(orderInfo);

                                Log.Instance.LogDebug("HandlePaymentRequest PaymentTransactionMethod.ServerPost nextURL: " + nextURL);


                                if (!string.IsNullOrEmpty(nextURL))
                                {
                                    Log.Instance.LogDebug("HandlePaymentRequest PaymentTransactionMethod.ServerPost nextURL: " + nextURL);

                                    return(nextURL);
                                }

                                Log.Instance.LogDebug("HandlePaymentRequest PaymentTransactionMethod.ServerPost OrderInfo.PaymentInfo.Url: " + orderInfo.PaymentInfo.Url);

                                if (!string.IsNullOrEmpty(orderInfo.PaymentInfo.Url))
                                {
                                    Log.Instance.LogDebug("HandlePaymentRequest PaymentTransactionMethod.ServerPost OrderInfo.PaymentInfo.Url: " + orderInfo.PaymentInfo.Url);

                                    return(orderInfo.PaymentInfo.Url);
                                }
                            }
                            Log.Instance.LogError("HandlePaymentRequest PaymentTransactionMethod.ServerPost FAILED: " + paymentProvider.Name);
                            return("failed");

                        case PaymentTransactionMethod.WebClient:
                            return("webclient");

                        case PaymentTransactionMethod.Inline:

                            if (handler != null)
                            {
                                return(handler.GetPaymentUrl(orderInfo));
                            }
                            return("inline");
                        }
                    }
                    Log.Instance.LogError("HandlePaymentRequest With Online Payment FAILED");
                    return("failed");
                }
            }

            if (confirmedNodeId != 0)
            {
                string confirmNodeId = confirmedNodeId != 0 ? IO.Container.Resolve <ICMSApplication>().GetUrlForContentWithId(confirmedNodeId) : string.Empty;

                confirmNodeId = string.Format("//{0}{1}", currentDomain, confirmNodeId);

                return(confirmNodeId);
            }

            string fallback = string.Format("//{0}", currentDomain);

            //Log.Instance.LogDebug( "HandlePaymentRequest fallback: " + fallback);

            return(fallback);
        }
コード例 #17
0
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);

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

            var reportUrl = paymentProvider.ReportUrl();

            var accountId    = paymentProvider.GetSetting("accountId");
            var siteId       = paymentProvider.GetSetting("siteId");
            var siteSecureId = paymentProvider.GetSetting("siteSecureId");
            var testURL      = paymentProvider.GetSetting("testURL");
            var liveUrl      = paymentProvider.GetSetting("url");


            #region fill transactionrequest object

            var transactionRequest = new TransactionRequest
            {
                AccountId       = long.Parse(accountId),
                SiteId          = long.Parse(siteId),
                SiteSecureId    = long.Parse(siteSecureId),
                NotificationUrl = reportUrl,
                CancelUrl       = cancelUrl,
                RedirectUrl     = returnUrl,
                Locale          = orderInfo.StoreInfo.CultureInfo.TwoLetterISOLanguageName + "_" + orderInfo.CustomerInfo.CountryCode,
                IPAddress       = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"],
                ForwardedIP     = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"],
                FirstName       = OrderHelper.CustomerInformationValue(orderInfo, "customerFirstName"),
                LastName        = OrderHelper.CustomerInformationValue(orderInfo, "customerLastName"),
                Country         = OrderHelper.CustomerInformationValue(orderInfo, "customerCountry"),
                Email           = OrderHelper.CustomerInformationValue(orderInfo, "customerEmail")
            };

            var amount = orderInfo.ChargedAmountInCents;

            transactionRequest.TransactionId = orderInfo.UniqueOrderId.ToString();
            transactionRequest.Currency      = orderInfo.StoreInfo.Store.CurrencyCultureSymbol;
            transactionRequest.Amount        = amount;
            transactionRequest.Decription    = orderInfo.OrderNumber;
            transactionRequest.Gateway       = orderInfo.PaymentInfo.MethodId;

            var stringToHash = amount + transactionRequest.Currency + transactionRequest.AccountId + transactionRequest.SiteId + transactionRequest.TransactionId;

            transactionRequest.Signature = GetMd5Sum(stringToHash);

            #endregion

            var apiURL = paymentProvider.TestMode ? testURL : liveUrl;

            var httpWebRequest = (HttpWebRequest)WebRequest.Create(apiURL);
            httpWebRequest.Method        = "POST";
            httpWebRequest.ContentLength = Encoding.UTF8.GetByteCount(transactionRequest.GetXml());
            httpWebRequest.ContentType   = "application/x-www-form-urlencoded";

            Log.Instance.LogDebug("MultiSafePay GetAllPaymentMethods transactionRequest GetXml: " + HttpUtility.HtmlEncode(transactionRequest.GetXml()));

            var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream());
            streamWriter.Write(transactionRequest.GetXml());
            streamWriter.Close();

            var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            var streamReader    = new StreamReader(httpWebResponse.GetResponseStream());

            //<?xml version="1.0" encoding="UTF-8" ?>
            //<redirecttransaction result="ok">
            //  <transaction>
            //      <id>4084044</id>
            //      <payment_url>https://user.multisafepay.com/pay/?trans...</payment_url>
            //  </transaction>
            //</redirecttransaction>
            var xmlDoc = XDocument.Parse(streamReader.ReadToEnd());

            Log.Instance.LogDebug("MultiSafePay xmlDoc: " + xmlDoc);

            if (xmlDoc.Root == null)
            {
                return(null);
            }

            var transaction = xmlDoc.Root.Element("transaction");

            if (transaction == null)
            {
                Log.Instance.LogError("MultiSafePay transaction == null");
                return(null);
            }

            var paymentUrl = transaction.Element("payment_url");

            if (paymentUrl == null)
            {
                Log.Instance.LogError("MultiSafePay paymentUrl == null");
                return(null);
            }

            orderInfo.PaymentInfo.Url = paymentUrl.Value;
            PaymentProviderHelper.SetTransactionId(orderInfo, orderInfo.UniqueOrderId.ToString());

            return(new PaymentRequest());
        }
コード例 #18
0
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);

            var returnUrl = paymentProvider.SuccessUrl();
            var cancelUrl = paymentProvider.ErrorUrl();
            var reportUrl = paymentProvider.ReportUrl();

            #region config helper

            var apiURL = "https://www.sisow.nl/Sisow/iDeal/RestHandler.ashx/TransactionRequest";

            var transactionUrl = paymentProvider.GetSetting("TransactionRequestUrl");

            if (!string.IsNullOrEmpty(transactionUrl))
            {
                apiURL = paymentProvider.GetSetting("TransactionRequestUrl");
            }

            var merchantId  = paymentProvider.GetSetting("merchantid");
            var merchantKey = paymentProvider.GetSetting("merchantkey");

            #endregion

            var request = new PaymentRequest();

            var orderGuidAsString = orderInfo.UniqueOrderId.ToString();

            var transactionId = orderGuidAsString.Substring(0, 16);

            request.Parameters.Add("shopid", "001");
            request.Parameters.Add("merchantid", merchantId);
            request.Parameters.Add("payment", string.Empty);
            // character purchase ID (max 16 characters)
            request.Parameters.Add("purchaseid", transactionId);

            var totalAmountInCents = orderInfo.ChargedAmountInCents;
            request.Parameters.Add("amount", totalAmountInCents.ToString());

            request.Parameters.Add("issuerid", orderInfo.PaymentInfo.MethodId);
            request.Parameters.Add("testmode", paymentProvider.TestMode.ToString());
            request.Parameters.Add("entrancecode", orderInfo.OrderNodeId.ToString());
            request.Parameters.Add("description", orderInfo.OrderNumber);

            request.Parameters.Add("returnurl", returnUrl);
            request.Parameters.Add("cancelurl", cancelUrl);
            request.Parameters.Add("callbackurl", reportUrl);
            request.Parameters.Add("notifyurl", reportUrl);

            #region esend

            //request.Parameters.Add("shipping_firstname", "#todo - optional");
            //request.Parameters.Add("shipping_lastname", "#todo");
            //request.Parameters.Add("shipping_mail", "#todo - optional");
            //request.Parameters.Add("shipping_company", "#todo - optional");
            //request.Parameters.Add("shipping_address1", "#todo");
            //request.Parameters.Add("shipping_address2", "#todo - optional");
            //request.Parameters.Add("shipping_zip", "#todo");
            //request.Parameters.Add("shipping_city", "#todo");
            //request.Parameters.Add("shipping_country", "#todo");
            //request.Parameters.Add("shipping_countrycode", "#todo");
            //request.Parameters.Add("shipping_phone", "#todo -optional");
            //request.Parameters.Add("weight", "#todo  -optional");
            //request.Parameters.Add("shipping", "#todo -optional");
            //request.Parameters.Add("handling", "#todo -optional");

            #endregion

            //de SHA1 waarde van purchaseid/entrancecode/amount/shopid/merchantid/merchantkey
            var sha1Hash = GetSHA1(transactionId + orderInfo.OrderNodeId.ToString() + totalAmountInCents.ToString() + "001" + merchantId + merchantKey);

            request.Parameters.Add("sha1", sha1Hash);

            request.PaymentUrlBase = apiURL;

            var responseString = _requestSender.SendRequest(request.PaymentUrlBase, request.ParametersAsString);

            XNamespace ns = "https://www.sisow.nl/Sisow/REST";
            if (responseString == null)
            {
                Log.Instance.LogError("SiSow responseString == null orderInfo.UniqueOrderId: " + orderInfo.UniqueOrderId);

                return(null);
            }

            Log.Instance.LogDebug("SiSow responseString: " + responseString + ", paymentProviderNodeId: " + paymentProvider.Id);

            var issuerXml = XDocument.Parse(responseString);

            var url   = issuerXml.Descendants(ns + "issuerurl").FirstOrDefault();
            var trxId = issuerXml.Descendants(ns + "trxid").FirstOrDefault();

            var decodeUrl = Uri.UnescapeDataString(url.Value);

            if (trxId == null)
            {
                Log.Instance.LogError("SiSow issuerXml: " + issuerXml + ", paymentProviderNodeId: " + paymentProvider.Id);

                return(null);
            }

            var returnedTransactionId = trxId.Value;

            orderInfo.PaymentInfo.Url           = decodeUrl;
            orderInfo.PaymentInfo.TransactionId = returnedTransactionId;

            PaymentProviderHelper.SetTransactionId(orderInfo, returnedTransactionId);

            orderInfo.Save();

            return(null);
        }
コード例 #19
0
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);

            var liveUrl = "https://checkout.buckaroo.nl/nvp/";
            var testUrl = "https://testcheckout.buckaroo.nl/nvp/";

            var configLiveUrl = paymentProvider.GetSetting("Url");
            var configTestUrl = paymentProvider.GetSetting("testUrl");

            var lowercaseUrls = paymentProvider.GetSetting("LowercaseUrls");
            var trailingSlash = paymentProvider.GetSetting("AddTrailingSlash");

            var lowercase = false;
            var addslash  = false;

            if (!string.IsNullOrEmpty(lowercaseUrls))
            {
                if (lowercaseUrls == "true" || lowercaseUrls == "1" || lowercaseUrls == "on")
                {
                    lowercase = true;
                }
            }

            if (!string.IsNullOrEmpty(trailingSlash))
            {
                if (trailingSlash == "true" || trailingSlash == "1" || trailingSlash == "on")
                {
                    addslash = true;
                }
            }

            if (!string.IsNullOrEmpty(configLiveUrl))
            {
                liveUrl = configLiveUrl;
            }
            if (!string.IsNullOrEmpty(configTestUrl))
            {
                testUrl = configTestUrl;
            }

            var url = paymentProvider.TestMode ? testUrl : liveUrl;


            var providerSettingsXML = paymentProvider.GetSettingsXML();

            var service = orderInfo.PaymentInfo.MethodId;

            string issuer = null;

            var issuerElement = providerSettingsXML.Descendants().FirstOrDefault(x => x.Value.ToLowerInvariant() == orderInfo.PaymentInfo.MethodId.ToLowerInvariant());

            if (issuerElement != null)
            {
                issuer = issuerElement.Value;

                if (issuerElement.Name.LocalName.ToLowerInvariant() != "issuer")
                {
                    var firstOrDefault = issuerElement.AncestorsAndSelf("Service").FirstOrDefault();
                    if (firstOrDefault != null)
                    {
                        service = firstOrDefault.Attribute("name").Value;
                    }
                }
            }

            var reportUrl = paymentProvider.ReportUrl();

            if (lowercase)
            {
                reportUrl = reportUrl.ToLowerInvariant();
            }

            if (!reportUrl.EndsWith("/") && addslash)
            {
                reportUrl = reportUrl + "/";
            }

            BuckarooRequestParameters requestParams = new BuckarooRequestParameters(paymentProvider.GetSetting("SecretKey"));

            requestParams.Amount          = orderInfo.ChargedAmountInCents / 100m;
            requestParams.Culture         = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
            requestParams.Currency        = orderInfo.StoreInfo.Store.CurrencyCultureSymbol;
            requestParams.InvoiceNumber   = orderInfo.OrderNumber;
            requestParams.PaymentMethod   = service;
            requestParams.ReturnUrl       = reportUrl;
            requestParams.ReturnCancelUrl = reportUrl;
            requestParams.ReturnErrorUrl  = reportUrl;
            requestParams.ReturnReject    = reportUrl;
            requestParams.WebsiteKey      = paymentProvider.GetSetting("Websitekey");

            var transactionId = orderInfo.UniqueOrderId.ToString();

            requestParams.TransactionId = transactionId;



            string IssuersServiceKeyName = null;
            string IssuerServiceKeyValue = null;
            string IssuerActionKeyName   = null;
            string IssuerActionKeyValue  = null;

            if (!string.IsNullOrEmpty(issuer))
            {
                IssuersServiceKeyName = string.Format("brq_service_{0}_issuer", service);
                IssuerServiceKeyValue = issuer;
                IssuerActionKeyName   = string.Format("brq_service_{0}_action", service);
                IssuerActionKeyValue  = "Pay";

                requestParams.AddCustomParameter(IssuersServiceKeyName, IssuerServiceKeyValue);
                requestParams.AddCustomParameter(IssuerActionKeyName, IssuerActionKeyValue);
            }

            if (service.Equals("transfer"))
            {
                requestParams.AddCustomParameter("brq_service_transfer_customeremail", orderInfo.CustomerEmail);
                requestParams.AddCustomParameter("brq_service_transfer_customerfirstname", orderInfo.CustomerFirstName);
                requestParams.AddCustomParameter("brq_service_transfer_customerlastname", orderInfo.CustomerLastName);
            }

            if (service.Equals("onlinegiro"))
            {
                requestParams.AddCustomParameter("brq_service_onlinegiro_customergender", "9");
                requestParams.AddCustomParameter("brq_service_onlinegiro_customeremail", orderInfo.CustomerEmail);
                requestParams.AddCustomParameter("brq_service_onlinegiro_customerfirstname", orderInfo.CustomerFirstName);
                requestParams.AddCustomParameter("brq_service_onlinegiro_customerlastname", orderInfo.CustomerLastName);
            }

            requestParams.Sign();


            var request = new PaymentRequest();

            //request.Parameters.Add("add_transactionReference", Add_transactionReference);
            //request.Parameters.Add("brq_amount", Brq_amount);
            //request.Parameters.Add("brq_currency", Brq_currency);
            //request.Parameters.Add("brq_invoicenumber", Brq_invoicenumber);
            //request.Parameters.Add("brq_payment_method", Brq_payment_method);
            //request.Parameters.Add("brq_return", Brq_return);
            //request.Parameters.Add("brq_returncancel", Brq_returncancel);
            //request.Parameters.Add("brq_returnerror", Brq_returnerror);
            //request.Parameters.Add("brq_returnreject", Brq_returnreject);


            //if (!string.IsNullOrEmpty(issuer))
            //{
            //    request.Parameters.Add(IssuerActionKeyName, IssuerActionKeyValue);

            //    request.Parameters.Add(IssuersServiceKeyName, IssuerServiceKeyValue);

            //}


            //request.Parameters.Add("brq_websitekey", Brq_websitekey);
            //request.Parameters.Add("brq_signature", Brq_signature);
            request.Parameters = requestParams.GetParameters();


            var uri         = new Uri(url);
            var webrequest  = WebRequest.Create(uri);
            var encoding    = new UTF8Encoding();
            var requestData = encoding.GetBytes(request.ParametersAsString);

            webrequest.ContentType = "application/x-www-form-urlencoded";

            webrequest.Method        = "POST";
            webrequest.ContentLength = requestData.Length;

            using (var stream = webrequest.GetRequestStream())
            {
                stream.Write(requestData, 0, requestData.Length);
            }

            using (var response = webrequest.GetResponse())
            {
                var stream = response.GetResponseStream();
                if (stream == null)
                {
                    throw new Exception("No response from POST request to " + url);
                }
                using (var reader = new StreamReader(stream, Encoding.ASCII))
                {
                    var value = reader.ReadToEnd();

                    var result = HttpUtility.ParseQueryString(value);

                    orderInfo.PaymentInfo.Url = result["brq_redirecturl"];

                    if (service == "onlinegiro" || service == "transfer")
                    {
                        orderInfo.PaymentInfo.Url = reportUrl + "?" + value;
                    }
                }
            }

            PaymentProviderHelper.SetTransactionId(orderInfo, transactionId);

            return(request);
        }
コード例 #20
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            // Ogone POSTS some values
            var transactionId = HttpContext.Current.Request["TransactionId"];
            var status        = HttpContext.Current.Request["STATUS"];

            if (string.IsNullOrEmpty(transactionId))
            {
                Log.Instance.LogError("Ogone TransactionId not Found!");
                return(null);
            }

            orderInfo = OrderHelper.GetOrder(transactionId);

            Log.Instance.LogDebug("OGONE OrderNumber: " + orderInfo.OrderNumber + " TransactionID: " + transactionId + " Status: " + status);

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

            var returnUrl   = localizedPaymentProvider.SuccessUrl();
            var cancelUrl   = localizedPaymentProvider.ErrorUrl();
            var redirectUrl = returnUrl;

            //0	Ongeldig of onvolledig
            //1	Geannuleerd door de klant
            //2	Autorisatie geweigerd
            //4	Opgeslagen bestelling
            //40
            //41	Wachten op klantbetaling
            //5	Geautoriseerd
            //50
            //51	Autorisatie pending
            //52	Autorisatie onzeker
            //55	Stand-by
            //56	OK met geplande betalingen
            //57
            //59	Manueel te bekomen autorisatie
            //6	Geautoriseerd en geannuleerd
            //61	Annul. autor. pending
            //62	Annul. autor. onzeker
            //63	Annul. autor. geweigerd
            //64	Geautoriseerd en geannuleerd
            //7	Betaling geannuleerd
            //71	Annul.betaling pending
            //72	Annul. betaling onzeker
            //73	Annul betaling geweigerd
            //74	Betaling geannuleerd
            //75	Annul. betaling verwerkt door merch
            //8	Terugbetaald
            //81	Terugbetaling pending
            //82	Terugbetaling onzeker
            //83	Terugbetaling geweigerd
            //84	Betaling geweigerd door de bank
            //85	Terugbet. verwerkt door merchant
            //9	Betaling aangevraagd
            //91	Betaling pending
            //92	Betaling onzeker
            //93	Betaling geweigerd
            //94	Terubetaling geweigerd door de bank
            //95	Betaling verwerkt door merchant
            //99	Wordt verwerkt

            if (orderInfo.Paid == false)
            {
                switch (status)
                {
                case "5":
                case "9":
                    orderInfo.Paid   = true;
                    orderInfo.Status = OrderStatus.ReadyForDispatch;
                    break;

                case "0":
                case "1":
                case "2":
                case "61":
                case "62":
                case "63":
                case "71":
                case "72":
                case "73":
                case "74":
                case "75":
                case "93":
                    orderInfo.Paid   = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    orderInfo.PaymentInfo.ErrorMessage = status;
                    redirectUrl = cancelUrl;
                    break;

                default:
                    orderInfo.Status = OrderStatus.WaitingForPaymentProvider;
                    break;
                }

                orderInfo.Save();
            }

            HttpContext.Current.Response.Redirect(redirectUrl);

            return(orderInfo);
        }
コード例 #21
0
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);

            var reportUrl = paymentProvider.ReportUrl();

            var pspId               = paymentProvider.GetSetting("PSPID");
            var shaInSignature      = paymentProvider.GetSetting("SHAInSignature");
            var secureHashAlgorithm = paymentProvider.GetSetting("SecureHashAlgorithm");

            var liveUrl = "https://secure.ogone.com/ncol/prod/orderstandard.asp";
            var testUrl = "https://secure.ogone.com/ncol/test/orderstandard.asp";

            var configLiveUrl = paymentProvider.GetSetting("Url");
            var configTestUrl = paymentProvider.GetSetting("testUrl");

            if (!string.IsNullOrEmpty(configLiveUrl))
            {
                liveUrl = configLiveUrl;
            }
            if (!string.IsNullOrEmpty(configTestUrl))
            {
                testUrl = configTestUrl;
            }

            var url = paymentProvider.TestMode ? testUrl : liveUrl;

            var request = new PaymentRequest();

            request.Parameters.Add("PSPID", pspId);
            request.Parameters.Add("ORDERID", orderInfo.OrderNumber);

            var amount = orderInfo.ChargedAmountInCents;

            request.Parameters.Add("AMOUNT", amount.ToString());
            request.Parameters.Add("CURRENCY", orderInfo.StoreInfo.Store.CurrencyCultureSymbol);
            request.Parameters.Add("LANGUAGE", orderInfo.StoreInfo.LanguageCode + "_" + orderInfo.StoreInfo.CountryCode);
            request.Parameters.Add("EMAIL", OrderHelper.CustomerInformationValue(orderInfo, "customerEmail"));

            request.Parameters.Add("ACCEPTURL", reportUrl);
            request.Parameters.Add("DECLINEURL", reportUrl);
            request.Parameters.Add("EXCEPTIONURL", reportUrl);
            request.Parameters.Add("CANCELURL", reportUrl);

            //action => 'Normal Authorization' (with operation => 'SAL' (default))
            //action => 'Authorization Only' (with operation => 'RES' (default)) then action => 'Post Authorization' (with operation => 'SAS' (default))
            request.Parameters.Add("OPERATION", "SAL");

            var transactionId = orderInfo.UniqueOrderId.ToString().Replace("-", "");

            request.Parameters.Add("PARAMPLUS", string.Format("TransactionId={0}", transactionId));


            if (orderInfo.PaymentInfo.MethodId.Contains('-'))
            {
                var splitarray = orderInfo.PaymentInfo.MethodId.Split('-');

                var pm    = splitarray[0];
                var brand = splitarray[1];

                request.Parameters.Add("PM", pm);
                request.Parameters.Add("BRAND", brand);
            }
            else
            {
                request.Parameters.Add("PM", orderInfo.PaymentInfo.MethodTitle);
            }

            var stringToHash     = string.Empty;
            var sortedParameters = request.Parameters.OrderBy(x => x.Key);

            foreach (var parameter in sortedParameters)
            {
                stringToHash += string.Format("{0}={1}{2}", parameter.Key, parameter.Value, shaInSignature);
            }

            switch (secureHashAlgorithm)
            {
            case "SHA1":
                request.Parameters.Add("SHASIGN", GetSHA1Hash(stringToHash).ToUpper());
                break;

            case "SHA256":
                request.Parameters.Add("SHASIGN", GetSHA256Hash(stringToHash).ToUpper());
                break;

            case "SHA512":
                request.Parameters.Add("SHASIGN", GetSHA512Hash(stringToHash).ToUpper());
                break;
            }

            request.PaymentUrlBase = url;

            orderInfo.PaymentInfo.Url        = request.PaymentUrl;
            orderInfo.PaymentInfo.Parameters = request.ParametersAsString;
            PaymentProviderHelper.SetTransactionId(orderInfo, transactionId);

            return(request);
        }
コード例 #22
0
        /// <summary>
        /// Executes the transaction request to SagePay
        /// </summary>
        /// <param name="orderInfo"></param>
        /// <returns></returns>
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            // new API Call for easier access to date (but not able to write to)
            var orderAPI = API.Basket.GetBasket(orderInfo.UniqueOrderId);

            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id);

            #region config helper

            var vendorName = paymentProvider.GetSetting("VendorName");

            var liveUrl = "https://live.sagepay.com/gateway/service/vspdirect-register.vsp";
            var testUrl = "https://test.sagepay.com/Simulator/VSPDirectGateway.asp";

            var configLiveUrl = paymentProvider.GetSetting("Url");
            var configTestUrl = paymentProvider.GetSetting("testUrl");

            if (!string.IsNullOrEmpty(configLiveUrl))
            {
                liveUrl = configLiveUrl;
            }
            if (!string.IsNullOrEmpty(configTestUrl))
            {
                testUrl = configTestUrl;
            }

            #endregion

            var reportUrl = paymentProvider.ReportUrl();

            var request = new PaymentRequest();

            var cardTypeMethod = orderInfo.PaymentInfo.MethodId;

            // Get the fields from the current request, this way they won't be stored in the order or in uWebshop
            var creditCardHolderName = HttpContext.Current.Request["CardHolder"];
            var creditCardNumber     = HttpContext.Current.Request["CardNumber"];
            var creditCardCV2        = HttpContext.Current.Request["CV2"];
            var creditCardExpiryDate = HttpContext.Current.Request["ExpiryDate"];

            if (string.IsNullOrEmpty(creditCardHolderName))
            {
                // if no creditCardHolder field is posted, try to see if the order contains an holder field
                creditCardHolderName = orderAPI.Customer.GetValue <string>("customerCardHolder");

                if (string.IsNullOrEmpty(creditCardHolderName))
                {
                    // if that is not present, use first letter of firstName and full last name
                    creditCardHolderName = orderInfo.CustomerFirstName.Substring(0, 1) + " " +
                                           orderInfo.CustomerLastName;
                }
            }

            if (string.IsNullOrEmpty(creditCardNumber))
            {
                // if no creditCardNumber field is posted, try to see if the order contains an creditcardnumber
                creditCardNumber = orderAPI.Customer.GetValue <string>("customerCardNumber");

                if (cardTypeMethod.ToLowerInvariant() != "paypal" &&
                    (string.IsNullOrEmpty(creditCardNumber) && !paymentProvider.TestMode))
                {
                    Log.Instance.LogError("Sagepay CreatePaymentRequest: No Creditcardnumber Given");

                    PaymentProviderHelper.AddValidationResult(orderInfo, paymentProvider.Id, "CreditCardError", "No Creditcardnumber Entered");

                    return(null);
                }
            }

            if (string.IsNullOrEmpty(creditCardCV2))
            {
                // if no creditCardNumber field is posted, try to see if the order contains an creditcardnumber
                creditCardCV2 = orderAPI.Customer.GetValue <string>("customerCardCV2");

                if (cardTypeMethod.ToLowerInvariant() != "paypal" && string.IsNullOrEmpty(creditCardCV2) && !paymentProvider.TestMode)
                {
                    Log.Instance.LogError("Sagepay CreatePaymentRequest: No CV2 Given");

                    PaymentProviderHelper.AddValidationResult(orderInfo, paymentProvider.Id, "CV2Error", "No CV2 Entered");

                    return(null);
                }
            }

            if (string.IsNullOrEmpty(creditCardExpiryDate))
            {
                // if no ExpiryDate field is posted, try to see if the order contains an expirydate
                creditCardExpiryDate = orderAPI.Customer.GetValue <string>("customerCardExpiryDate");

                if (cardTypeMethod.ToLowerInvariant() != "paypal" && string.IsNullOrEmpty(creditCardExpiryDate) && !paymentProvider.TestMode)
                {
                    Log.Instance.LogError("Sagepay CreatePaymentRequest: No creditCardExpiryDate Given");

                    PaymentProviderHelper.AddValidationResult(orderInfo, paymentProvider.Id, "CardExpiryDateError", "No CardExpiryDate Entered");

                    return(null);
                }
            }

            // Preset Valid test creditcardnumbers for testmode
            if (paymentProvider.TestMode)
            {
                switch (cardTypeMethod.ToUpperInvariant())
                {
                case "VISA":
                    creditCardNumber = "4929000000006";
                    break;

                case "MC":
                    creditCardNumber = "5404000000000001";
                    break;

                case "MCDEBIT":
                    creditCardNumber = "5573470000000001";
                    break;

                case "DELTA":
                    creditCardNumber = "4462000000000003";
                    break;

                case "MAESTRO":
                    creditCardNumber = "5641820000000005";
                    break;

                case "UKE":
                    creditCardNumber = "4917300000000008";
                    break;

                case "AMEX":
                    creditCardNumber = "374200000000004";
                    break;

                case "DINERS":
                    creditCardNumber = "36000000000008";
                    break;

                case "DC":
                    creditCardNumber = "4929000000006";
                    break;

                case "JCB":
                    creditCardNumber = "3569990000000009";
                    break;

                case "LASER":
                    creditCardNumber = "6304990000000000044";
                    break;
                }
            }

            request.Parameters.Add("CardType", cardTypeMethod);
            request.Parameters.Add("CardHolder", paymentProvider.TestMode ? "T.Ester" : creditCardHolderName);
            request.Parameters.Add("CardNumber", creditCardNumber);
            request.Parameters.Add("CV2", paymentProvider.TestMode ? "123" : creditCardCV2);
            request.Parameters.Add("ExpiryDate", paymentProvider.TestMode ? DateTime.Now.AddMonths(6).ToString("MMyy") : creditCardExpiryDate);

            request.Parameters.Add("VPSProtocol", "2.23");
            request.Parameters.Add("TxType", "PAYMENT");
            request.Parameters.Add("Vendor", vendorName);

            var trasactionId = orderInfo.OrderNumber + "x" + DateTime.Now.ToString("hhmmss");

            request.Parameters.Add("VendorTxCode", trasactionId);

            request.Parameters.Add("Amount", orderInfo.ChargedAmount.ToString(new CultureInfo("en-GB").NumberFormat));
            request.Parameters.Add("Currency", new RegionInfo(orderInfo.StoreInfo.Store.CurrencyCultureInfo.LCID).ISOCurrencySymbol);

            request.Parameters.Add("Description", orderInfo.OrderNumber);

            request.Parameters.Add("NotificationURL", reportUrl);

            request.Parameters.Add("BillingSurname", GetSagePaySafeCustomerInfo(orderAPI.Customer.LastName));
            request.Parameters.Add("BillingFirstnames", GetSagePaySafeCustomerInfo(orderAPI.Customer.FirstName));
            request.Parameters.Add("BillingAddress1", GetSagePaySafeCustomerInfo(orderAPI.Customer.Address1));
            request.Parameters.Add("BillingCity", GetSagePaySafeCustomerInfo(orderAPI.Customer.City));
            request.Parameters.Add("BillingPostCode", GetSagePaySafeCustomerInfo(orderAPI.Customer.ZipCode));
            request.Parameters.Add("BillingCountry", GetSagePaySafeCustomerInfo(orderInfo.CustomerInfo.CountryCode));

            var deliverySurName   = string.IsNullOrEmpty(orderAPI.Customer.Shipping.LastName) ? orderAPI.Customer.LastName : orderAPI.Customer.Shipping.LastName;
            var deliveryFirstName = string.IsNullOrEmpty(orderAPI.Customer.Shipping.FirstName) ? orderAPI.Customer.FirstName : orderAPI.Customer.Shipping.FirstName;
            var deliveryAddress1  = string.IsNullOrEmpty(orderAPI.Customer.Shipping.Address1) ? orderAPI.Customer.Address1 : orderAPI.Customer.Shipping.Address1;
            var deliveryPostcode  = string.IsNullOrEmpty(orderAPI.Customer.Shipping.ZipCode) ? orderAPI.Customer.ZipCode : orderAPI.Customer.Shipping.ZipCode;
            var deliveryCity      = string.IsNullOrEmpty(orderAPI.Customer.Shipping.City) ? orderAPI.Customer.City : orderAPI.Customer.Shipping.City;
            var deliveryCountry   = string.IsNullOrEmpty(orderAPI.Customer.Shipping.CountryCode) ? orderAPI.Customer.CountryCode : orderAPI.Customer.Shipping.CountryCode;

            request.Parameters.Add("DeliverySurname", GetSagePaySafeCustomerInfo(deliverySurName));
            request.Parameters.Add("DeliveryFirstnames", GetSagePaySafeCustomerInfo(deliveryFirstName));
            request.Parameters.Add("DeliveryAddress1", GetSagePaySafeCustomerInfo(deliveryAddress1));
            request.Parameters.Add("DeliveryCity", GetSagePaySafeCustomerInfo(deliveryCity));
            request.Parameters.Add("DeliveryPostCode", GetSagePaySafeCustomerInfo(deliveryPostcode));
            request.Parameters.Add("DeliveryCountry", GetSagePaySafeCustomerInfo(deliveryCountry));

            // optionele parameters:
            //request.Parameters.Add("BillingAddress2", "");
            //request.Parameters.Add("BillingState", "");
            //request.Parameters.Add("BillingPhone", "");
            //request.Parameters.Add("DeliveryAddress2", "");
            //request.Parameters.Add("DeliveryState", "");
            //request.Parameters.Add("DeliveryPhone", "");
            //request.Parameters.Add("CustomerEMail", "");
            //request.Parameters.Add("Basket", ""); // optioneel info over basket
            //request.Parameters.Add("AllowGiftAid", "0");
            //request.Parameters.Add("Apply3DSecure", "0");

            var sagePayUrl     = paymentProvider.TestMode ? testUrl : liveUrl;
            var responseString = _requestSender.SendRequest(sagePayUrl, request.ParametersAsString);

            var deserializer = new ResponseSerializer();
            var response     = deserializer.Deserialize <TransactionRegistrationResponse>(responseString);

            if (!string.IsNullOrEmpty(response.VPSTxId) && response.Status == ResponseType.Ok)
            {
                orderInfo.PaymentInfo.Parameters = response.Status + "&" + response.StatusDetail;

                PaymentProviderHelper.SetTransactionId(orderInfo, response.VPSTxId);
            }
            else
            {
                Log.Instance.LogError("SagePay Did not return a proper status: " + response.Status + " detail: " + response.StatusDetail);

                PaymentProviderHelper.AddValidationResult(orderInfo, paymentProvider.Id, "SagePayReturnedError", response.StatusDetail);
            }

            orderInfo.Save();

            return(request);
        }
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            try
            {
                var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id);

                var reportUrl = paymentProvider.ReportUrl();

                //Use https://idealtest.secure-ing.com/ideal/iDEALv3 during integration/test
                //Use https://ideal.secure-ing.com/ideal/iDEALv3 only for production

                //	<provider title="IngAdvanced">
                //    <IssuerId>1111111</IssuerId>
                //    <MerchantId>1111111</MerchantId>
                //    <EntranceCode>22222222</EntranceCode>
                //  </provider>

                var issuerId     = orderInfo.PaymentInfo.MethodId;
                var merchantId   = paymentProvider.GetSetting("MerchantId");
                var entranceCode = paymentProvider.GetSetting("EntranceCode");


                var transaction = new Transaction
                {
                    Amount       = orderInfo.ChargedAmount,
                    Description  = orderInfo.OrderNumber,
                    PurchaseId   = orderInfo.OrderNumber,
                    IssuerId     = issuerId,
                    EntranceCode = entranceCode
                };

                var connector = new Connector
                {
                    MerchantReturnUrl = new Uri(reportUrl),
                    MerchantId        = merchantId,
                    SubId             = "0",
                    ExpirationPeriod  = "PT10M"
                };

                transaction = connector.RequestTransaction(transaction);

                if (transaction.Status == Transaction.TransactionStatus.Success)
                {
                    var transactionId   = transaction.Id;
                    var authenticateUrl = transaction.IssuerAuthenticationUrl.ToString();
                    var acquirerId      = transaction.AcquirerId;

                    PaymentProviderHelper.SetTransactionId(orderInfo, transactionId);
                    orderInfo.PaymentInfo.Url        = authenticateUrl;
                    orderInfo.PaymentInfo.Parameters = acquirerId;

                    orderInfo.Save();
                }
                else
                {
                    // todo: failure handling, so don't change anything, user will not be redirected
                }
            }
            catch (IDealException ex)
            {
                Log.Instance.LogError("ING Advanced PaymentRequestHander: " + ex);
            }

            var request = new PaymentRequest();

            return(request);
        }
コード例 #24
0
        /// <summary>
        /// Executes the transaction request to SagePay
        /// </summary>
        /// <param name="orderInfo"></param>
        /// <returns></returns>
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id);

            var sagePayDirectIntegration = new SagePayDirectIntegration();

            var request = sagePayDirectIntegration.DirectPaymentRequest();

            SetRequestData(request, orderInfo);

            var result = sagePayDirectIntegration.ProcessDirectPaymentRequest(request, SagePaySettings.DirectPaymentUrl);

            if (result.Status == ResponseStatus.OK || (SagePaySettings.DefaultTransactionType == TransactionType.AUTHENTICATE && result.Status == ResponseStatus.REGISTERED))
            {
                orderInfo.PaymentInfo.Parameters = result.Status + "&" + result.StatusDetail;

                PaymentProviderHelper.SetTransactionId(orderInfo, result.VpsTxId);
                //Response.Redirect(string.Format("Result.aspx?vendorTxCode={0}", request.VendorTxCode));
            }
            else if (result.Status == ResponseStatus.THREEDAUTH)
            {
                // todo: not supported yet! code below is work in progress
                //var threeDSecureRequest = new PaymentRequest();

                //threeDSecureRequest.Parameters.Add("paReq", result.PaReq.Replace(" ", "+"));
                //threeDSecureRequest.Parameters.Add("acsUrl", result.AcsUrl);
                //threeDSecureRequest.Parameters.Add("md", result.Md);
                //threeDSecureRequest.Parameters.Add("vendorTxCode", request.VendorTxCode);

                //// Save Order with Order status in 3D Process
                //var threeDAuth = new NameValueCollection
                //{
                //	{"paReq", result.PaReq.Replace(" ", "+")},
                //	{"acsUrl", result.AcsUrl},
                //	{"md", result.Md},
                //	{"vendorTxCode", request.VendorTxCode}
                //};
                //if (HttpContext.Current.Session["USER_3DAUTH"] != null)
                //{
                //	HttpContext.Current.Session["USER_3DAUTH"] = null;
                //}
                //HttpContext.Current.Session.Add("USER_3DAUTH", threeDAuth);

                ////<form action="<%= ACSUrl %>" method="post">
                ////<input type="hidden" name="PaReq" value="<%= PaReq %>" />
                ////<input type="hidden" name="TermUrl" value="<%= TermUrl %>" />
                ////<input type="hidden" name="MD" value="<%= MD %>" />
                ////<input type="submit" value="Go" />
                ////</form>

                //var responseString = _requestSender.SendRequest(result.AcsUrl, threeDSecureRequest.ParametersAsString);


                //var threeDAuthRequest = sagePayDirectIntegration.ThreeDAuthRequest();
                //threeDAuthRequest.Md = Request.Form["MD"];
                //threeDAuthRequest.PaRes = Request.Form["PaRes"];
                //var directPaymentResult = sagePayDirectIntegration.ProcessDirect3D(threeDAuthRequest);

                //if (directPaymentResult.Status == ResponseStatus.OK)
                //{
                //	orderInfo.Paid = true;
                //	orderInfo.Status = OrderStatus.ReadyForDispatch;
                //}
                //else
                //{

                //	Log.Instance.LogError("SagePay Did not return a proper directPaymentResult status: " + directPaymentResult.StatusDetail);
                //	PaymentProviderHelper.AddValidationResult(orderInfo, orderInfo.PaymentInfo.Id, "SagePayReturnedError", directPaymentResult.StatusDetail);
                //}
            }
            else
            {
                Log.Instance.LogError("SagePay Did not return a proper status: " + result.StatusDetail);
                PaymentProviderHelper.AddValidationResult(orderInfo, orderInfo.PaymentInfo.Id, "SagePayReturnedError", result.StatusDetail);
            }


            orderInfo.Save();

            return(new PaymentRequest());
        }
コード例 #25
0
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id);

            var reportUrl = paymentProvider.ReportUrl();

            //	<provider title="OmniKassa">
            //    <MerchantId>002020000000001</MerchantId>
            //    <CurrencyCode>978</CurrencyCode>
            //    <normalReturnUrl>http://www.hetanker.tv</normalReturnUrl>
            //    <KeyVersion>1</KeyVersion>
            //    <TestAmount>56</TestAmount>
            //  </provider>

            var merchantId   = paymentProvider.GetSetting("MerchantId");
            var keyVersion   = paymentProvider.GetSetting("KeyVersion");
            var currencyCode = paymentProvider.GetSetting("CurrencyCode");
            var testAmount   = paymentProvider.GetSetting("testAmount");

            var liveUrl = "https://payment-webinit.omnikassa.rabobank.nl/paymentServlet";
            var testUrl = "https://payment-webinit.simu.omnikassa.rabobank.nl/paymentServlet";

            var configLiveUrl = paymentProvider.GetSetting("Url");
            var configTestUrl = paymentProvider.GetSetting("testUrl");

            if (!string.IsNullOrEmpty(configLiveUrl))
            {
                liveUrl = configLiveUrl;
            }
            if (!string.IsNullOrEmpty(configTestUrl))
            {
                testUrl = configTestUrl;
            }

            var liveForwardUrl = "https://payment-web.omnikassa.rabobank.nl/payment";
            var testForwardUrl = "https://payment-web.simu.omnikassa.rabobank.nl/payment";

            var configForwardLiveUrl = paymentProvider.GetSetting("forwardUrl");
            var configForwardTestUrl = paymentProvider.GetSetting("testForwardUrl");

            if (!string.IsNullOrEmpty(configForwardLiveUrl))
            {
                liveForwardUrl = configForwardLiveUrl;
            }
            if (!string.IsNullOrEmpty(configForwardTestUrl))
            {
                testForwardUrl = configForwardTestUrl;
            }


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

            var postUrl = paymentProvider.TestMode ? testUrl : liveUrl;

            var forwardUrl = paymentProvider.TestMode ? testForwardUrl : liveForwardUrl;

            var amount = paymentProvider.TestMode ? testAmount : orderInfo.ChargedAmountInCents.ToString();

            var orderId = orderInfo.OrderNumber;

            if (orderId.Length > 32)
            {
                Log.Instance.LogError("OmniKassa: orderInfo.OrderNumber: Too Long, Max 32 Characters! orderInfo.OrderNumber: " + orderInfo.OrderNumber);
                orderId = orderInfo.OrderNumber.Substring(0, 31);
            }

            var transactionId = orderId + "x" + DateTime.Now.ToString("hhmmss");

            var rgx = new Regex("[^a-zA-Z0-9]");

            transactionId = rgx.Replace(transactionId, "");

            if (transactionId.Length > 35)
            {
                Log.Instance.LogError("OmniKassa: uniqueId (orderId + 'x' + DateTime.Now.ToString('hhmmss')): Too Long, Max 35 Characters! uniqueId: " + transactionId);
                transactionId = transactionId.Substring(0, 34);
            }

            if (reportUrl.Length > 512)
            {
                Log.Instance.LogError("OmniKassa: reportUrl: Too Long, Max 512 Characters! reportUrl: " + reportUrl);
            }

            // Data-veld samenstellen
            var data = string.Format("merchantId={0}", merchantId) + string.Format("|orderId={0}", orderId) + string.Format("|amount={0}", amount) + string.Format("|customerLanguage={0}", "NL") + string.Format("|keyVersion={0}", keyVersion) + string.Format("|currencyCode={0}", currencyCode)             // + string.Format("|PaymentMeanBrandList={0}", "IDEAL")
                       + string.Format("|normalReturnUrl={0}", reportUrl) + string.Format("|automaticResponseUrl={0}", reportUrl) + string.Format("|transactionReference={0}", transactionId);

            // Seal-veld berekenen
            var sha256    = SHA256.Create();
            var hashValue = sha256.ComputeHash(new UTF8Encoding().GetBytes(data + securityKey));

            // POST data samenstellen
            var postData = new NameValueCollection {
                { "Data", data }, { "Seal", ByteArrayToHexString(hashValue) }, { "InterfaceVersion", "HP_1.0" }
            };



            //// Posten van data
            byte[] response;
            using (var client = new WebClient())
                response = client.UploadValues(postUrl, postData);

            try
            {
                var responseData             = Encoding.UTF8.GetString(response);
                var trimmedResponse          = responseData.Trim();
                var matchedHiddenfield       = Regex.Matches(trimmedResponse, "<input type=HIDDEN.+/>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
                var postValueFromHiddenField = Regex.Matches(matchedHiddenfield[0].Value, "(?<=\\bvalue=\")[^\"]*", RegexOptions.IgnoreCase | RegexOptions.Multiline);
                var redirectionDataField     = string.Format("redirectionData={0}", postValueFromHiddenField[0].Value);

                PaymentProviderHelper.SetTransactionId(orderInfo, transactionId);
                orderInfo.PaymentInfo.Url        = forwardUrl;
                orderInfo.PaymentInfo.Parameters = redirectionDataField;

                orderInfo.Save();

                var request = new PaymentRequest();

                return(request);
            }
            catch
            {
                var responseResult = Encoding.UTF8.GetString(response);
                Log.Instance.LogError("Omnikassa: " + responseResult);
                throw new Exception("OmniKassa Issue Please Notice Shopowner");
            }
        }
コード例 #26
0
        /// <summary>
        /// Creates a payment request for this payment provider
        /// </summary>
        /// <param name="orderInfo"> </param>
        /// <returns>Payment request</returns>
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);

            #region build urls

            var baseUrl = PaymentProviderHelper.GenerateBaseUrl();

            var returnUrl = paymentProvider.SuccessUrl();

            var reportUrl = paymentProvider.ReportUrl();

            #endregion

            #region config helper

            var accountId = paymentProvider.GetSetting("AccountId");

            var liveUrl = "https://www.paypal.com/cgi-bin/webscr";
            var testUrl = "https://www.sandbox.paypal.com/us/cgi-bin/webscr";

            var configLiveUrl = paymentProvider.GetSetting("Url");
            var configTestUrl = paymentProvider.GetSetting("testUrl");

            if (!string.IsNullOrEmpty(configLiveUrl))
            {
                liveUrl = configLiveUrl;
            }
            if (!string.IsNullOrEmpty(configTestUrl))
            {
                testUrl = configTestUrl;
            }

            #endregion

            var trasactionId = orderInfo.OrderNumber + "x" + DateTime.Now.ToString("hhmmss");


            var request = new PaymentRequest();
            request.Parameters.Add("cmd", "_xclick");

            // retrieve Account ID
            request.Parameters.Add("business", accountId);

            //request.Parameters.Add("invoice", order.OrderInfo.OrderNumber.ToString());
            request.Parameters.Add("invoice", orderInfo.OrderNumber);
            var ci = new CultureInfo("en-US");
            var totalAmountAsString = orderInfo.ChargedAmount.ToString("N", ci);
            request.Parameters.Add("amount", totalAmountAsString);
            request.Parameters.Add("tax_cart", totalAmountAsString);
            request.Parameters.Add("no_note", "0");
            var ri = new RegionInfo(orderInfo.StoreInfo.Store.CurrencyCultureInfo.LCID);
            request.Parameters.Add("currency_code", ri.ISOCurrencySymbol);
            request.Parameters.Add("lc", orderInfo.StoreInfo.CultureInfo.TwoLetterISOLanguageName);

            request.Parameters.Add("return", returnUrl);

            request.Parameters.Add("shopping_url", baseUrl);

            request.Parameters.Add("notify_url", reportUrl);

            #region testmode

            if (paymentProvider.TestMode)
            {
                request.Parameters.Add("cn", "Test");
            }

            #endregion

            // Order as shown with PayPal
            request.Parameters.Add("item_name", orderInfo.OrderNumber);

            // Set GUID to identify order in SSWS
            // Sent GUID for identification to PayPal
            // PayPal will return custom value to validate order

            request.Parameters.Add("custom", trasactionId);

            // check if provider is in testmode to send request to right URL
            request.PaymentUrlBase = paymentProvider.TestMode ? testUrl : liveUrl;

            PaymentProviderHelper.SetTransactionId(orderInfo, trasactionId);

            orderInfo.PaymentInfo.Url        = request.PaymentUrl;
            orderInfo.PaymentInfo.Parameters = request.ParametersAsString;

            return(request);
        }
コード例 #27
0
        public IEnumerable <PaymentProviderMethod> GetAllPaymentMethods(int id)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(id);

            var providerSettingsXML = paymentProvider.GetSettingsXML();

            var enabledServices = providerSettingsXML.Descendants("Services").FirstOrDefault();

            var paymentMethods = new List <PaymentProviderMethod>();

            if (enabledServices != null)
            {
                foreach (var service in enabledServices.Descendants("Service"))
                {
                    var serviceName  = service.Attribute("name").Value;
                    var serviceTitle = serviceName;

                    if (service.Attribute("title") != null)
                    {
                        serviceTitle = service.Attribute("title").Value;
                    }

                    var paymentImageId = 0;

                    if (service.Descendants().Any())
                    {
                        foreach (var issuer in service.Descendants("Issuer"))
                        {
                            var name = issuer.Attribute("name").Value;
                            var code = issuer.Attribute("code").Value;

                            var method = code;

                            var nameForLogoDictionaryItem = string.Format("{0}LogoId", code.Replace(" ", string.Empty));

                            var logoDictionaryItem = library.GetDictionaryItem(nameForLogoDictionaryItem);

                            if (string.IsNullOrEmpty(logoDictionaryItem))
                            {
                                int.TryParse(library.GetDictionaryItem(nameForLogoDictionaryItem), out paymentImageId);
                            }

                            paymentMethods.Add(new PaymentProviderMethod
                            {
                                Id           = method,
                                Description  = name,
                                Title        = name,
                                Name         = serviceTitle,
                                ProviderName = GetName(),
                                ImageId      = paymentImageId
                            });
                        }
                    }
                    else
                    {
                        var nameForLogoDictionaryItem = string.Format("{0}LogoId", serviceName.Replace(" ", string.Empty));

                        var logoDictionaryItem = library.GetDictionaryItem(nameForLogoDictionaryItem);

                        if (string.IsNullOrEmpty(logoDictionaryItem))
                        {
                            int.TryParse(library.GetDictionaryItem(nameForLogoDictionaryItem), out paymentImageId);
                        }

                        paymentMethods.Add(new PaymentProviderMethod
                        {
                            Id           = serviceName,
                            Description  = serviceName,
                            Title        = serviceTitle,
                            Name         = serviceName,
                            ProviderName = GetName(),
                            ImageId      = paymentImageId
                        });
                    }
                }
            }


            return(paymentMethods);
        }
コード例 #28
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);
        }