/// <summary>
 /// Handle order placed event
 /// </summary>
 /// <param name="order">Order</param>
 public void HandleOrderPlacedEvent(NopOrder order)
 {
     if (order != null)
     {
         ScreenOrder(order);
     }
 }
        /// <summary>
        /// Update order status
        /// </summary>
        /// <param name="order">NopCommerce order object</param>
        /// <param name="fraudLabsProStatus">FraudLAbs Pro status</param>
        public void UpdateOrerStatus(NopOrder order, string fraudLabsProStatus)
        {
            switch (fraudLabsProStatus)
            {
            case Order.Action.APPROVE:
                order.OrderStatusId = _fraudLabsProSettings.ApproveStatusID;
                break;

            case Order.Action.REJECT:
            case Order.Action.REJECT_BLACKLIST:
                order.OrderStatusId = _fraudLabsProSettings.RejectStatusID;
                break;
            }
            if (!string.IsNullOrEmpty(fraudLabsProStatus))
            {
                _orderService.UpdateOrder(order);
                _orderProcessingService.CheckOrderStatus(order);
            }
        }
        /// <summary>
        /// Screen an order transaction for payment fraud
        /// </summary>
        /// <param name="order">NopCommerce order object</param>
        /// <returns>OrderResult</returns>
        public OrderResult ScreenOrder(NopOrder order)
        {
            //whether plugin is configured
            if (string.IsNullOrEmpty(_fraudLabsProSettings.ApiKey))
            {
                throw new NopException($"Plugin not configured");
            }

            try
            {
                // Configure FraudLabs Pro API KEY
                FraudLabsProConfig.APIKey = _fraudLabsProSettings.ApiKey;

                var customer = _customerService.GetCustomerById(order.CustomerId);
                if (customer != null)
                {
                    var shippingAddress = _addressService.GetAddressById(order.ShippingAddressId ?? order.BillingAddressId);
                    var billingAddress  = _addressService.GetAddressById(order.BillingAddressId);

                    //prepare parameters
                    var screenOrderPara = new OrderPara();

                    //customer information
                    screenOrderPara.IPAddress    = customer.LastIpAddress ?? string.Empty;
                    screenOrderPara.FirstName    = ((billingAddress != null) ? billingAddress.FirstName : string.Empty) ?? string.Empty;
                    screenOrderPara.LastName     = ((billingAddress != null) ? billingAddress.LastName : string.Empty) ?? string.Empty;
                    screenOrderPara.UserPhone    = ((billingAddress != null) ? billingAddress.PhoneNumber : string.Empty) ?? string.Empty;
                    screenOrderPara.EmailAddress = ((billingAddress != null) ? billingAddress.Email : string.Empty) ?? string.Empty;
                    screenOrderPara.FLPCheckSum  = GetFLPCheckSum();

                    // Billing Information
                    if (billingAddress != null)
                    {
                        screenOrderPara.BillAddress = billingAddress.Address1 + " " + billingAddress.Address2;
                        screenOrderPara.BillCity    = billingAddress.City ?? string.Empty;
                        screenOrderPara.BillState   = _stateProvinceService.GetStateProvinceByAddress(billingAddress)?.Name ?? string.Empty;
                        screenOrderPara.BillCountry = _countryService.GetCountryByAddress(billingAddress)?.TwoLetterIsoCode ?? string.Empty;
                        screenOrderPara.BillZIPCode = billingAddress.ZipPostalCode ?? string.Empty;
                    }

                    // Shipping Information
                    if (shippingAddress != null)
                    {
                        screenOrderPara.ShippingAddress = shippingAddress.Address1 + " " + shippingAddress.Address2;
                        screenOrderPara.ShippingCity    = shippingAddress.City ?? string.Empty;
                        screenOrderPara.ShippingState   = _stateProvinceService.GetStateProvinceByAddress(shippingAddress)?.Name ?? string.Empty;
                        screenOrderPara.ShippingCountry = _countryService.GetCountryByAddress(shippingAddress)?.TwoLetterIsoCode ?? string.Empty;
                        screenOrderPara.ShippingZIPCode = shippingAddress.ZipPostalCode ?? string.Empty;
                    }

                    //Payment information
                    var cardNumber = _encryptionService.DecryptText(order.CardNumber);

                    if (!string.IsNullOrEmpty(cardNumber))
                    {
                        screenOrderPara.BinNo       = cardNumber.Substring(0, 6);
                        screenOrderPara.CardNumber  = cardNumber;
                        screenOrderPara.PaymentMode = Order.PaymentMethods.CREDIT_CARD;
                    }

                    // Order Information
                    screenOrderPara.Department    = _storeContext.CurrentStore.Name ?? string.Empty;
                    screenOrderPara.UserOrderID   = order.Id.ToString();
                    screenOrderPara.UserOrderMemo = order.OrderGuid.ToString();
                    screenOrderPara.Amount        = order.OrderTotal;
                    screenOrderPara.Quantity      = _orderService.GetOrderItems(order.Id).Sum(x => x.Quantity);
                    screenOrderPara.Currency      = order.CustomerCurrencyCode ?? string.Empty;

                    // ScreenOrder API
                    var screenOrder = new Order();
                    // Send order to FraudLabs Pro
                    var result = screenOrder.ScreenOrder(screenOrderPara);
                    _genericAttributeService.SaveAttribute(order, FraudLabsProDefaults.OrderResultAttribute, JsonConvert.SerializeObject(result));
                    _fraudLabsProSettings.Balance = result.FraudLabsProCredit;
                    _settingService.SaveSetting(_fraudLabsProSettings);

                    //save order status
                    _genericAttributeService.SaveAttribute(order, FraudLabsProDefaults.OrderStatusAttribute, result.FraudLabsProStatus);

                    UpdateOrerStatus(order, result.FraudLabsProStatus);

                    return(result);
                }
            }
            catch (Exception exception)
            {
                //log full error
                _logger.Error($"FraundLabs Pro ScreenOrder error: {exception.Message}.", exception, _workContext.CurrentCustomer);
            }
            return(null);
        }
Example #4
0
 public bool CanRePostProcessPayment(Nop.Core.Domain.Orders.Order order) => false;