public IDirectPaymentResult ProcessDirectPaymentRequest(IDirectPayment paymentRequest, string directPaymentUrl) { var msg = new NameValueCollection(); foreach (var field in ProtocolMessage.DIRECT_PAYMENT.Required()) { var propName = mapCols[field.CanonicalName()] ?? field.CanonicalName(); var propInfo = typeof(DataObject).GetProperty(propName); msg.Add(field.CanonicalName(), propName.Equals("VpsProtocol") ? paymentRequest.VpsProtocol.VersionString() : propInfo.GetValue(paymentRequest, null).ToString()); } foreach (var field in ProtocolMessage.DIRECT_PAYMENT.Optional()) { var propName = mapCols[field.CanonicalName()] ?? field.CanonicalName(); var propInfo = typeof(DataObject).GetProperty(propName); if (propInfo.GetValue(paymentRequest, null) != null) msg.Add(field.CanonicalName(), propInfo.GetValue(paymentRequest, null).ToString()); } RequestQueryString = BuildQueryString(msg); ResponseQueryString = ProcessWebRequestToSagePay(directPaymentUrl, RequestQueryString); return GetDirectPaymentResult(ResponseQueryString); }
public NameValueCollection Validation(IDirectPayment directPayment) { return Validation(ProtocolMessage.FORM_PAYMENT, typeof(IDirectPayment), directPayment, _settings.ProtocolVersion); }
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; } }
//TODO: refactor away to a Service that wraps the SagePay kit horribleness private void SetSagePayApiData(IDirectPayment request, IInvoice invoice, IPayment payment, CreditCard creditCard) { // Get Merchello data //TODO - what if there is no shipping info? e.g. Classes only - Get from billing? var shipmentLineItem = invoice.ShippingLineItems().FirstOrDefault(); var shipment = shipmentLineItem.ExtendedData.GetShipment <InvoiceLineItem>(); var shippingAddress = shipment.GetDestinationAddress(); var billingAddress = invoice.GetBillingAddress(); // Merchello info for callback //request.InvoiceKey = invoice.Key; //request.PayerId = invoice.Pa //request.PaymentKey = payment.Key // SagePay details request.VpsProtocol = Settings.ProtocolVersion; request.TransactionType = Settings.TransactionType; request.Vendor = Settings.VendorName; request.VendorTxCode = SagePayAPIIntegration.GetNewVendorTxCode(); request.Amount = payment.Amount; request.Currency = invoice.CurrencyCode(); request.Description = "Goods from " + Settings.VendorName; // TODO: Is there a basket summary I can access? Or convert the Basket to a sagepay format // Billing details request.BillingSurname = billingAddress.TrySplitLastName(); request.BillingFirstnames = billingAddress.TrySplitFirstName(); request.BillingAddress1 = billingAddress.Address1; request.BillingAddress2 = billingAddress.Address2; request.BillingPostCode = billingAddress.PostalCode; request.BillingCity = billingAddress.Locality; request.BillingCountry = invoice.BillToCountryCode; // Shipping details request.DeliverySurname = shippingAddress.TrySplitLastName(); request.DeliveryFirstnames = shippingAddress.TrySplitFirstName(); request.DeliveryAddress1 = shippingAddress.Address1; request.DeliveryCity = shippingAddress.Locality; request.DeliveryCountry = shippingAddress.CountryCode; request.DeliveryPostCode = shippingAddress.PostalCode; request.CardType = (CardType)Enum.Parse(typeof(CardType), creditCard.CreditCardType); request.CardHolder = creditCard.CardholderName; request.CardNumber = creditCard.CardNumber; request.ExpiryDate = creditCard.ExpireMonth + creditCard.ExpireYear; request.Cv2 = creditCard.CardCode; request.Apply3dSecure = 0; if (request.CardType == CardType.PAYPAL) { Func <string, string> adjustUrl = (url) => { if (!url.StartsWith("http")) { url = GetWebsiteUrl() + (url[0] == '/' ? "" : "/") + url; } url = url.Replace("{invoiceKey}", invoice.Key.ToString(), StringComparison.InvariantCultureIgnoreCase); url = url.Replace("{paymentKey}", payment.Key.ToString(), StringComparison.InvariantCultureIgnoreCase); return(url); }; request.PayPalCallbackUrl = adjustUrl("/umbraco/MerchelloSagePay/SagePayApi/PaypalCallback?InvoiceKey={invoiceKey}&PaymentKey={paymentKey}"); } //Optional //request.CustomerName = cart.Billing.FirstNames + " " + cart.Billing.Surname; //request.CustomerEmail = customer.Email; //request.VendorEmail = Settings.VendorEmail; //request.SendEmail = Settings.SendEmail; //request.EmailMessage = Settings.EmailMessage; //request.BillingAddress2 = billingAddress.Address2; //request.BillingPostCode = billingAddress.PostalCode; //request.BillingState = billingAddress.Region; //request.BillingPhone = billingAddress.Phone; //request.DeliveryAddress2 = shippingAddress.Address2; //request.DeliveryPostCode = shippingAddress.PostalCode; //request.DeliveryState = shippingAddress.Region; //request.DeliveryPhone = shippingAddress.Phone; }
//TODO: refactor away to a Service that wraps the SagePay kit horribleness private void SetSagePayApiData(IDirectPayment request, IInvoice invoice, IPayment payment, CreditCard creditCard) { // Get Merchello data //TODO - what if there is no shipping info? e.g. Classes only - Get from billing? var shipmentLineItem = invoice.ShippingLineItems().FirstOrDefault(); var shipment = shipmentLineItem.ExtendedData.GetShipment<InvoiceLineItem>(); var shippingAddress = shipment.GetDestinationAddress(); var billingAddress = invoice.GetBillingAddress(); // Merchello info for callback //request.InvoiceKey = invoice.Key; //request.PayerId = invoice.Pa //request.PaymentKey = payment.Key // SagePay details request.VpsProtocol = Settings.ProtocolVersion; request.TransactionType = Settings.TransactionType; request.Vendor = Settings.VendorName; request.VendorTxCode = SagePayAPIIntegration.GetNewVendorTxCode(); request.Amount = payment.Amount; request.Currency = invoice.CurrencyCode(); request.Description = "Goods from " + Settings.VendorName; // TODO: Is there a basket summary I can access? Or convert the Basket to a sagepay format // Billing details request.BillingSurname = billingAddress.TrySplitLastName(); request.BillingFirstnames = billingAddress.TrySplitFirstName(); request.BillingAddress1 = billingAddress.Address1; request.BillingAddress2 = billingAddress.Address2; request.BillingPostCode = billingAddress.PostalCode; request.BillingCity = billingAddress.Locality; request.BillingCountry = invoice.BillToCountryCode; // Shipping details request.DeliverySurname = shippingAddress.TrySplitLastName(); request.DeliveryFirstnames = shippingAddress.TrySplitFirstName(); request.DeliveryAddress1 = shippingAddress.Address1; request.DeliveryCity = shippingAddress.Locality; request.DeliveryCountry = shippingAddress.CountryCode; request.DeliveryPostCode = shippingAddress.PostalCode; request.CardType = (CardType)Enum.Parse(typeof(CardType), creditCard.CreditCardType); request.CardHolder = creditCard.CardholderName; request.CardNumber = creditCard.CardNumber; request.ExpiryDate = creditCard.ExpireMonth + creditCard.ExpireYear; request.Cv2 = creditCard.CardCode; request.Apply3dSecure = 0; if (request.CardType == CardType.PAYPAL) { Func<string, string> adjustUrl = (url) => { if (!url.StartsWith("http")) url = GetWebsiteUrl() + (url[0] == '/' ? "" : "/") + url; url = url.Replace("{invoiceKey}", invoice.Key.ToString(), StringComparison.InvariantCultureIgnoreCase); url = url.Replace("{paymentKey}", payment.Key.ToString(), StringComparison.InvariantCultureIgnoreCase); return url; }; request.PayPalCallbackUrl = adjustUrl("/umbraco/MerchelloSagePay/SagePayApi/PaypalCallback?InvoiceKey={invoiceKey}&PaymentKey={paymentKey}"); } //Optional //request.CustomerName = cart.Billing.FirstNames + " " + cart.Billing.Surname; //request.CustomerEmail = customer.Email; //request.VendorEmail = Settings.VendorEmail; //request.SendEmail = Settings.SendEmail; //request.EmailMessage = Settings.EmailMessage; //request.BillingAddress2 = billingAddress.Address2; //request.BillingPostCode = billingAddress.PostalCode; //request.BillingState = billingAddress.Region; //request.BillingPhone = billingAddress.Phone; //request.DeliveryAddress2 = shippingAddress.Address2; //request.DeliveryPostCode = shippingAddress.PostalCode; //request.DeliveryState = shippingAddress.Region; //request.DeliveryPhone = shippingAddress.Phone; }
public NameValueCollection Validation(IDirectPayment directPayment) { return(Validation(ProtocolMessage.FORM_PAYMENT, typeof(IDirectPayment), directPayment, _settings.ProtocolVersion)); }
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; } }