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()); }
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); }
/// <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()); }
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); }
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()); }
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>()); } }
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); }
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); }
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); }
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); }
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; } }
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); }
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); }
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()); }
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); }
/// <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); }
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()); }
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); }
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); }
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); }
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); }
/// <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); }
/// <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()); }
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"); } }
/// <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); }
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); }
/// <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); }