Exemple #1
0
        protected void Page_Load(object sender, EventArgs e)
        {
            _portalLanguage = PortalSettings.DefaultLanguage;
            string subject   = Localization.GetString("StoreSystempayGateway", LocalResourceFile, _portalLanguage) + Localization.GetString("IPNInfo", LocalResourceFile, _portalLanguage);;
            string reason    = string.Empty;
            bool   sendEmail = false;

            _settings = new SystempaySettings(StoreSettings.GatewaySettings);
            SystempayIPNParameters ipn = new SystempayIPNParameters(Request.Form, _settings.Certificate);
            // Verify payment with Systempay certificate
            PaymentStatus status = VerifyPayment(ipn);

            // What's the user language?
            _userLanguage = Request.QueryString["language"];
            switch (status)
            {
            case PaymentStatus.Abandoned:
            case PaymentStatus.Canceled:
            case PaymentStatus.Captured:
                break;

            case PaymentStatus.Authorised:
                int portalId = PortalSettings.PortalId;
                // Set order status to "Paid"...
                OrderInfo order = UpdateOrderStatus(ipn.vads_order_id, OrderInfo.OrderStatusList.Paid, _userLanguage);
                // Add User to Product Roles
                OrderController orderController = new OrderController();
                orderController.AddUserToRoles(portalId, order);
                // Add User to Order Role
                StoreInfo storeSetting = StoreController.GetStoreInfo(portalId);
                if (storeSetting.OnOrderPaidRoleID != Null.NullInteger)
                {
                    orderController.AddUserToPaidOrderRole(portalId, order.CustomerID, storeSetting.OnOrderPaidRoleID);
                }
                // Special case request validation
                if (ipn.vads_trans_status == "AUTHORISED_TO_VALIDATE")
                {
                    sendEmail = true;
                }
                break;

            case PaymentStatus.Expired:
            case PaymentStatus.Refused:
            case PaymentStatus.Pending:
                // Inform Store Admin
                sendEmail = true;
                break;

            case PaymentStatus.Unattended:
                // Alert Store Admin
                subject   = Localization.GetString("StoreSystempayGateway", LocalResourceFile, _portalLanguage) + Localization.GetString("IPNAlert", LocalResourceFile, _portalLanguage);
                sendEmail = true;
                break;

            default:
                break;
            }
            // Do we need to send an email to the store admin?
            if (sendEmail)
            {
                string paymentStatus = Localization.GetString("PaymentStatus_" + ipn.vads_trans_status, LocalResourceFile, _portalLanguage);
                if (string.IsNullOrEmpty(paymentStatus))
                {
                    paymentStatus = ipn.vads_trans_status;
                }
                string emailIPN = Localization.GetString("EmailIPN", LocalResourceFile, _portalLanguage);
                string body     = string.Format(emailIPN, ipn.vads_order_id, ipn.vads_trans_id, ipn.vads_page_action, paymentStatus, ipn.vads_auth_result, ipn.vads_payment_error);
                SendEmailToAdmin(subject, body);
            }
        }
Exemple #2
0
        protected void Page_Load(object sender, EventArgs e)
        {
            // Do we have any special handling?
            SystempayNavigation nav = new SystempayNavigation(Request.QueryString);

            switch (nav.GatewayExit.ToUpper())
            {
            case "CANCEL":
            {
                InvokePaymentCancelled();
                CheckoutControl.Hide();
                pnlProceedToSystempay.Visible = false;
                return;
            }

            case "ERROR":
            case "REFUSED":
            {
                InvokePaymentFailed();
                CheckoutControl.Hide();
                pnlProceedToSystempay.Visible = false;
                return;
            }

            case "RETURN":
            {
                SystempaySettings      settings = new SystempaySettings(StoreSettings.GatewaySettings);
                SystempayIPNParameters ipn      = new SystempayIPNParameters(Request.QueryString, settings.Certificate);
                // Here there is no check about the validity of the Systempay response (IPN),
                // because it's just a message displayed to the customer.
                // Everything is checked in the NOTIFY case received from Systempay in the SystempayIPN.aspx page.
                switch (ipn.vads_trans_status.ToLower())
                {
                case "authorised":
                case "authorised_to_validate":
                    InvokePaymentSucceeded();
                    break;

                default:
                    InvokePaymentRequiresConfirmation();
                    break;
                }
                CheckoutControl.Hide();
                pnlProceedToSystempay.Visible = false;
                return;
            }
            }

            if (nav.GatewayExit.Length > 0)
            {
                //If the SystempayExit is anything else with length > 0, then don't do any processing
                HttpContext.Current.Response.Redirect(Common.Globals.NavigateURL(PortalSettings.ActiveTab.TabID), false);
                return;
            }

            // Continue with display of payment control...
            if (Page.IsPostBack == false)
            {
                SystempaySettings settings = new SystempaySettings(StoreSettings.GatewaySettings);
                if (!settings.IsValid())
                {
                    lblError.Text    = Localization.GetString("GatewayNotConfigured", LocalResourceFile);
                    lblError.Visible = true;
                    pnlProceedToSystempay.Visible = false;
                    return;
                }

                btnConfirmOrder.Attributes.Add("OnClick", ScriptAvoidDoubleClick(btnConfirmOrder, Localization.GetString("Processing", this.LocalResourceFile)));
                string message = Localization.GetString("lblConfirmMessage", LocalResourceFile);
                lblConfirmMessage.Text = string.Format(message, PortalSettings.PortalName);
                message = Localization.GetString("systempayimage", LocalResourceFile);
                systempayimage.AlternateText = message;
                systempayimage.ImageUrl      = settings.ButtonURL;

                lblError.Text    = string.Empty;
                lblError.Visible = false;
            }
        }
Exemple #3
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);
            }
        }