public static MerchantTribe.Web.Geography.Country TranslateCountry(string connectionString, string countryBvin)
        {
            MerchantTribe.Web.Geography.Country result = new MerchantTribe.Web.Geography.Country();
            data.BV53Entities db = new data.BV53Entities(connectionString);
            var old = db.bvc_Country.Where(y => y.bvin == countryBvin).FirstOrDefault();

            if (old == null)
            {
                return(MerchantTribe.Web.Geography.Country.FindByISOCode("US"));
            }
            result = MerchantTribe.Web.Geography.Country.FindByISOCode(old.ISOCode);
            return(result);
        }
예제 #2
0
        com.paypal.soap.api.CountryCodeType ConvertCountryName(string name)
        {
            com.paypal.soap.api.CountryCodeType result = CountryCodeType.US;

            MerchantTribe.Web.Geography.Country country = MerchantTribe.Web.Geography.Country.FindByName(name);
            if (country == null)
            {
                return(result);
            }


            if (Enum.IsDefined(typeof(com.paypal.soap.api.CountryCodeType), country.IsoCode))
            {
                result = (com.paypal.soap.api.CountryCodeType)Enum.Parse(typeof(com.paypal.soap.api.CountryCodeType), country.IsoCode, true);
            }

            return(result);
        }
        public bool CopyTo(AddressDTO destinationAddress, string connString)
        {
            bool result = true;

            try
            {
                destinationAddress.NickName      = this.NickName;
                destinationAddress.FirstName     = this.FirstName;
                destinationAddress.MiddleInitial = this.MiddleInitial;
                destinationAddress.LastName      = this.LastName;
                destinationAddress.Company       = this.Company;
                destinationAddress.Line1         = this.Line1;
                destinationAddress.Line2         = this.Line2;
                destinationAddress.Line3         = this.Line3;
                destinationAddress.City          = this.City;
                destinationAddress.PostalCode    = this.PostalCode;

                MerchantTribe.Web.Geography.Country newCountry = GeographyHelper.TranslateCountry(connString, this.CountryBvin);
                destinationAddress.CountryBvin = newCountry.Bvin;
                destinationAddress.CountryName = newCountry.DisplayName;

                string RegionAbbreviation = GeographyHelper.TranslateRegionBvinToAbbreviation(connString, this.RegionBvin);
                destinationAddress.RegionBvin = RegionAbbreviation;
                destinationAddress.RegionName = RegionAbbreviation;


                destinationAddress.Phone      = this.Phone;
                destinationAddress.Fax        = this.Fax;
                destinationAddress.WebSiteUrl = this.WebSiteUrl;
                destinationAddress.CountyBvin = this.CountyBvin;
                destinationAddress.CountyName = this.CountyName;
                //destinationAddress.Residential = this.Residential;
            }
            catch
            {
                result = false;
            }

            return(result);
        }
        public override bool Execute(OrderTaskContext context)
        {
            if (context.Inputs["Mode"] != null)
            {
                if (context.Inputs["Mode"].Value == "PaypalExpress")
                {
                    if (context.MTApp.CurrentRequestContext.RoutingContext.HttpContext != null)
                    {
                        PayPalAPI ppAPI = Utilities.PaypalExpressUtilities.GetPaypalAPI(context.MTApp.CurrentStore);
                        try {
                            string cartReturnUrl = string.Empty;
                            string cartCancelUrl = string.Empty;
                            if (context.MTApp.CurrentRequestContext != null)
                            {
                                cartReturnUrl = context.MTApp.CurrentRequestContext.CurrentStore.RootUrlSecure() + "paypalexpresscheckout";
                                cartCancelUrl = context.MTApp.CurrentRequestContext.CurrentStore.RootUrlSecure() + "checkout";
                            }

                            EventLog.LogEvent("PayPal Express Checkout", "CartCancelUrl=" + cartCancelUrl, EventLogSeverity.Information);
                            EventLog.LogEvent("PayPal Express Checkout", "CartReturnUrl=" + cartReturnUrl, EventLogSeverity.Information);

                            SetExpressCheckoutResponseType expressResponse;
                            PaymentActionCodeType          mode = PaymentActionCodeType.Authorization;

                            if (context.MTApp.CurrentRequestContext.CurrentStore.Settings.PayPal.ExpressAuthorizeOnly)
                            {
                                mode = PaymentActionCodeType.Order;
                            }
                            else
                            {
                                mode = PaymentActionCodeType.Sale;
                            }

                            // Accelerated boarding
                            if (context.MTApp.CurrentRequestContext.CurrentStore.Settings.PayPal.UserName.Trim().Length < 1)
                            {
                                mode = PaymentActionCodeType.Sale;
                            }


                            bool addressSupplied = false;
                            if (context.Inputs["AddressSupplied"] != null)
                            {
                                if (context.Inputs["AddressSupplied"].Value == "1")
                                {
                                    addressSupplied = true;
                                    context.Order.CustomProperties.Add("bvsoftware", "PaypalAddressOverride", "1");
                                }
                            }

                            string amountToPayPal = context.Order.TotalOrderBeforeDiscounts.ToString("N", System.Globalization.CultureInfo.CreateSpecificCulture("en-US"));

                            if (addressSupplied)
                            {
                                Contacts.Address address = context.Order.ShippingAddress;

                                MerchantTribe.Web.Geography.Country country = MerchantTribe.Web.Geography.Country.FindByBvin(address.CountryBvin);
                                if (country != null)
                                {
                                    expressResponse = ppAPI.SetExpressCheckout(
                                        amountToPayPal,
                                        cartReturnUrl,
                                        cartCancelUrl,
                                        mode,
                                        PayPalAPI.GetCurrencyCodeType(context.MTApp.CurrentRequestContext.CurrentStore.Settings.PayPal.Currency),
                                        address.FirstName + " " + address.LastName,
                                        country.IsoCode,
                                        address.Line1,
                                        address.Line2,
                                        address.City,
                                        address.RegionBvin,
                                        address.PostalCode,
                                        address.Phone,
                                        context.Order.OrderNumber + System.Guid.NewGuid().ToString());
                                    if (expressResponse == null)
                                    {
                                        EventLog.LogEvent("PayPal Express Checkout", "Express Response Was Null!", EventLogSeverity.Error);
                                    }
                                }
                                else
                                {
                                    EventLog.LogEvent("StartPaypalExpressCheckout", "Country with bvin " + address.CountryBvin + " was not found.", EventLogSeverity.Error);
                                    return(false);
                                }
                            }
                            else
                            {
                                expressResponse = ppAPI.SetExpressCheckout(amountToPayPal,
                                                                           cartReturnUrl,
                                                                           cartCancelUrl,
                                                                           mode,
                                                                           PayPalAPI.GetCurrencyCodeType(context.MTApp.CurrentRequestContext.CurrentStore.Settings.PayPal.Currency),
                                                                           context.Order.OrderNumber + System.Guid.NewGuid().ToString());
                                if (expressResponse == null)
                                {
                                    EventLog.LogEvent("PayPal Express Checkout", "Express Response2 Was Null!", EventLogSeverity.Error);
                                }
                            }

                            if (expressResponse.Ack == AckCodeType.Success || expressResponse.Ack == AckCodeType.SuccessWithWarning)
                            {
                                context.Order.ThirdPartyOrderId = expressResponse.Token;

                                // Recording of this info is handled on the paypal express
                                // checkout page instead of here.
                                //Orders.OrderPaymentManager payManager = new Orders.OrderPaymentManager(context.Order);
                                //payManager.PayPalExpressAddInfo(context.Order.TotalGrand, expressResponse.Token);

                                EventLog.LogEvent("PayPal Express Checkout", "Response SUCCESS", EventLogSeverity.Information);

                                Orders.OrderNote note = new Orders.OrderNote();
                                note.IsPublic = false;
                                note.Note     = "Paypal Order Accepted With Paypal Order Number: " + expressResponse.Token;
                                context.Order.Notes.Add(note);
                                if (context.MTApp.OrderServices.Orders.Update(context.Order))
                                {
                                    if (string.Compare(context.MTApp.CurrentRequestContext.CurrentStore.Settings.PayPal.Mode, "Live", true) == 0)
                                    {
                                        context.MTApp.CurrentRequestContext.RoutingContext.HttpContext.Response.Redirect("https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=" + expressResponse.Token, true);
                                    }
                                    else
                                    {
                                        context.MTApp.CurrentRequestContext.RoutingContext.HttpContext.Response.Redirect("https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=" + expressResponse.Token, true);
                                    }
                                }
                                return(true);
                            }
                            else
                            {
                                foreach (ErrorType ppError in expressResponse.Errors)
                                {
                                    context.Errors.Add(new WorkflowMessage(ppError.ErrorCode, ppError.ShortMessage, true));

                                    //create a note to save the paypal error info onto the order
                                    Orders.OrderNote note = new Orders.OrderNote();
                                    note.IsPublic = false;
                                    note.Note     = "Paypal error number: " + ppError.ErrorCode + " Paypal Error: '" + ppError.ShortMessage + "' Message: '" + ppError.LongMessage;
                                    context.Order.Notes.Add(note);

                                    EventLog.LogEvent("Paypal error number: " + ppError.ErrorCode, "Paypal Error: '" + ppError.ShortMessage + "' Message: '" + ppError.LongMessage + "' " + " Values passed to SetExpressCheckout: Total=" + string.Format("{0:c}", context.Order.TotalOrderBeforeDiscounts) + " Cart Return Url: " + cartReturnUrl + " Cart Cancel Url: " + cartCancelUrl, EventLogSeverity.Error);
                                }
                                context.Errors.Add(new WorkflowMessage("Paypal checkout error", Content.SiteTerms.GetTerm(Content.SiteTermIds.PaypalCheckoutCustomerError), true));
                                return(false);
                            }
                        }
                        catch (Exception ex) {
                            EventLog.LogEvent("Paypal Express Checkout", "Exception occurred during call to Paypal: " + ex.ToString(), EventLogSeverity.Error);
                            context.Errors.Add(new WorkflowMessage("Paypal checkout error", Content.SiteTerms.GetTerm(Content.SiteTermIds.PaypalCheckoutCustomerError), true));
                            return(false);
                        }
                        finally {
                            ppAPI = null;
                        }
                    }
                }
                else
                {
                    return(true);
                }
            }
            else
            {
                return(true);
            }

            return(false);
        }
예제 #5
0
        public string ToHtmlString()
        {
            StringBuilder sb = new StringBuilder();

            if (NickName.Trim().Length > 0)
            {
                sb.Append("<em>" + NickName + "</em><br />");
            }
            if (LastName.Length > 0 || FirstName.Length > 0)
            {
                sb.Append(FirstName);
                if (MiddleInitial.Trim().Length > 0)
                {
                    sb.Append(" " + MiddleInitial);
                }
                sb.Append(" " + LastName + "<br />");
                if (Company.Trim().Length > 0)
                {
                    sb.Append(Company + "<br />");
                }
            }
            if (Line1.Length > 0)
            {
                sb.Append(Line1 + "<br />");
            }
            if (Line2.Trim().Length > 0)
            {
                sb.Append(Line2 + "<br />");
            }
            if (Line3.Trim().Length > 0)
            {
                sb.Append(Line3 + "<br />");
            }

            MerchantTribe.Web.Geography.Country c = MerchantTribe.Web.Geography.Country.FindByBvin(CountryBvin);
            MerchantTribe.Web.Geography.Region  r = c.Regions.Where(y => y.Abbreviation == RegionBvin).FirstOrDefault();

            if (r != null)
            {
                sb.Append(City + ", " + r.Abbreviation + " " + _PostalCode + "<br />");
            }
            else
            {
                if (RegionName.Trim().Length > 0)
                {
                    sb.Append(City + ", " + RegionName + " " + _PostalCode + "<br />");
                }
                else
                {
                    sb.Append(City + ", " + _PostalCode + "<br />");
                }
            }
            if (c != null)
            {
                sb.Append(c.DisplayName + "<br />");
            }

            if (Phone.Trim().Length > 0)
            {
                sb.Append(Phone + "<br />");
            }
            if (Fax.Trim().Length > 0)
            {
                sb.Append("Fax: " + Fax + "<br />");
            }
            if (WebSiteUrl.Trim().Length > 0)
            {
                sb.Append(WebSiteUrl + "<br />");
            }
            return(sb.ToString());
        }
예제 #6
0
        public override void ProcessTransaction(Transaction t)
        {
            bool result = false;

            try
            {
                string url = LiveUrl;
                if (Settings.DeveloperMode)
                {
                    url = DeveloperUrl;
                }

                // Build Data String
                // Card Number and Expiration
                string expDate = t.Card.ExpirationMonthPadded + t.Card.ExpirationYearTwoDigits;

                // Set Parameters
                StringBuilder sb       = new StringBuilder();
                string        postData = string.Empty;

                sb.Append("x_version=3.1");
                sb.Append("&x_login="******"&x_tran_key=");
                sb.Append(SafeWriteString(Settings.TransactionKey.Trim()));
                sb.Append("&x_Amount=");
                sb.Append(SafeWriteString(t.Amount.ToString()));
                sb.Append("&x_Cust_ID=");
                sb.Append(SafeWriteString(t.Customer.Email));
                sb.Append("&x_Description=");
                sb.Append(SafeWriteString(t.MerchantDescription));
                sb.Append("&x_invoice_num=");
                sb.Append(SafeWriteString(t.MerchantInvoiceNumber));
                sb.Append("&x_Email_Customer=");
                sb.Append(SafeWriteBool(Settings.SendEmailToCustomer));
                sb.Append("&x_delim_data=");
                sb.Append(SafeWriteBool(true));
                sb.Append("&x_ADC_URL=");
                sb.Append(SafeWriteBool(false));
                sb.Append("&x_delim_char=");
                sb.Append(SafeWriteString(","));
                sb.Append("&x_relay_response=");
                sb.Append(SafeWriteBool(false));
                sb.Append("&x_Email=");
                sb.Append(SafeWriteString(t.Customer.Email));

                // Main Address
                sb.Append("&x_First_Name=");
                sb.Append(SafeWriteString(t.Customer.FirstName));
                sb.Append("&x_Last_Name=");
                sb.Append(SafeWriteString(t.Customer.LastName));
                sb.Append("&x_Company=");
                sb.Append(SafeWriteString(t.Customer.Company));
                sb.Append("&x_Address=");
                sb.Append(SafeWriteString(t.Customer.Street));
                sb.Append("&x_City=");
                sb.Append(SafeWriteString(t.Customer.City));

                sb.Append("&x_Country=");
                MerchantTribe.Web.Geography.Country country = MerchantTribe.Web.Geography.Country.FindByName(t.Customer.Country);
                if (country != null)
                {
                    sb.Append(SafeWriteString(country.IsoNumeric));
                }
                else
                {
                    sb.Append(SafeWriteString(t.Customer.Country));
                }

                // TODO: Add code to make sure we've got the correct state format
                if (t.Customer.Region != string.Empty)
                {
                    sb.Append("&x_State=");
                    sb.Append(SafeWriteString(t.Customer.Region));
                }
                sb.Append("&x_Zip=");
                sb.Append(SafeWriteString(t.Customer.PostalCode));
                sb.Append("&x_Phone=");
                sb.Append(SafeWriteString(t.Customer.Phone));

                // Ship To Address
                sb.Append("&x_Ship_To_First_Name=");
                sb.Append(SafeWriteString(t.Customer.ShipFirstName));
                sb.Append("&x_Ship_To_Last_Name=");
                sb.Append(SafeWriteString(t.Customer.ShipLastName));
                sb.Append("&x_Ship_To_Company=");
                sb.Append(SafeWriteString(t.Customer.ShipCompany));
                sb.Append("&x_Ship_To_Address=");
                sb.Append(SafeWriteString(t.Customer.ShipStreet));
                sb.Append("&x_Ship_To_City=");
                sb.Append(SafeWriteString(t.Customer.ShipCity));
                // TODO: Convert country codes to ISO Codes or
                // find a way to guarantee that we're getting an iso code
                sb.Append("&x_Ship_To_Country=");

                MerchantTribe.Web.Geography.Country shipcountry = MerchantTribe.Web.Geography.Country.FindByName(t.Customer.ShipCountry);
                if (country != null)
                {
                    sb.Append(SafeWriteString(shipcountry.IsoNumeric));
                }
                else
                {
                    sb.Append(SafeWriteString(t.Customer.ShipCountry));
                }

                // TODO: Add code to make sure we've got the correct state format
                if (t.Customer.ShipRegion != string.Empty)
                {
                    sb.Append("&x_Ship_To_State=");
                    sb.Append(SafeWriteString(t.Customer.ShipRegion));
                }
                sb.Append("&x_Ship_To_Zip=");
                sb.Append(SafeWriteString(t.Customer.ShipPostalCode));
                sb.Append("&x_Ship_To_Phone=");
                sb.Append(SafeWriteString(t.Customer.ShipPhone));

                sb.Append("&x_Method=");
                sb.Append(SafeWriteString("CC"));

                // Add Test Mode Flag if needed
                if (Settings.TestMode)
                {
                    sb.Append(SafeWriteString("&x_test_request=TRUE"));
                }

                switch (t.Action)
                {
                case ActionType.CreditCardCharge:
                    // Charge
                    sb.Append("&x_Type=");
                    sb.Append(SafeWriteString("AUTH_CAPTURE"));
                    sb.Append("&x_customer_ip=");
                    sb.Append(SafeWriteString(t.Customer.IpAddress));

                    break;

                case ActionType.CreditCardHold:
                    // Authorize
                    sb.Append("&x_Type=");
                    sb.Append(SafeWriteString("AUTH_ONLY"));
                    sb.Append("&x_customer_ip=");
                    sb.Append(SafeWriteString(t.Customer.IpAddress));
                    break;

                case ActionType.CreditCardCapture:
                    // Capture, Post Authorize
                    sb.Append("&x_Type=");
                    sb.Append(SafeWriteString("PRIOR_AUTH_CAPTURE"));
                    sb.Append("&x_trans_id=");
                    sb.Append(SafeWriteString(t.PreviousTransactionNumber));
                    break;

                case ActionType.CreditCardVoid:
                    // Void
                    sb.Append("&x_Type=");
                    sb.Append(SafeWriteString("VOID"));
                    sb.Append("&x_trans_id=");
                    sb.Append(SafeWriteString(t.PreviousTransactionNumber));
                    break;

                case ActionType.CreditCardRefund:
                    // Refund, Credit
                    sb.Append("&x_Type=");
                    sb.Append(SafeWriteString("CREDIT"));
                    sb.Append("&x_trans_id=");
                    sb.Append(SafeWriteString(t.PreviousTransactionNumber));
                    break;
                }

                // Add Card Number, CVV Code and Expiration Date
                sb.Append("&x_Card_Num=");
                sb.Append(SafeWriteString(t.Card.CardNumber));
                if (t.Card.SecurityCode.Length > 0)
                {
                    sb.Append("&x_Card_Code=");
                    sb.Append(SafeWriteString(t.Card.SecurityCode));
                }
                sb.Append("&x_Exp_Date=");
                sb.Append(SafeWriteString(expDate));


                // Dump string builder to string to send to Authorize.Net
                postData = sb.ToString();

                string responseString = NetworkUtilities.SendRequestByPost(url, postData);

                // Split response string
                string[] output = responseString.Split(',');

                int counter = 0;
                System.Collections.Hashtable vars = new System.Collections.Hashtable();

                // Move strings into hash table for easy reference
                foreach (string var in output)
                {
                    vars.Add(counter, var);
                    counter += 1;
                }

                if (vars.Count < 7)
                {
                    result = false;
                }
                else
                {
                    string responseCode        = (string)vars[0];
                    string responseDescription = (string)vars[3];
                    string responseAuthCode    = (string)vars[4];
                    string responseAVSCode     = (string)vars[5];
                    t.Result.AvsCode = ParseAvsCode(responseAVSCode);
                    string responseReferenceCode = (string)vars[6];
                    string responseSecurityCode  = string.Empty;
                    if (vars.Count > 38)
                    {
                        responseSecurityCode = (string)vars[38];
                    }
                    t.Result.CvvCode = ParseSecurityCode(responseSecurityCode);


                    // Trim off Extra Quotes on response codes
                    responseCode = responseCode.Trim('"');

                    // Save result information to payment data object
                    t.Result.ResponseCode            = responseCode;
                    t.Result.ResponseCodeDescription = responseDescription;
                    t.Result.ReferenceNumber         = responseReferenceCode;

                    switch (responseCode)
                    {
                    case "1":
                        // Approved
                        result = true;
                        break;

                    case "2":
                        // Declined
                        result = false;
                        t.Result.Messages.Add(new Message("Declined: " + responseDescription, responseCode, MessageType.Warning));
                        break;

                    case "3":
                        // UNKNOWN
                        result = false;
                        t.Result.Messages.Add(new Message("Authorize.Net Error: " + responseDescription, responseCode, MessageType.Error));
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                result = false;
                t.Result.Messages.Add(new Message("Unknown Payment Error: " + ex.Message, "BVP_AN_1001", MessageType.Error));
                t.Result.Messages.Add(new Message("Stack Trace " + ex.StackTrace, "STACKTRACE", MessageType.Error));
            }

            t.Result.Succeeded = result;
        }