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); } }
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; } }
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); } }