Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 4
0
        //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;

        }
Ejemplo n.º 6
0
 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;
            }
        }