/// <summary>
    /// Processes the payment results based on a reply from the payment gateway.
    /// For example, the method can be called from a custom IPN handler that accepts responses/notifications from
    /// the external gateway's responses/notifications.
    /// </summary>
    public void ProcessDirectPaymentReply(bool success, HttpContext context, string testMode)
    {
        // Payport response data
        var resultData = context.Request.Form;

        // Set payment transaction ID
        PaymentResult.PaymentTransactionID = resultData["tid"];
        // Set transaction mode (Test)
        if (testMode == "1")
        {
            PaymentResultItemInfo customItem = new PaymentResultItemInfo();
            customItem.Header = ResHelper.GetString("custom.transaction_mode");
            customItem.Name   = "PaymentMode";
            customItem.Value  = ResHelper.GetString("custom.test_mode");
            PaymentResult.SetPaymentResultItemInfo(customItem);
        }

        // Get payment Key
        string paymentKey = NovalnetHelper.GetPaymentKey(resultData);
        // Set Novalnet Payment Method
        PaymentResultItemInfo NovalnetPaymentMethod = new PaymentResultItemInfo();

        NovalnetPaymentMethod.Header = ResHelper.GetString("custom.payment_method_title");
        NovalnetPaymentMethod.Name   = "PaymentMethod";
        NovalnetPaymentMethod.Value  = NovalnetHelper.GetPaymentMethod(resultData);
        PaymentResult.SetPaymentResultItemInfo(NovalnetPaymentMethod);

        // Handle payment response
        if (success)
        {
            if (resultData["tid_status"] == "100" &&
                !Regex.IsMatch(paymentKey, "^(?:27|59)"))
            {
                if (Regex.IsMatch(paymentKey, "(?:40|41)"))
                {
                    PaymentResult.PaymentDescription = ResHelper.GetString("custom.guarantee_comment");
                }
                PaymentResult.PaymentIsCompleted = true;
            }
            else if (Regex.IsMatch(resultData["tid_status"], "^(?:75|85|86|90|91|98|99)$") || Regex.IsMatch(paymentKey, "^(?:27|59)$"))
            {
                PaymentResult.PaymentIsAuthorized = true;
                if (Regex.IsMatch(paymentKey, "^(?:27|41)$") && resultData["tid_status"] == "100")
                {
                    PaymentResultItemInfo item = new PaymentResultItemInfo();
                    item.Header = ResHelper.GetString("custom.transaction_details");
                    item.Name   = "NovalnetTransactionDetails";
                    item.Value  = string.Format(ResHelper.GetString("custom.duedate_title"), resultData["due_date"]) + " | " + string.Format(ResHelper.GetString("custom.account_holder"), resultData["invoice_account_holder"]) + " | " + string.Format("IBAN: {0}", resultData["invoice_iban"]) + " | " + string.Format("BIC: {0}", resultData["invoice_bic"]) + " | " + string.Format("Bank: {0} ", resultData["invoice_bankname"]) + " | " + string.Format(ResHelper.GetString("custom.amount"), resultData["amount"] + " " + resultData["currency"]) + " | " + ResHelper.GetString("custom.payment_reference_title") + " | " + string.Format(ResHelper.GetString("custom.payment_reference1"), resultData["invoice_ref"]) + " | " + string.Format(ResHelper.GetString("custom.payment_reference2"), resultData["tid"]);
                    // Saves the custom item into the PaymentResultInfo object processed by the gateway provider
                    PaymentResult.SetPaymentResultItemInfo(item);
                }
                else if (paymentKey == "59")
                {
                    PaymentResultItemInfo ShopDetails = new PaymentResultItemInfo();
                    ShopDetails.Header = string.Format(ResHelper.GetString("custom.slipexpirydate"), resultData["cashpayment_due_date"]);
                    ShopDetails.Name   = "NovalnetTransactionDetails";
                    ShopDetails.Value  = ResHelper.GetString("custom.store_details") + resultData["nearest_store_title_1"] + " | " + resultData["nearest_store_street_1"] + " | " + resultData["nearest_store_city_1"] + " | " + resultData["nearest_store_zipcode_1"] + " | " + resultData["nearest_store_country_1"] + resultData["nearest_store_title_2"] + " | " + resultData["nearest_store_street_2"] + " | " + resultData["nearest_store_city_2"] + " | " + resultData["nearest_store_zipcode_2"] + " | " + resultData["nearest_store_country_2"] + resultData["nearest_store_title_3"] + " | " + resultData["nearest_store_street_3"] + " | " + resultData["nearest_store_city_3"] + " | " + resultData["nearest_store_zipcode_3"] + " | " + resultData["nearest_store_country_3"];
                    // Saves the custom item into the PaymentResultInfo object processed by the gateway provider
                    PaymentResult.SetPaymentResultItemInfo(ShopDetails);
                }
                else if (resultData["tid_status"] == "75")
                {
                    PaymentResult.PaymentDescription = paymentKey == "41" ? ResHelper.GetString("custom.guarantee_comment") + ResHelper.GetString("custom.guarantee_invoice_comment") : ResHelper.GetString("custom.guarantee_comment") + ResHelper.GetString("custom.guarantee_sepa_comment");
                }
            }
        }
        else
        {
            // Sets the payment result for failed transactions
            PaymentResult.PaymentIsFailed    = true;
            PaymentResult.PaymentDescription = resultData["status_desc"];
        }
        // Saves the payment result to the related order
        // Moves the order to the status configured for successful or failed payments
        UpdateOrderPaymentResult();
    }
    private void DoTraitement()
    {
        var ordeID = Request.QueryString["ORDERID"];
        var order  = OrderInfoProvider.GetOrderInfo(Int32.Parse(ordeID));

        if (order == null)
        {
            return;
        }

        var    transactionID   = Request.QueryString["PAYID"];
        string transactionDate = Request.QueryString["TRXDATE"];
        var    modePaiement    = Request.QueryString["PM"];
        var    statutCode      = Request.QueryString["STATUS"];
        var    ncerror         = Request.QueryString["NCERROR"];
        var    sha             = Request.QueryString["SHASIGN"];


        var tab   = transactionDate.Split('/');
        var month = Int32.Parse(tab[0]);
        var day   = Int32.Parse(tab[1]);
        var year  = Int32.Parse(tab[2]);

        var date = new DateTime(year, month, day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);


        var payementResult = new PaymentResultInfo()
        {
            PaymentDate          = GetOgoneTransactionDate(transactionDate),
            PaymentTransactionID = transactionID,
            PaymentIsCompleted   = true,
            PaymentStatusName    = GetOgoneStatutLibelle(statutCode),
            PaymentMethodName    = "Ogone"
        };

        var paymentItem = new PaymentResultItemInfo()
        {
            Header = "Payment by",
            Name   = "PaymentSytem",
            Text   = modePaiement,
            Value  = modePaiement
        };

        payementResult.SetPaymentResultItemInfo(paymentItem);

        order.OrderPaymentResult = payementResult;

        if (statutCode != "1" && statutCode != "0")
        {
            order.OrderStatusID = OrderStatusInfoProvider.GetOrderStatusInfo("PaymentReceived", SiteContext.CurrentSiteName).StatusID;
            order.SetValue("OrderStatus", "1");
        }
        else
        {
            order.OrderStatusID = OrderStatusInfoProvider.GetOrderStatusInfo("Canceled", SiteContext.CurrentSiteName).StatusID;
            order.SetValue("OrderStatus", "2");
        }

        OrderHelper.CreateCustomInvoiceHelper(Int32.Parse(ordeID));
        OrderInfoProvider.SetOrderInfo(order);
    }