public IActionResult PDTHandler()
 {
     if (_webHelper.QueryString <string>("FawryRefNo") != null)
     {
         var MerchantRefNo = Convert.ToInt16(_webHelper.QueryString <string>("MerchantRefNo"));
         var order         = _orderService.GetOrderById(MerchantRefNo);
         var OrderStatus   = _webHelper.QueryString <string>("OrderStatus");
         var FawryRefNo    = _webHelper.QueryString <string>("FawryRefNo");
         if (order != null && OrderStatus != null && FawryRefNo != null)
         {
             if (OrderStatus == "NEW")
             {
                 return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id }));
             }
             else if (OrderStatus == "EXPIRED")
             {
                 _orderProcessingService.CancelOrder(order, false);
             }
             else if (OrderStatus == "PAID")
             {
                 _orderProcessingService.MarkOrderAsPaid(order);
             }
         }
     }
     else
     {
         var MerchantRefNo = Convert.ToInt16(_webHelper.QueryString <string>("merchantRefNum"));
         var order         = _orderService.GetOrderById(MerchantRefNo);
         _orderProcessingService.CancelOrder(order, false);
     }
     return(RedirectToAction("Index", "Home", new { area = "" }));
 }
Esempio n. 2
0
        public List <OrderError> SetOrdersStatusCanceled(int[] ordersId, string usernameOrEmail, string userPassword)
        {
            CheckAccess(usernameOrEmail, userPassword);

            if (!_permissionSettings.Authorize(StandardPermissionProvider.ManageOrders))
            {
                throw new ApplicationException("Not allowed to manage orders");
            }

            var errors = new List <OrderError>();

            foreach (var order in GetOrderCollection(ordersId))
            {
                try
                {
                    _orderProcessingService.CancelOrder(order, true);
                }
                catch (Exception ex)
                {
                    throw new ApplicationException(ex.Message);
                }
            }

            return(errors);
        }
        /// <summary>
        /// Cancel Order
        /// </summary>
        /// <returns>Return to either homepage or order details page</returns>
        public IActionResult CancelOrder()
        {
            var orderReferenceId = _webHelper.QueryString <string>("reference_id");

            if (!(_paymentPluginManager.LoadPluginBySystemName("Payments.Sezzle") is SezzlePaymentProcessor processor) || !_paymentPluginManager.IsPluginActive(processor))
            {
                throw new NopException("Sezzle Standard module cannot be loaded");
            }

            Guid orderNumberGuid = Guid.Empty;

            try
            {
                orderNumberGuid = new Guid(orderReferenceId);
            }
            catch
            {
                return(RedirectToAction("Index", "Home", new { area = string.Empty }));
            }

            var order = _orderService.GetOrderByGuid(orderNumberGuid);

            if (order == null)
            {
                return(RedirectToAction("Index", "Home", new { area = string.Empty }));
            }
            else if (_orderProcessingService.CanCancelOrder(order))
            {
                _orderProcessingService.CancelOrder(order, true);
                return(RedirectToRoute("OrderDetails", new { orderId = order.Id }));
            }

            return(RedirectToAction("Index", "Home", new { area = string.Empty }));
        }
Esempio n. 4
0
        private void UpdateOrderStatus(Order order, string status)
        {
            status = status.ToLower();

            switch (status)
            {
            case "failed":
            case "revoked":
            {
                //mark order as canceled
                if ((order.PaymentStatus == PaymentStatus.Paid || order.PaymentStatus == PaymentStatus.Authorized) &&
                    _orderProcessingService.CanCancelOrder(order))
                {
                    _orderProcessingService.CancelOrder(order, true);
                }
            }
            break;

            case "ok":
            {
                //mark order as paid
                if (_orderProcessingService.CanMarkOrderAsPaid(order) && status.ToUpper() == "PAID")
                {
                    _orderProcessingService.MarkOrderAsPaid(order);
                }
            }
            break;
            }
        }
Esempio n. 5
0
        public IActionResult CancelOrder(int id)
        {
            if (!IsRequestAuthorized())
            {
                return(Unauthorized());
            }

            if (id <= 0)
            {
                return(Error(HttpStatusCode.BadRequest, "id", "invalid id"));
            }

            var orderToCancel = _orderApiService.GetOrderById(id);

            if (orderToCancel == null)
            {
                return(Error(HttpStatusCode.NotFound, "order", "not found"));
            }

            _orderProcessingService.CancelOrder(orderToCancel, false);

            var ordersRootObject  = new OrdersRootObject();
            var cancelledOrderDto = _dtoHelper.PrepareOrderDTO(orderToCancel);

            ordersRootObject.Orders.Add(cancelledOrderDto);
            var json = _jsonFieldsSerializer.Serialize(ordersRootObject, string.Empty);

            return(new RawJsonActionResult(json));
        }
 /// <summary>
 /// Cancel
 /// </summary>
 /// <param name="order">Order</param>
 private void MarkOrderAsCancelled(Core.Domain.Orders.Order order)
 {
     if (_orderProcessingService.CanCancelOrder(order))
     {
         _orderProcessingService.CancelOrder(order, true);
     }
 }
        public IActionResult CancelOrder()
        {
            var order = _orderService.SearchOrders(storeId: _storeContext.CurrentStore.Id,
                                                   customerId: _workContext.CurrentCustomer.Id, pageSize: 1).FirstOrDefault();
            Order cancelOrder = null;

            if (order != null)
            {
                cancelOrder = _orderService.GetOrderByGuid(order.OrderGuid);

                /*if (Guid.TryParse(order.Id, out Guid orderGuid))
                 * {
                 *  cancelOrder = _orderService.GetOrderByGuid(orderGuid);
                 * }*/
                if (cancelOrder != null)
                {
                    if (_orderProcessingService.CanCancelOrder(cancelOrder))
                    {
                        _orderProcessingService.CancelOrder(cancelOrder, false);
                    }
                }
                return(RedirectToRoute("OrderDetails", new { orderId = order.Id }));
            }

            return(RedirectToRoute("HomePage"));
        }
Esempio n. 8
0
 public virtual void Execute()
 {
     try
     {
         var orderList = _orderService.SearchOrders();
         foreach (var item in orderList)
         {
             if (item.OrderStatus == OrderStatus.Pending && DateTime.UtcNow.AddDays(-7) > item.CreatedOnUtc)
             {
                 var order = _orderService.GetOrderById(item.Id);
                 if (order != null)
                 {
                     _orderProcessingService.CancelOrder(order, true);
                 }
             }
         }
     }
     catch (Exception exc)
     {
         _logger.Error(string.Format("Error cancleorder. {0}", exc.Message), exc);
     }
     finally
     {
         //queuedEmail.SentTries = queuedEmail.SentTries + 1;
         //_queuedEmailService.UpdateQueuedEmail(queuedEmail);
     }
 }
Esempio n. 9
0
        public ActionResult IPNHandler(FormCollection form)
        {
            var processor = GetPaymentProcessor();
            TransactionStatus txnStatus;

            if (processor.VerifyIpn(form, out txnStatus))
            {
                var val = GetValue(Constants.OK_INVOICE_KEY, form);
                int orderId;
                if (!String.IsNullOrEmpty(val) && Int32.TryParse(val, out orderId))
                {
                    var order = _orderService.GetOrderById(orderId);

                    if (_orderProcessingService.CanMarkOrderAsPaid(order) && txnStatus == TransactionStatus.Completed)
                    {
                        _orderProcessingService.MarkOrderAsPaid(order);
                    }
                    else if ((order.PaymentStatus == PaymentStatus.Paid ||
                              order.PaymentStatus == PaymentStatus.Authorized) &&
                             _orderProcessingService.CanCancelOrder(order) && txnStatus != TransactionStatus.Completed)
                    {
                        _orderProcessingService.CancelOrder(order, true);
                    }

                    var sb = new StringBuilder();
                    sb.AppendLine("OkPay IPN:");
                    sb.Append(PreparationOrderNote(form));
                    sb.AppendLine("New transaction status: " + txnStatus);

                    order.OrderNotes.Add(new OrderNote
                    {
                        Note = sb.ToString(),
                        DisplayToCustomer = false,
                        CreatedOnUtc      = DateTime.UtcNow
                    });
                    _orderService.UpdateOrder(order);
                }
                else
                {
                    var sb = new StringBuilder();
                    sb.AppendLine("OkPay error: failed order identifier");
                    sb.AppendLine("Transaction status: " + txnStatus);
                    sb.Append(PreparationOrderNote(form));
                    _logger.Error("OkPay IPN failed.", new NopException(sb.ToString()));
                }
            }
            else
            {
                var sb = new StringBuilder();
                sb.AppendLine("Transaction status: " + txnStatus);
                sb.Append(PreparationOrderNote(form));
                _logger.Error("OkPay IPN failed.", new NopException(sb.ToString()));
            }

            return(Content(""));
        }
Esempio n. 10
0
        public async Task <IActionResult> CancelOrder([FromBody] OrderModel model)
        {
            IAccessToken accessToken = await m_token_service.GetToken(model.Token);

            if (accessToken == null || accessToken.HasExpired)
            {
                return(Forbid());
            }

            model.Customer = accessToken.User;
            await m_order_processing.CancelOrder(model);

            return(Ok());
        }
Esempio n. 11
0
        private ActionResult UpdateOrderStatus(Order order, string status)
        {
            status = status.ToUpper();
            var textToResponse = "Your order has been paid";

            switch (status)
            {
            case "CANCELED":
            {
                //mark order as canceled
                if ((order.PaymentStatus == PaymentStatus.Paid || order.PaymentStatus == PaymentStatus.Authorized) &&
                    _orderProcessingService.CanCancelOrder(order))
                {
                    _orderProcessingService.CancelOrder(order, true);
                }

                textToResponse = "Your order has been canceled";
            }
            break;

            case "AUTHORIZED":
            {
                //mark order as authorized
                if (_orderProcessingService.CanMarkOrderAsAuthorized(order))
                {
                    _orderProcessingService.MarkAsAuthorized(order);
                }
                textToResponse = "Your order has been authorized";
            }
            break;

            case "PAID":
            {
                //mark order as paid
                if (_orderProcessingService.CanMarkOrderAsPaid(order) && status.ToUpper() == "PAID")
                {
                    _orderProcessingService.MarkOrderAsPaid(order);
                }
            }
            break;

            default:
            {
                return(GetResponse("Unsupported status"));
            }
            }

            return(GetResponse(textToResponse, true));
        }
Esempio n. 12
0
        //NOP 3.823
        public ActionResult Cancel(int orderId)
        {
            var order = _orderService.GetOrderById(orderId);

            if (order == null || order.Deleted || _workContext.CurrentCustomer.Id != order.CustomerId)
            {
                return(new HttpUnauthorizedResult());
            }

            //Add some more validation check
            if (_orderProcessingService.CanCancelOrder(order))
            {
                _orderProcessingService.CancelOrder(order, true);
            }
            return(RedirectToRoute("CustomerOrders"));
        }
Esempio n. 13
0
        public ActionResult CancelOrder(FormCollection form)
        {
            if (_monerisStandardPaymentSettings.ReturnFromMonerisWithoutPaymentRedirectsToOrderDetailsPage)
            {
                var order = _orderService.SearchOrders(storeId: _storeContext.CurrentStore.Id,
                                                       customerId: _workContext.CurrentCustomer.Id, pageSize: 1)
                            .FirstOrDefault();
                if (order != null)
                {
                    _orderProcessingService.CancelOrder(order, false);
                    return(RedirectToRoute("OrderDetails", new { orderId = order.Id }));
                }
            }

            return(RedirectToAction("Index", "Home", new { area = "" }));
        }
Esempio n. 14
0
        private void OrderCanceled(Order order)
        {
            if (_orderProcessingService.CanCancelOrder(order))
            {
                _orderProcessingService.CancelOrder(order, false);
            }

            order.OrderNotes.Add(new OrderNote
            {
                Note = $"Order id {order.Id}. PayU order canceled.",
                DisplayToCustomer = false,
                CreatedOnUtc      = DateTime.UtcNow
            });

            _orderService.UpdateOrder(order);
        }
Esempio n. 15
0
        // customer can cancel order from his account 11-6-2018
        public ActionResult Cancel(int orderId)
        {
            var order = _orderService.GetOrderById(orderId);

            //I comment this two lines
            if (order == null || order.Deleted || _workContext.CurrentCustomer.Id != order.CustomerId)
            {
                return(Challenge());
            }

            //Add some more validation check
            if (_orderProcessingService.CanCancelOrder(order))
            {
                _orderProcessingService.CancelOrder(order, true);
            }
            return(RedirectToRoute("CustomerOrders"));
        }
Esempio n. 16
0
        //My account / Order details page / Cancel Unpaid Order
        public virtual async Task <IActionResult> CancelOrder(string orderId)
        {
            var order = await _orderService.GetOrderById(orderId);

            if (order == null || order.PaymentStatus != Core.Domain.Payments.PaymentStatus.Pending ||
                (order.ShippingStatus != ShippingStatus.ShippingNotRequired && order.ShippingStatus != ShippingStatus.NotYetShipped) ||
                order.OrderStatus != OrderStatus.Pending ||
                order.Deleted || _workContext.CurrentCustomer.Id != order.CustomerId ||
                !_orderSettings.UserCanCancelUnpaidOrder)
            {
                return(Challenge());
            }

            await _orderProcessingService.CancelOrder(order, true, true);

            return(RedirectToRoute("OrderDetails", new { orderId = orderId }));
        }
        private void ProcessOrderStateChangeNotification(string xmlData)
        {
            try
            {
                var changeOrder = (OrderStateChangeNotification)EncodeHelper.Deserialize(xmlData, typeof(OrderStateChangeNotification));

                FinancialOrderState orderState = changeOrder.newfinancialorderstate;
                Order order = GetMerchantOrderByGoogleOrderId(changeOrder.googleordernumber);
                if (order != null)
                {
                    string message = string.Format("Order status {0} from Google: Order Number {1}", orderState, changeOrder.googleordernumber);
                    LogMessage(message);

                    //add a note
                    order.OrderNotes.Add(new OrderNote()
                    {
                        Note         = message,
                        CreatedOnUtc = DateTime.UtcNow
                    });
                    _orderService.UpdateOrder(order);

                    if (orderState == FinancialOrderState.CHARGING ||
                        orderState == FinancialOrderState.REVIEWING)
                    {
                    }

                    if (orderState == FinancialOrderState.CHARGEABLE)
                    {
                        _orderProcessingService.MarkAsAuthorized(order);
                    }
                    if (orderState == FinancialOrderState.CHARGED)
                    {
                        _orderProcessingService.MarkOrderAsPaid(order);
                    }
                    if (orderState == FinancialOrderState.CANCELLED || orderState == FinancialOrderState.CANCELLED_BY_GOOGLE)
                    {
                        _orderProcessingService.CancelOrder(order, true);
                    }
                }
            }
            catch (Exception exc)
            {
                LogMessage("processOrderStateChangeNotification Exception: " + exc.Message + ": " + exc.StackTrace);
            }
        }
Esempio n. 18
0
        public void ProcessPostBackModel(PostBackModel model)
        {
            if (model == null)
            {
                return;
            }

            var orderId = GetOrderId(model.ORDERID);

            var requestFields      = new SortedDictionary <string, string>();
            var keyValueCollection = (Request.RequestType == "POST") ? Request.Form : Request.QueryString;

            var sb = new StringBuilder("Ogone Postback Fields:\r\n");

            foreach (string key in keyValueCollection)
            {
                if (!key.ToUpper().Equals("SHASIGN"))
                {
                    requestFields.Add(key, keyValueCollection[key]);
                }

                sb.AppendFormat("{0}={1};\r\n", key, keyValueCollection[key]);
            }

            var order = _orderService.GetOrderById(orderId);

            if (order == null)
            {
                _logger.InsertLog(LogLevel.Error, "Invalid order id", string.Format("Ogone Postback Error. Order id {0} not found.", orderId));
                return;
            }

            AddOrderNote(order, sb.ToString(), false);

            var processor =
                _paymentService.LoadPaymentMethodBySystemName("Payments.Ogone") as OgonePaymentProcessor;

            if (processor == null || !processor.IsPaymentMethodActive(_paymentSettings) || !processor.PluginDescriptor.Installed)
            {
                throw new NopException("Ogone Payment module cannot be loaded");
            }

            if (processor.VerifyHashDigest(requestFields, model.SHASIGN) == false)
            {
                AddOrderNote(order, "Ogone Postback Error. SHA-digest verification failed", false);
                return;
            }

            var paymentStatus = OgoneHelper.GetPaymentStatus(model.STATUS.ToString(), model.NCERROR);

            switch (paymentStatus)
            {
            case PaymentStatus.Authorized:
                if (_orderProcessingService.CanMarkOrderAsAuthorized(order))
                {
                    _orderProcessingService.MarkAsAuthorized(order);
                }
                break;

            case PaymentStatus.Paid:
                if (_orderProcessingService.CanMarkOrderAsPaid(order))
                {
                    _orderProcessingService.MarkOrderAsPaid(order);
                }
                break;

            case PaymentStatus.Pending:
                break;

            case PaymentStatus.Voided:
                if (_orderProcessingService.CanCancelOrder(order))
                {
                    _orderProcessingService.CancelOrder(order, notifyCustomer: true);
                }
                break;
            }
        }
Esempio n. 19
0
        public IActionResult s2sHandler()
        {
            string errorCode = "", errorDesc = "";

            string strRequest = Request.QueryString.ToString().Replace("?", "");
            Dictionary <string, string> values;

            var processor = _paymentPluginManager.LoadPluginBySystemName("Payments.GestPay") as GestPayPaymentProcessor;

            if (processor == null ||
                !_paymentPluginManager.IsPluginActive(processor))
            {
                throw new NopException("GestPay module cannot be loaded");
            }

            processor.GetResponseDetails(strRequest, out values);
            if (values != null && values.Count > 0)
            {
                if (values.Count == 4)
                {
                    return(RedirectToRoute("Plugin.Payments.GestPay.AcceptPaymenyByLink", new { a = values["a"], status = values["Status"], paymentId = values["paymentID"], paymentToken = values["paymentToken"] }));
                }

                var    shopLogin = values["a"];
                var    encString = values["b"];
                string shopTransactionId = "", authorizationCode = "", bankTransactionId = "";
                string transactionResult = "", buyerName = "", buyerEmail = "", riskified = "", authorizationcode = "", threeDSAuthenticationLevel = "";

                var acceptedThreeDSAuthLevels = new List <string> {
                    "1H", "1F", "2F", "2C", "2E"
                };
                var checkAmount = decimal.Zero;

                var sb = new StringBuilder();
                sb.AppendLine("GestPay s2s:");

                if (processor.IsShopLoginChecked(shopLogin) && encString != null)
                {
                    var endpoint   = _gestPayPaymentSettings.UseSandbox ? WSCryptDecryptSoapClient.EndpointConfiguration.WSCryptDecryptSoap12Test : WSCryptDecryptSoapClient.EndpointConfiguration.WSCryptDecryptSoap12;
                    var objDecrypt = new WSCryptDecryptSoapClient(endpoint);

                    string xmlResponse = objDecrypt.DecryptAsync(shopLogin, encString, _gestPayPaymentSettings.ApiKey).Result.OuterXml;

                    XmlDocument XMLReturn = new XmlDocument();
                    XMLReturn.LoadXml(xmlResponse.ToLower());

                    //_logger.Information(xmlResponse.ToLower());

                    //Id transazione inviato
                    errorCode = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/errorcode")?.InnerText;
                    errorDesc = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/errordescription")?.InnerText;
                    //authorizationCode = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/authorizationcode")?.InnerText;
                    shopTransactionId = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/shoptransactionid")?.InnerText;

                    //_____ Messaggio OK _____//
                    if (errorCode == "0")
                    {
                        //Codice autorizzazione
                        authorizationCode = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/authorizationcode")?.InnerText;
                        //Codice transazione
                        bankTransactionId = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/banktransactionid")?.InnerText;
                        //Ammontare della transazione
                        var amount = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/amount")?.InnerText;
                        //Risultato transazione
                        transactionResult = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/transactionresult")?.InnerText;
                        //Nome dell'utente
                        buyerName = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/buyer/buyername")?.InnerText;
                        //Email utilizzata nella transazione
                        buyerEmail = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/buyer/buyeremail")?.InnerText;

                        //__________ ?validare il totale? __________//
                        riskified = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/riskresponsedescription")?.InnerText;

                        //  3DS authentication level (1H,1F,2F,2C,2E)
                        threeDSAuthenticationLevel = XMLReturn.SelectSingleNode("/gestpaycryptdecrypt/threeds/authenticationresult/authenticationlevel")?.InnerText?.ToUpper();

                        try
                        {
                            checkAmount = decimal.Parse(amount, new CultureInfo("en-US"));
                        }
                        catch (Exception exc)
                        {
                            _logger.Error("GestPay s2s. Error getting Amount", exc);
                        }
                        sb.AppendLine("GestPay success.");
                    }
                    else
                    {
                        sb.AppendLine("GestPay failed.");
                        _logger.Error("GestPay S2S. Transaction not found", new NopException(sb.ToString()));
                    }
                }

                //________ Inizio composizione messaggio dal server _________//
                foreach (var kvp in values)
                {
                    sb.AppendLine(kvp.Key + ": " + kvp.Value);
                }

                //Recupero lo stato del pagamento
                var newPaymentStatus = GestPayHelper.GetPaymentStatus(transactionResult, "");
                sb.AppendLine("New payment status: " + newPaymentStatus);
                sb.AppendLine("Riskified = " + riskified);
                sb.AppendLine("3DS Level = " + threeDSAuthenticationLevel);

                //Cerco di recuperare l'ordine
                var orderNumberGuid = Guid.Empty;
                try
                {
                    orderNumberGuid = new Guid(shopTransactionId);
                }
                catch { }

                var order = _orderService.GetOrderByGuid(orderNumberGuid);
                //_________ aggiorno lo stato dell'ordine _________//
                if (order != null)
                {
                    switch (newPaymentStatus)
                    {
                    case PaymentStatus.Pending:
                    {
                    }
                    break;

                    case PaymentStatus.Authorized:
                    {
                        if (_orderProcessingService.CanMarkOrderAsAuthorized(order))
                        {
                            _orderProcessingService.MarkAsAuthorized(order);
                        }
                    }
                    break;

                    case PaymentStatus.Paid:
                    {
                        if (_orderProcessingService.CanMarkOrderAsPaid(order))
                        {
                            order.AuthorizationTransactionId   = bankTransactionId;
                            order.AuthorizationTransactionCode = authorizationCode;
                            _orderService.UpdateOrder(order);

                            if (!_gestPayPaymentSettings.EnableGuaranteedPayment || acceptedThreeDSAuthLevels.Contains(threeDSAuthenticationLevel))
                            {
                                _orderProcessingService.MarkOrderAsPaid(order);
                            }
                        }
                    }
                    break;

                    case PaymentStatus.Refunded:
                    {
                        if (_orderProcessingService.CanRefundOffline(order))
                        {
                            _orderProcessingService.RefundOffline(order);
                        }
                    }
                    break;

                    case PaymentStatus.Voided:
                    {
                        /*_ Visto che non si può impostare il pagamento ad Annullato
                         * _orderProcessingService.CanVoidOffline allora cancello l'ordine.
                         * C'è da decidere se avvisare o meno l'utente _*/
                        if (_orderProcessingService.CanCancelOrder(order))
                        {
                            _orderProcessingService.CancelOrder(order, true);
                        }
                    }
                    break;
                    }

                    //__________________ salvo i valori restituiti __________________//
                    sb.AppendLine("GestPay response:");
                    //Codice Errore
                    sb.AppendLine("ErrorCode: " + errorCode);
                    //Descrizione Errore
                    sb.AppendLine("ErrorDesc: " + errorDesc);
                    sb.AppendLine("TrxResult: " + transactionResult);
                    sb.AppendLine("BankTrxID: " + bankTransactionId);
                    sb.AppendLine("AuthCode: " + authorizationCode);
                    sb.AppendLine("Amount: " + checkAmount);
                    if (!Math.Round(checkAmount, 2).Equals(Math.Round(order.OrderTotal, 2)))
                    {
                        //__________ ?validare il totale? __________//
                        sb.AppendLine(String.Format("Amount difference: {0}-{1}", Math.Round(checkAmount, 2), Math.Round(order.OrderTotal, 2)));
                    }
                    sb.AppendLine("BuyerName: " + buyerName);
                    sb.AppendLine("BuyerEmail: " + buyerEmail);

                    //Inserisco la nota sull'ordine
                    var orderNote = new OrderNote
                    {
                        OrderId           = order.Id,
                        Note              = sb.ToString(),
                        DisplayToCustomer = false,
                        CreatedOnUtc      = DateTime.UtcNow
                    };
                    _orderService.InsertOrderNote(orderNote);
                }
                else
                {
                    _logger.Error("GestPay S2S. Order is not found", new NopException(sb.ToString()));
                }
            }
            else
            {
                _logger.Error("GestPay S2S failed.", new NopException(strRequest));
            }

            //_________ Imposto il risultato __________//
            var s2SResponse = "KO";

            if (errorCode == "0")
            {
                s2SResponse = "OK";
            }
            //nothing should be rendered to visitor
            return(Content(String.Format("<html>{0}</html>", s2SResponse)));
        }
Esempio n. 20
0
        public ActionResult PayGateReturnHandler(FormCollection form)
        {
            string[] keys = Request.Form.AllKeys;
            String   transaction_status      = "";
            String   pay_request_id          = "";
            String   transaction_status_desc = "";
            Order    order        = _orderService.GetOrderById(Int32.Parse(Request.QueryString["pgnopcommerce"]));
            var      sBuilder     = new StringBuilder();
            var      query_status = PaymentStatus.Pending;

            for (int i = 0; i < keys.Length; i++)
            {
                if (keys[i] == "TRANSACTION_STATUS")
                {
                    transaction_status = Request.Form[keys[i]];
                }

                if (keys[i] == "PAY_REQUEST_ID")
                {
                    pay_request_id = Request.Form[keys[i]];
                }
            }

            using (var client = new System.Net.WebClient())
            {
                var queryData = new NameValueCollection();
                queryData["PAYGATE_ID"]     = _payGatePaymentSettings.PayGateID;
                queryData["PAY_REQUEST_ID"] = pay_request_id;
                queryData["REFERENCE"]      = Request.QueryString["pgnopcommerce"];
                string queryValues = string.Join("", queryData.AllKeys.Select(key => queryData[key]));
                queryData["CHECKSUM"] = new PayGateHelper().CalculateMD5Hash(queryValues + _payGatePaymentSettings.EncryptionKey);
                var response = client.UploadValues("https://secure.paygate.co.za/payweb3/query.trans", queryData);

                var responseString = Encoding.Default.GetString(response);
                if (responseString != null)
                {
                    Dictionary <string, string> dict =
                        responseString.Split('&')
                        .Select(x => x.Split('='))
                        .ToDictionary(y => y[0], y => y[1]);

                    try
                    {
                        String trans_id          = dict["TRANSACTION_STATUS"].ToString();
                        String query_status_desc = "";
                        switch (trans_id)
                        {
                        case "1":
                            query_status      = PaymentStatus.Paid;
                            query_status_desc = "Approved";
                            break;

                        case "2":
                            query_status_desc = "Declined";
                            break;

                        case "4":
                            query_status_desc = "Cancelled By Customer with back button on payment page";
                            break;

                        case "0":
                            query_status_desc = "Not Done";
                            break;

                        default:
                            break;
                        }

                        sBuilder.AppendLine("PayGate Query Data");
                        sBuilder.AppendLine("=======================");
                        sBuilder.AppendLine("PayGate Transaction_Id: " + dict["TRANSACTION_ID"]);
                        sBuilder.AppendLine("PayGate Status Desc: " + query_status_desc);
                        sBuilder.AppendLine("");
                    } catch (Exception e)
                    {
                        sBuilder.AppendLine("PayGate Query Data");
                        sBuilder.AppendLine("=======================");
                        sBuilder.AppendLine("PayGate Query Response: " + responseString);
                        sBuilder.AppendLine("");
                    }
                }
            }

            var new_payment_status = PaymentStatus.Pending;

            switch (transaction_status)
            {
            case "1":
                new_payment_status      = PaymentStatus.Paid;
                transaction_status_desc = "Approved";
                break;

            case "2":
                transaction_status_desc = "Declined";
                break;

            case "4":
                transaction_status_desc = "Cancelled By Customer with back button on payment page";
                break;

            case "0":
                transaction_status_desc = "Not Done";
                break;

            default:
                break;
            }

            sBuilder.AppendLine("PayGate Return Data");
            sBuilder.AppendLine("=======================");
            sBuilder.AppendLine("PayGate PayRequestId: " + pay_request_id);
            sBuilder.AppendLine("PayGate Status Desc: " + transaction_status_desc);

            //order note
            order.OrderNotes.Add(new OrderNote
            {
                Note = sBuilder.ToString(),//sbbustring.Format("Order status has been changed to {0}", PaymentStatus.Paid),
                DisplayToCustomer = false,
                CreatedOnUtc      = DateTime.UtcNow
            });


            _orderService.UpdateOrder(order);
            //load settings for a chosen store scope
            var storeScope             = this.GetActiveStoreScopeConfiguration(_storeService, _workContext);
            var payGatePaymentSettings = _settingService.LoadSetting <PayGatePaymentSettings>(storeScope);

            //mark order as paid
            if (query_status == PaymentStatus.Paid)
            {
                if (_orderProcessingService.CanMarkOrderAsPaid(order))
                {
                    order.AuthorizationTransactionId = pay_request_id;
                    _orderService.UpdateOrder(order);

                    _orderProcessingService.MarkOrderAsPaid(order);
                }
                return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id }));
            }
            else if (new_payment_status == PaymentStatus.Paid)
            {
                if (_orderProcessingService.CanMarkOrderAsPaid(order))
                {
                    order.AuthorizationTransactionId = pay_request_id;
                    _orderService.UpdateOrder(order);

                    _orderProcessingService.MarkOrderAsPaid(order);
                }
                return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id }));
            }
            else
            {
                order.AuthorizationTransactionId = pay_request_id;
                OrderNote _note = new OrderNote();
                _note.CreatedOnUtc      = DateTime.Now;
                _note.DisplayToCustomer = true;
                _note.Note = "Payment failed with the following description: " + transaction_status_desc;
                _orderProcessingService.CancelOrder(order, false);
                order.OrderNotes.Add(_note);
                _orderService.UpdateOrder(order);
                return(RedirectToAction(order.Id.ToString().Trim(), "orderdetails"));
            }
            //return RedirectToAction("Index", "Home", new { area = "" });
        }
        public ActionResult Return()
        {
            var processor = _paymentPluginManager.LoadPluginBySystemName("Payments.Paytm") as PaytmPaymentProcessor;

            if (processor == null ||
                !_paymentPluginManager.IsPluginActive(processor) || !processor.PluginDescriptor.Installed)
            {
                throw new NopException("Paytm module cannot be loaded");
            }


            var    myUtility = new PaytmHelper();
            string orderId, amount, authDesc, resCode;
            bool   checkSumMatch = false;

            //Assign following values to send it to verifychecksum function.
            if (String.IsNullOrWhiteSpace(_paytmPaymentSettings.MerchantKey))
            {
                throw new NopException("Paytm key is not set");
            }

            string workingKey    = _paytmPaymentSettings.MerchantKey;
            string paytmChecksum = null;

            Dictionary <string, string> parameters = new Dictionary <string, string>();

            if (Request.Form.Keys.Count > 0)
            {
                foreach (string key in Request.Form.Keys)
                {
                    if (Request.Form[key].Contains("|"))
                    {
                        parameters.Add(key.Trim(), "");
                    }
                    else
                    {
                        parameters.Add(key.Trim(), Request.Form[key]);
                    }
                }

                if (parameters.ContainsKey("CHECKSUMHASH"))
                {
                    paytmChecksum = parameters["CHECKSUMHASH"];
                    parameters.Remove("CHECKSUMHASH");
                }
                if (!string.IsNullOrEmpty(paytmChecksum) && paytm.CheckSum.verifyCheckSum(workingKey, parameters, paytmChecksum))
                {
                    checkSumMatch = true;
                }
            }

            orderId  = parameters["ORDERID"];
            amount   = parameters["TXNAMOUNT"];
            resCode  = parameters["RESPCODE"];
            authDesc = parameters["STATUS"];

            var order = _orderService.GetOrderById(Convert.ToInt32(orderId));

            if (checkSumMatch == true)
            {
                if (resCode == "01" && authDesc == "TXN_SUCCESS")
                {
                    if (TxnStatus(orderId, order.OrderTotal.ToString("0.00")))
                    {
                        if (_orderProcessingService.CanMarkOrderAsPaid(order))
                        {
                            _orderProcessingService.MarkOrderAsPaid(order);
                        }
                        return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id }));
                    }
                    else
                    {
                        return(Content("Amount Mismatch"));
                    }
                }
                else if (authDesc == "TXN_FAILURE")
                {
                    _orderProcessingService.CancelOrder(order, false);
                    order.OrderStatus = OrderStatus.Cancelled;
                    _orderService.UpdateOrder(order);
                    return(RedirectToRoute("OrderDetails", new { orderId = order.Id }));
                }
                else
                {
                    return(Content("Security Error. Illegal access detected"));
                }
            }
            else if (string.IsNullOrEmpty(paytmChecksum))
            {
                return(Content("Please Contact Customer Care"));
            }
            else
            {
                return(Content("Security Error. Illegal access detected, Checksum failed"));
            }
        }
        //public IActionResult PayGateNotifyHandler(IFormCollection form)
        public void PayGateNotifyHandler(IFormCollection form)
        {
            /**
             * Enable IPN if it is set
             */
            if (_payGatePaymentSettings.EnableIpn)
            {
                Response.WriteAsync("OK");

                var  reference = Request.Query["pgnopcommerce"];
                bool isPaid;

                _logger.Information("PayGateNotifyHandler start. Order no.: " + reference);

                //var order = _orderService.GetOrderById(Int32.Parse(Request.Query["pgnopcommerce"]));
                var order = _orderService.GetOrderById(Int32.Parse(Request.Form["USER1"]));
                _logger.Information("PayGateNotifyHandler: Order Payment Status: " + order.PaymentStatus);

                isPaid = order.PaymentStatus == PaymentStatus.Paid ? true : false;

                if (!isPaid)
                {
                    var sBuilder          = new StringBuilder();
                    var query_status      = PaymentStatus.Pending;
                    var payrequestId      = "";
                    var transactionStatus = "";

                    var testMode      = _payGatePaymentSettings.TestMode;
                    var paygateId     = "10011072130";
                    var encryptionKey = "secret";
                    if (!testMode)
                    {
                        paygateId     = _payGatePaymentSettings.PayGateID;
                        encryptionKey = _payGatePaymentSettings.EncryptionKey;
                    }

                    //Validate checksum for the posted form fields
                    var      formData   = new NameValueCollection();
                    var      formDataJS = "";
                    string[] keys       = Request.Form.Keys.ToArray();
                    for (int i = 0; i < keys.Length; i++)
                    {
                        formData[keys[i]] = Request.Form[keys[i]];
                        formDataJS       += keys[i] + "=" + formData[keys[i]] + "&";
                    }

                    _logger.Information("PayGateNotifyHandler: POST: " + formDataJS);

                    var checksum    = formData["CHECKSUM"];
                    var checkstring = "";
                    for (var i = 0; i < formData.Count - 1; i++)
                    {
                        checkstring += formData[i];
                    }
                    checkstring += encryptionKey;

                    var ourChecksum = new PayGateHelper().CalculateMD5Hash(checkstring);
                    if (ourChecksum.Equals(checksum, StringComparison.OrdinalIgnoreCase))
                    {
                        var trans_status = formData["TRANSACTION_STATUS"];
                        transactionStatus = trans_status;
                        var query_status_desc = "";
                        payrequestId = formData["PAY_REQUEST_ID"];
                        switch (trans_status)
                        {
                        case "1":
                            query_status      = PaymentStatus.Paid;
                            query_status_desc = "Approved";
                            break;

                        case "2":
                            query_status      = PaymentStatus.Voided;
                            query_status_desc = "Declined";
                            break;

                        case "4":
                            query_status      = PaymentStatus.Voided;
                            query_status_desc = "Cancelled By Customer with back button on payment page";
                            break;

                        case "0":
                            query_status      = PaymentStatus.Voided;
                            query_status_desc = "Not Done";
                            break;

                        default:
                            break;
                        }

                        sBuilder.AppendLine("PayGate Notify Handler");
                        sBuilder.AppendLine("PayGate Query Data");
                        sBuilder.AppendLine("=======================");
                        sBuilder.AppendLine("PayGate Transaction_Id: " + formData["TRANSACTION_ID"]);
                        sBuilder.AppendLine("PayGate Status Desc: " + query_status_desc);
                        sBuilder.AppendLine("");

                        //order note
                        order.OrderNotes.Add(new OrderNote
                        {
                            Note = sBuilder.ToString(),//sbbustring.Format("Order status has been changed to {0}", PaymentStatus.Paid),
                            DisplayToCustomer = false,
                            CreatedOnUtc      = DateTime.UtcNow
                        });

                        _orderService.UpdateOrder(order);

                        //load settings for a chosen store scope
                        var storeScope             = this.GetActiveStoreScopeConfiguration(_storeService, _workContext);
                        var payGatePaymentSettings = _settingService.LoadSetting <PayGatePaymentSettings>(storeScope);

                        //mark order as paid
                        if (query_status == PaymentStatus.Paid)
                        {
                            if (_orderProcessingService.CanMarkOrderAsPaid(order))
                            {
                                order.AuthorizationTransactionId = payrequestId;
                                _orderService.UpdateOrder(order);

                                _orderProcessingService.MarkOrderAsPaid(order);
                            }
                            RedirectToRoute("CheckoutCompleted", new { orderId = order.Id });
                        }
                        else
                        {
                            order.AuthorizationTransactionId = payrequestId;
                            OrderNote note = new OrderNote();
                            note.CreatedOnUtc      = DateTime.Now;
                            note.DisplayToCustomer = true;
                            note.Note = "Payment failed with the following description: " + transactionStatus;
                            if (_orderProcessingService.CanCancelOrder(order))
                            {
                                _orderProcessingService.CancelOrder(order, false);
                            }
                            order.OrderNotes.Add(note);
                            _orderService.UpdateOrder(order);

                            RedirectToRoute("OrderDetails", new { orderId = order.Id.ToString().Trim() });
                        }
                    }
                    else
                    {
                        _logger.Error("PayGateNotifyHandler: Checksum mismatch: " + ourChecksum + " : " + checksum);
                    }
                }
            }
        }
Esempio n. 23
0
        public IActionResult QuickCheckoutWebhook()
        {
            try
            {
                //validate request
                var isValid = _serviceManager.ValidateWebhookRequest(Request.Form);
                if (!isValid)
                {
                    return(BadRequest());
                }

                var orderGuid = Guid.Parse(Request.Form["transaction_id"]);
                var order     = _orderService.GetOrderByGuid(orderGuid);
                if (order == null && _serviceManager.GetPaymentFlowType() == PaymentFlowType.Inline)
                {
                    //order isn't placed
                    //try save the Skrill transaction_id for further processing

                    if (int.TryParse(Request.Form["nop_customer_id"].ToString(), out var customerId))
                    {
                        var customer = _customerService.GetCustomerById(customerId);
                        if (customer != null)
                        {
                            //status 2 - payment transaction was successful
                            if (Request.Form["status"].ToString().ToLower() == "2" && Request.Form.TryGetValue("mb_transaction_id", out var transactionId))
                            {
                                _genericAttributeService.SaveAttribute(customer, Defaults.PaymentTransactionIdAttribute, transactionId.ToString());
                            }
                        }
                    }
                }
                else
                {
                    if (order == null)
                    {
                        return(Ok());
                    }

                    //add order note
                    var details = Request.Form.Aggregate(string.Empty, (message, parameter) => $"{message}{parameter.Key}: {parameter.Value}; ");
                    _orderService.InsertOrderNote(new OrderNote
                    {
                        OrderId           = order.Id,
                        Note              = $"Webhook details: {Environment.NewLine}{details}",
                        DisplayToCustomer = false,
                        CreatedOnUtc      = DateTime.UtcNow
                    });

                    //check transaction status
                    switch (Request.Form["status"].ToString().ToLower())
                    {
                    //order cancelled
                    case "-3":
                    case "-2":
                    case "-1":
                        if (Enum.TryParse <FailedReasonCode>(Request.Form["failed_reason_code"], out var failedReason))
                        {
                            _orderService.InsertOrderNote(new OrderNote
                            {
                                OrderId           = order.Id,
                                Note              = $"Order cancelled. Reason: {failedReason}",
                                DisplayToCustomer = false,
                                CreatedOnUtc      = DateTime.UtcNow
                            });
                        }
                        if (_orderProcessingService.CanCancelOrder(order))
                        {
                            _orderProcessingService.CancelOrder(order, true);
                        }
                        break;

                    //order pending
                    case "0":
                        order.OrderStatus = OrderStatus.Pending;
                        _orderService.UpdateOrder(order);
                        _orderProcessingService.CheckOrderStatus(order);
                        break;

                    //order processed
                    case "2":
                        if (_orderProcessingService.CanMarkOrderAsPaid(order))
                        {
                            if (Request.Form.TryGetValue("mb_transaction_id", out var transactionId))
                            {
                                order.CaptureTransactionId = transactionId;
                            }
                            _orderService.UpdateOrder(order);
                            _orderProcessingService.MarkOrderAsPaid(order);
                        }
                        break;
                    }
                }
            }
            catch { }

            return(Ok());
        }
Esempio n. 24
0
        public ActionResult Return()
        {
            var processor = _paymentService.LoadPaymentMethodBySystemName("Payments.IpayAfrica") as IpayAfricaPaymentProcessor;

            if (processor == null ||
                !_paymentService.IsPaymentMethodActive(processor) || !processor.PluginDescriptor.Installed)
            {
                throw new NopException("IpayAfrica module cannot be loaded");
            }


            var    myUtility = new IpayAfricaHelper();
            string orderId, Amount, AuthDesc, ResCode;
            bool   checkSumMatch = false;

            //Assign following values to send it to verifychecksum function.
            if (String.IsNullOrWhiteSpace(_IpayAfricaPaymentSettings.MerchantKey))
            {
                throw new NopException("IpayAfrica key is not set");
            }

            string workingKey         = _IpayAfricaPaymentSettings.MerchantKey;
            string IpayAfricaChecksum = null;
            string transactinon_code  = HttpContext.Request.Query["txncd"];
            string qwh = HttpContext.Request.Query["qwh"];
            string afd = HttpContext.Request.Query["afd"];
            string agt = HttpContext.Request.Query["agt"];
            string uyt = HttpContext.Request.Query["uyt"];
            string ifd = HttpContext.Request.Query["ifd"];
            string poi = HttpContext.Request.Query["poi"];
            string returned_order_id      = HttpContext.Request.Query["id"];
            string returned_order_invoice = HttpContext.Request.Query["ivm"];
            string status       = HttpContext.Request.Query["status"];
            string paid_total   = HttpContext.Request.Query["mc"] + "00";
            string p1           = HttpContext.Request.Query["p1"];
            string p2           = HttpContext.Request.Query["p2"];
            string p3           = HttpContext.Request.Query["p3"];
            string p4           = HttpContext.Request.Query["p4"];
            string msisdn_id    = HttpContext.Request.Query["msisdn_id"];
            string msisdn_idnum = HttpContext.Request.Query["msisdn_idnum"];
            string channel      = HttpContext.Request.Query["channel"];
            string hash_id      = HttpContext.Request.Query["hsh"];

            Dictionary <string, string> parameters = new Dictionary <string, string>();

            Dictionary <string, string> parameters1 = new Dictionary <string, string>
            {
                ["txncd"]        = transactinon_code,
                ["qwh"]          = qwh,
                ["afd"]          = afd,
                ["poi"]          = poi,
                ["uyt"]          = uyt,
                ["ifd"]          = ifd,
                ["agt"]          = agt,
                ["id"]           = returned_order_id,
                ["status"]       = status,
                ["ivm"]          = returned_order_invoice,
                ["mc"]           = paid_total,
                ["p1"]           = p1,
                ["p2"]           = p2,
                ["p3"]           = p3,
                ["p4"]           = p4,
                ["msisdn_id"]    = p1,
                ["msisdn_idnum"] = p2,
                ["channel"]      = p3,
                ["p4"]           = p4,
                ["hsh"]          = HttpContext.Request.Query["hsh"]
            };

            var    live           = "1";
            string key            = _IpayAfricaPaymentSettings.MerchantKey;
            var    storeLocation  = _webHelper.GetStoreLocation();
            string vendor_id      = _IpayAfricaPaymentSettings.MerchantId;
            string currency       = p3;
            string customer_email = p1;
            string mobile_number  = msisdn_idnum;
            string callback_url   = p2;
            string email_notify   = "1";
            string curl           = p4;

            if (mobile_number.Length > 10)
            {
                mobile_number = mobile_number.Remove(0, 3).Insert(0, "0");
            }

            string datastring = live.ToString() + returned_order_id + returned_order_invoice + paid_total + mobile_number + customer_email + vendor_id + currency + p1 + p2 + p3 + p4 + callback_url + email_notify + curl;

            byte[] keyByte      = new ASCIIEncoding().GetBytes(key);
            byte[] messageBytes = new ASCIIEncoding().GetBytes(datastring);
            byte[] hashmessage  = new HMACSHA1(keyByte).ComputeHash(messageBytes);
            String.Concat(Array.ConvertAll(hashmessage, x => x.ToString("x2")));
            string hash_message = String.Concat(Array.ConvertAll(hashmessage, x => x.ToString("x2")));

            if (hash_id != null)
            {
                IpayAfricaChecksum = hash_id;
            }
            if (IpayAfricaChecksum == String.Concat(Array.ConvertAll(hashmessage, x => x.ToString("x2"))))
            {
                checkSumMatch = true;
            }

            orderId  = returned_order_id;
            Amount   = HttpContext.Request.Query["mc"];
            ResCode  = returned_order_invoice;
            AuthDesc = status;

            var order = _orderService.GetOrderById(Convert.ToInt32(orderId));

            if (checkSumMatch == true)
            {
                if (AuthDesc == "aei7p7yrx4ae34")
                {
                    string ipnurl2 = "https://www.ipayafrica.com/ipn/?vendor=" + _IpayAfricaPaymentSettings.MerchantId + "&id=" + HttpContext.Request.Query["id"] + "&ivm=" + HttpContext.Request.Query["ivm"] + "&qwh=" + HttpContext.Request.Query["qwh"] + "&afd=" + HttpContext.Request.Query["afd"] + "&poi=" + HttpContext.Request.Query["poi"] + "&uyt=" + HttpContext.Request.Query["uyt"] + "&ifd=" + HttpContext.Request.Query["ifd"];

                    string html = string.Empty;
                    string url  = ipnurl2;

                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                        using (Stream stream = response.GetResponseStream())
                            using (StreamReader reader = new StreamReader(stream))
                            {
                                html = reader.ReadToEnd();
                            }
                    if (TxnStatus(orderId, order.OrderTotal.ToString("0.00")))
                    {
                        if (_orderProcessingService.CanMarkOrderAsPaid(order))
                        {
                            //order note
                            order.OrderNotes.Add(new OrderNote
                            {
                                Note = "Thank you for shopping with us. Your " + channel + " transaction was successful. Your transaction code was " + transactinon_code,
                                DisplayToCustomer = true,
                                CreatedOnUtc      = DateTime.UtcNow
                            });
                            //_orderService.UpdateOrder(order);
                            _orderProcessingService.MarkOrderAsPaid(order);
                        }
                        return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id }));
                    }
                    else
                    {
                        //order note
                        order.OrderNotes.Add(new OrderNote
                        {
                            Note = "Failed due to amount mismatch. Your attempt to pay via " + channel + " was successful. Your transaction code was " + transactinon_code,
                            DisplayToCustomer = true,
                            CreatedOnUtc      = DateTime.UtcNow
                        });
                        //_orderService.UpdateOrder(order);
                        return(Content("Amount Mismatch" + " " + html + " " + order.OrderTotal.ToString()));
                    }
                }
                else if (AuthDesc == "fe2707etr5s4wq")
                {
                    _orderProcessingService.CancelOrder(order, false);
                    order.OrderStatus = OrderStatus.Cancelled;
                    _orderService.UpdateOrder(order);
                    return(RedirectToRoute("OrderDetails", new { orderId = order.Id }));
                }
                else
                {
                    return(Content("Security Error. Illegal access detected. Please try again"));
                }
            }
            else if (string.IsNullOrEmpty(IpayAfricaChecksum))
            {
                return(Content("Please Contact Customer Care"));
            }
            else if (status == "dtfi4p7yty45wq")//less paid
            {
                return(Content("Payment Failed. You Paid less than what was requested"));
            }
            else if (status == "eq3i7p5yt7645e")//more paid
            {
                string ipnurl2 = "https://www.ipayafrica.com/ipn/?vendor=" + _IpayAfricaPaymentSettings.MerchantId + "&id=" + HttpContext.Request.Query["id"] + "&ivm=" + HttpContext.Request.Query["ivm"] + "&qwh=" + HttpContext.Request.Query["qwh"] + "&afd=" + HttpContext.Request.Query["afd"] + "&poi=" + HttpContext.Request.Query["poi"] + "&uyt=" + HttpContext.Request.Query["uyt"] + "&ifd=" + HttpContext.Request.Query["ifd"];

                string html = string.Empty;
                string url  = ipnurl2;

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    using (Stream stream = response.GetResponseStream())
                        using (StreamReader reader = new StreamReader(stream))
                        {
                            html = reader.ReadToEnd();
                        }
                //if (html.Contains("aei7p7yrx4ae34") || html.Contains("eq3i7p5yt7645e"))
                if (html.Contains("aei7p7yrx4ae34") || html.Contains("eq3i7p5yt7645e") && System.Convert.ToDecimal(paid_total) >= order.OrderTotal)
                {
                    if (_orderProcessingService.CanMarkOrderAsPaid(order))
                    {
                        //order note
                        order.OrderNotes.Add(new OrderNote
                        {
                            Note = "Thank you for shopping with us. Your " + channel + " transaction was successful. Your transaction code was " + transactinon_code,
                            DisplayToCustomer = true,
                            CreatedOnUtc      = DateTime.UtcNow
                        });
                        //_orderService.UpdateOrder(order);
                        _orderProcessingService.MarkOrderAsPaid(order);
                    }
                    return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id }));
                }
                else
                {
                    //order note
                    order.OrderNotes.Add(new OrderNote
                    {
                        Note = "Failed due to amount mismatch. You paid " + paid_total + " instead of " + order.OrderTotal + " via " + channel + " Your transaction code was " + transactinon_code,
                        DisplayToCustomer = true,
                        CreatedOnUtc      = DateTime.UtcNow
                    });
                    _orderService.UpdateOrder(order);
                    return(RedirectToRoute("OrderDetails", new { orderId = order.Id }));
                }
            }
            else if (status == "bdi6p2yy76etrs")//pending
            {
                return(RedirectToRoute("OrderDetails", new { orderId = order.Id }));
            }
            else if (status == "fe2707etr5s4wq")//failed
            {
                //return Content("Security Error. Illegal access detected, Checksum failed");
                if (_orderProcessingService.CanVoidOffline(order))
                {
                    _orderProcessingService.VoidOffline(order);
                }
                return(RedirectToRoute("OrderDetails", new { orderId = order.Id }));
            }
            else
            {
                string ipnurl2 = "https://www.ipayafrica.com/ipn/?vendor=" + _IpayAfricaPaymentSettings.MerchantId + "&id=" + HttpContext.Request.Query["id"] + "&ivm=" + HttpContext.Request.Query["ivm"] + "&qwh=" + HttpContext.Request.Query["qwh"] + "&afd=" + HttpContext.Request.Query["afd"] + "&poi=" + HttpContext.Request.Query["poi"] + "&uyt=" + HttpContext.Request.Query["uyt"] + "&ifd=" + HttpContext.Request.Query["ifd"];

                string html = string.Empty;
                string url  = ipnurl2;

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    using (Stream stream = response.GetResponseStream())
                        using (StreamReader reader = new StreamReader(stream))
                        {
                            html = reader.ReadToEnd();
                        }
                if (html.Contains("aei7p7yrx4ae34") || html.Contains("eq3i7p5yt7645e") && System.Convert.ToDecimal(paid_total) >= order.OrderTotal)
                {
                    if (_orderProcessingService.CanMarkOrderAsPaid(order))
                    {
                        //order note
                        order.OrderNotes.Add(new OrderNote
                        {
                            Note = "Thank you for shopping with us. Your " + channel + " transaction was successful. Your transaction code was " + transactinon_code,
                            DisplayToCustomer = true,
                            CreatedOnUtc      = DateTime.UtcNow
                        });
                        _orderProcessingService.MarkOrderAsPaid(order);
                    }
                    return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id }));
                }
                else
                {
                    //order note
                    order.OrderNotes.Add(new OrderNote
                    {
                        Note = "Failed due to amount mismatch. You paid " + paid_total + " instead of " + order.OrderTotal + " via " + channel + " Your transaction code was " + transactinon_code,
                        DisplayToCustomer = true,
                        CreatedOnUtc      = DateTime.UtcNow
                    });
                    return(RedirectToRoute("OrderDetails", new { orderId = order.Id }));
                }
            }
        }
Esempio n. 25
0
 /// <summary>
 /// Cancels order
 /// </summary>
 /// <param name="order">Order</param>
 /// <param name="notifyCustomer">True to notify customer</param>
 public void CancelOrder(Order order, bool notifyCustomer)
 {
     _orderProcessingService.CancelOrder(order, notifyCustomer);
 }