Exemple #1
0
        public void ProcessTransaction(IAddressInfo billing, OrderInfo orderInfo, TransactionDetails transaction)
        {
            PayPalSettings settings = new PayPalSettings(_gatewaySettings);

            if (transaction.IsValid())
            {
                CultureInfo ciEnUs = new CultureInfo("en-US");
                _paymentURL = settings.UseSandbox ? SandboxPaymentURL : settings.PaymentURL;
                RemoteForm paypal = new RemoteForm("paypalform", _paymentURL);
                // Main fields
                paypal.Fields.Add("cmd", "_cart");
                paypal.Fields.Add("upload", "1");
                paypal.Fields.Add("business", settings.PayPalID.ToLower());
                paypal.Fields.Add("charset", settings.Charset);
                paypal.Fields.Add("currency_code", settings.Currency);
                paypal.Fields.Add("invoice", orderInfo.OrderID.ToString());
                paypal.Fields.Add("return", transaction.ReturnURL);
                paypal.Fields.Add("cancel_return", transaction.CancelURL);
                paypal.Fields.Add("notify_url", transaction.NotifyURL);
                paypal.Fields.Add("rm", "2");
                paypal.Fields.Add("lc", settings.Lc);
                paypal.Fields.Add("cbt", transaction.Cbt);
                paypal.Fields.Add("custom", orderInfo.CustomerID.ToString());
                paypal.Fields.Add("email", transaction.Email);
                paypal.Fields.Add("first_name", billing.FirstName);
                paypal.Fields.Add("last_name", billing.LastName);
                if (!string.IsNullOrEmpty(billing.Address1))
                {
                    paypal.Fields.Add("address1", billing.Address1);
                }
                if (!string.IsNullOrEmpty(billing.Address2))
                {
                    paypal.Fields.Add("address2", billing.Address2);
                }
                if (!string.IsNullOrEmpty(billing.City))
                {
                    paypal.Fields.Add("city", billing.City);
                }
                if (!string.IsNullOrEmpty(billing.PostalCode))
                {
                    paypal.Fields.Add("zip", billing.PostalCode);
                }
                // Get ISO country code for specified country name
                string country = GetISOCountryCode(billing.CountryCode);
                if (!string.IsNullOrEmpty(country))
                {
                    paypal.Fields.Add("country", country);
                }
                if (!string.IsNullOrEmpty(billing.Phone1))
                {
                    // Remove all chars but numbers from phone number
                    string phonenumber = Regex.Replace(billing.Phone1, "[^\\d]", "", RegexOptions.Compiled);
                    // If the buyer live in the USA
                    if (country == "US")
                    {
                        // Get US postal code for specified region code and add it to the form
                        paypal.Fields.Add("state", GetUSPostalRegionCode(country, billing.RegionCode));
                        // If the phone number is valid
                        int phoneLength = phonenumber.Length;
                        if (phoneLength > 7)
                        {
                            // Extract area code, three digits prefix and four digits phone number
                            paypal.Fields.Add("night_phone_a", phonenumber.Substring(0, phoneLength - 7));
                            paypal.Fields.Add("night_phone_b", phonenumber.Substring(phoneLength - 7, 3));
                            paypal.Fields.Add("night_phone_c", phonenumber.Substring(phoneLength - 4));
                        }
                    }
                    else
                    {
                        // For International buyers, set country code and phone number
                        //paypal.Fields.Add("night_phone_a", country); HERE PHONE country code is required!
                        paypal.Fields.Add("night_phone_b", phonenumber);
                    }
                }
                // Order details
                OrderController        orderController = new OrderController();
                List <OrderDetailInfo> orderDetails    = orderController.GetOrderDetails(orderInfo.OrderID);
                int itemNumber = 1;
                foreach (OrderDetailInfo detail in orderDetails)
                {
                    paypal.Fields.Add("item_number_" + itemNumber, detail.ProductID.ToString());
                    paypal.Fields.Add("item_name_" + itemNumber, detail.ProductTitle);
                    paypal.Fields.Add("quantity_" + itemNumber, detail.Quantity.ToString());
                    paypal.Fields.Add("amount_" + itemNumber, detail.UnitCost.ToString("0.00", ciEnUs));
                    itemNumber++;
                }
                // If a valid coupon exists
                if (orderInfo.CouponID != Null.NullInteger)
                {
                    decimal discount = Math.Abs(orderInfo.Discount);
                    paypal.Fields.Add("discount_amount_cart", discount.ToString("0.00", ciEnUs));
                }
                // Shipping
                if (orderInfo.ShippingCost > 0)
                {
                    paypal.Fields.Add("handling_cart", orderInfo.ShippingCost.ToString("0.00", ciEnUs));
                }
                // Tax
                if (orderInfo.TaxTotal > 0)
                {
                    paypal.Fields.Add("tax_cart", orderInfo.TaxTotal.ToString("0.00", ciEnUs));
                }
                // Post the form to the client browser then submit it to PayPal using JavaScript
                paypal.Post();
            }
        }
Exemple #2
0
        public void ProcessTransaction(IAddressInfo billing, OrderInfo orderInfo, TransactionDetails transaction)
        {
            if (transaction.IsValid())
            {
                SystempaySettings settings  = new SystempaySettings(_gatewaySettings);
                RemoteForm        systempay = new RemoteForm("systempayform", settings.PaymentURL);
                // Main fields
                systempay.Fields.Add("vads_version", "V2");
                systempay.Fields.Add("vads_site_id", settings.SiteID);
                systempay.Fields.Add("vads_ctx_mode", settings.UseTestCertificate ? "TEST" : "PRODUCTION");
                if (!string.IsNullOrEmpty(settings.Contracts))
                {
                    systempay.Fields.Add("vads_contracts", settings.Contracts);
                }
                systempay.Fields.Add("vads_page_action", "PAYMENT");
                systempay.Fields.Add("vads_action_mode", "INTERACTIVE");
                systempay.Fields.Add("vads_payment_config", "SINGLE");
                systempay.Fields.Add("vads_capture_delay", "0");
                //systempay.Fields.Add("vads_validation_mode", "0");
                systempay.Fields.Add("vads_trans_id", GetTransactionID());
                systempay.Fields.Add("vads_trans_date", GetTransactionDate());
                systempay.Fields.Add("vads_currency", settings.Currency);
                systempay.Fields.Add("vads_language", settings.Language);
                systempay.Fields.Add("vads_return_mode", "POST");
                systempay.Fields.Add("vads_url_return", transaction.ReturnURL);
                systempay.Fields.Add("vads_url_refused", transaction.RefusedURL);
                systempay.Fields.Add("vads_url_error", transaction.ErrorURL);
                systempay.Fields.Add("vads_url_cancel", transaction.CancelURL);
                systempay.Fields.Add("vads_url_check", transaction.NotifyURL);
                systempay.Fields.Add("vads_shop_name", transaction.ShopName);
                systempay.Fields.Add("vads_theme_config", transaction.Buttons);

                // Customer fields
                systempay.Fields.Add("vads_cust_id", orderInfo.CustomerID.ToString());
                systempay.Fields.Add("vads_cust_first_name", billing.FirstName);
                systempay.Fields.Add("vads_cust_last_name", billing.LastName);
                string address = (billing.Address1 + " " + billing.Address2).Trim();
                if (!string.IsNullOrEmpty(address))
                {
                    systempay.Fields.Add("vads_cust_address", address);
                }
                if (!string.IsNullOrEmpty(billing.PostalCode))
                {
                    systempay.Fields.Add("vads_cust_zip", billing.PostalCode);
                }
                if (!string.IsNullOrEmpty(billing.City))
                {
                    systempay.Fields.Add("vads_cust_city", billing.City);
                }
                // Get ISO country code for specified country name
                string country = GetISOCountryCode(billing.CountryCode);
                if (!string.IsNullOrEmpty(country))
                {
                    systempay.Fields.Add("vads_cust_country", country);
                }
                if (!string.IsNullOrEmpty(billing.Phone1))
                {
                    systempay.Fields.Add("vads_cust_phone", billing.Phone1);
                }
                if (!string.IsNullOrEmpty(billing.Phone2))
                {
                    systempay.Fields.Add("vads_cust_cell_phone", billing.Phone2);
                }
                systempay.Fields.Add("vads_cust_email", transaction.Email);

                // Order fields
                systempay.Fields.Add("vads_order_id", orderInfo.OrderID.ToString());
                // Order details
                OrderController        orderController = new OrderController();
                List <OrderDetailInfo> orderDetails    = orderController.GetOrderDetails(orderInfo.OrderID);
                int itemNumber = 0;
                foreach (OrderDetailInfo detail in orderDetails)
                {
                    string prodRef = !string.IsNullOrEmpty(detail.ModelNumber) ? detail.ModelNumber : detail.ProductID.ToString();
                    systempay.Fields.Add("vads_product_ref" + itemNumber, prodRef);
                    systempay.Fields.Add("vads_product_label" + itemNumber, detail.ModelName);
                    systempay.Fields.Add("vads_product_qty" + itemNumber, detail.Quantity.ToString());
                    systempay.Fields.Add("vads_product_amount" + itemNumber, FormatAmount(detail.UnitCost));
                    itemNumber++;
                }
                systempay.Fields.Add("vads_nb_products", orderDetails.Count.ToString());
                systempay.Fields.Add("vads_amount", FormatAmount(orderInfo.GrandTotal));

                // Shipping
                if (orderInfo.ShippingCost > 0)
                {
                    systempay.Fields.Add("vads_shipping_amount", FormatAmount(orderInfo.ShippingCost));
                }
                // Tax
                if (orderInfo.TaxTotal > 0)
                {
                    systempay.Fields.Add("vads_tax_amount", FormatAmount(orderInfo.TaxTotal));
                }

                // Add computed signature
                systempay.Fields.Add("signature", GetSignature(systempay.Fields, settings.Certificate));
                // Post the form to the client browser then submit it to Systempay using JavaScript
                systempay.Post(true);
            }
        }