public FastPayment GetFastPayment(
     OrderRegistrationResponseDTO orderRegistrationResponseDto,
     DateTime creationDate,
     Guid fastPaymentGuid,
     decimal orderSum,
     int externalId,
     FastPaymentPayType payType,
     Order order        = null,
     string phoneNumber = null,
     int?onlineOrderId  = null)
 {
     return(new FastPayment
     {
         Amount = orderSum,
         CreationDate = creationDate,
         Order = order,
         Ticket = orderRegistrationResponseDto.Ticket,
         QRPngBase64 = orderRegistrationResponseDto.QRPngBase64,
         ExternalId = externalId,
         PhoneNumber = phoneNumber,
         FastPaymentGuid = fastPaymentGuid,
         OnlineOrderId = onlineOrderId,
         FastPaymentPayType = payType
     });
 }
        public void SaveNewTicketForOrder(
            OrderRegistrationResponseDTO orderRegistrationResponseDto,
            int orderId,
            Guid fastPaymentGuid,
            FastPaymentPayType payType,
            string phoneNumber = null)
        {
            Order order;
            var   creationDate = DateTime.Now;

            try
            {
                order = _orderRepository.GetOrder(_uow, orderId);
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"При загрузке заказа№ {orderId} произошла ошибка, записываю в файл...");
                CacheData(orderRegistrationResponseDto, orderId, creationDate, fastPaymentGuid, payType);
                return;
            }

            var fastPayment = _fastPaymentApiFactory.GetFastPayment(
                orderRegistrationResponseDto,
                creationDate,
                fastPaymentGuid,
                order.OrderSum,
                orderId,
                payType,
                order,
                phoneNumber);

            fastPayment.SetProcessingStatus();

            try
            {
                Save(fastPayment);
            }
            catch (Exception e)
            {
                _logger.LogError(e, "При сохранении платежа произошла ошибка, записываю в файл...");
                CacheData(orderRegistrationResponseDto, orderId, creationDate, fastPaymentGuid, payType);
            }
        }
        private void CacheData(
            OrderRegistrationResponseDTO orderRegistrationResponseDto,
            int orderId,
            DateTime creationDate,
            Guid fastPaymentGuid,
            FastPaymentPayType payType)
        {
            var fastPaymentDTO = new FastPaymentDTO
            {
                OrderId            = orderId,
                CreationDate       = creationDate,
                Ticket             = orderRegistrationResponseDto.Ticket,
                QRPngBase64        = orderRegistrationResponseDto.QRPngBase64,
                ExternalId         = orderId,
                FastPaymentGuid    = fastPaymentGuid,
                FastPaymentPayType = payType
            };

            _fastPaymentFileCache.WritePaymentCache(fastPaymentDTO);
        }
        public void SaveNewTicketForOnlineOrder(
            OrderRegistrationResponseDTO orderRegistrationResponseDto,
            Guid fastPaymentGuid,
            int onlineOrderId,
            decimal onlineOrderSum,
            FastPaymentPayType payType)
        {
            var creationDate = DateTime.Now;

            var fastPayment = _fastPaymentApiFactory.GetFastPayment(
                orderRegistrationResponseDto,
                creationDate,
                fastPaymentGuid,
                onlineOrderSum,
                onlineOrderId,
                payType,
                null,
                null,
                onlineOrderId);

            fastPayment.SetProcessingStatus();

            Save(fastPayment);
        }
Exemple #5
0
        public async Task <QRResponseDTO> RegisterOrderForGetQR([FromBody] OrderDTO orderDto)
        {
            var orderId = orderDto.OrderId;

            _logger.LogInformation($"Поступил запрос отправки QR-кода для заказа №{orderId}");

            var response = new QRResponseDTO();
            var paramsValidationResult = _fastPaymentOrderModel.ValidateParameters(orderId);

            if (paramsValidationResult != null)
            {
                response.ErrorMessage = paramsValidationResult;
                return(response);
            }

            try
            {
                var fastPayments = _fastPaymentModel.GetAllPerformedOrProcessingFastPaymentsByOrder(orderId);

                if (fastPayments.Any())
                {
                    var fastPayment = fastPayments[0];

                    if (fastPayment.FastPaymentStatus == FastPaymentStatus.Performed)
                    {
                        response.FastPaymentStatus = FastPaymentStatus.Performed;
                        return(response);
                    }

                    if (fastPayment.FastPaymentStatus == FastPaymentStatus.Processing)
                    {
                        _logger.LogInformation($"Делаем запрос в банк, чтобы узнать статус оплаты сессии {fastPayment.Ticket}");
                        var orderInfoResponseDto = await _fastPaymentOrderModel.GetOrderInfo(fastPayment.Ticket);

                        if ((int)orderInfoResponseDto.Status != (int)fastPayment.FastPaymentStatus)
                        {
                            _fastPaymentModel.UpdateFastPaymentStatus(
                                fastPayment, orderInfoResponseDto.Status, orderInfoResponseDto.StatusDate);
                        }

                        if (orderInfoResponseDto.Status == FastPaymentDTOStatus.Performed)
                        {
                            response.FastPaymentStatus = FastPaymentStatus.Performed;
                            return(response);
                        }
                        if (orderInfoResponseDto.Status == FastPaymentDTOStatus.Processing)
                        {
                            response.QRCode            = fastPayment.QRPngBase64;
                            response.FastPaymentStatus = fastPayment.FastPaymentStatus;
                            return(response);
                        }
                    }
                }

                var order = _fastPaymentOrderModel.GetOrder(orderId);
                var orderValidationResult = _fastPaymentOrderModel.ValidateOrder(order, orderId);

                if (orderValidationResult != null)
                {
                    response.ErrorMessage = orderValidationResult;
                    return(response);
                }

                var fastPaymentGuid = Guid.NewGuid();
                OrderRegistrationResponseDTO orderRegistrationResponseDto = null;

                try
                {
                    _logger.LogInformation("Регистрируем заказ в системе эквайринга");
                    orderRegistrationResponseDto = await _fastPaymentOrderModel.RegisterOrder(order, fastPaymentGuid);

                    if (orderRegistrationResponseDto.ResponseCode != 0)
                    {
                        var message = $"При регистрации заказа {orderId} для отправки QR-кода в системе эквайринга произошла ошибка";
                        response.ErrorMessage = message;
                        _logger.LogError(message + $" Код ответа {orderRegistrationResponseDto.ResponseCode}\n" +
                                         $"{orderRegistrationResponseDto.ResponseMessage}");
                        return(response);
                    }
                }
                catch (Exception e)
                {
                    var message = $"При регистрации заказа {orderId} для отправки QR-кода в системе эквайринга произошла ошибка";
                    response.ErrorMessage = message;
                    _logger.LogError(e, message);
                    return(response);
                }

                _logger.LogInformation("Сохраняем новую сессию оплаты");
                _fastPaymentModel.SaveNewTicketForOrder(orderRegistrationResponseDto, orderId, fastPaymentGuid, FastPaymentPayType.ByQrCode);

                response.QRCode            = orderRegistrationResponseDto.QRPngBase64;
                response.FastPaymentStatus = FastPaymentStatus.Processing;
                return(response);
            }
            catch (Exception e)
            {
                response.ErrorMessage = e.Message;
                _logger.LogError(e, $"При регистрации заказа {orderId} с получением QR-кода произошла ошибка");
            }

            return(response);
        }
Exemple #6
0
        public async Task <ResponseRegisterOnlineOrderDTO> RegisterOnlineOrder(
            [FromBody] RequestRegisterOnlineOrderDTO requestRegisterOnlineOrderDto)
        {
            //Пока нет обновления сайта возвращаем ошибку
            return(new ResponseRegisterOnlineOrderDTO
            {
                ErrorMessage = "Функция не реализована"
            });

            var onlineOrderId  = requestRegisterOnlineOrderDto.OrderId;
            var onlineOrderSum = requestRegisterOnlineOrderDto.OrderSum;

            _logger.LogInformation($"Поступил запрос регистрации онлайн-заказа №{onlineOrderId}");

            var response = new ResponseRegisterOnlineOrderDTO();
            var paramsValidationResult =
                _fastPaymentOrderModel.ValidateParameters(
                    onlineOrderId,
                    requestRegisterOnlineOrderDto.BackUrl,
                    requestRegisterOnlineOrderDto.BackUrlOk,
                    requestRegisterOnlineOrderDto.BackUrlFail);

            if (paramsValidationResult != null)
            {
                response.ErrorMessage = paramsValidationResult;
                return(response);
            }

            try
            {
                var fastPayments =
                    _fastPaymentModel.GetAllPerformedOrProcessingFastPaymentsByOnlineOrder(onlineOrderId, onlineOrderSum);

                if (fastPayments.Any())
                {
                    var fastPayment = fastPayments[0];
                    var ticket      = fastPayment.Ticket;

                    if (fastPayment.FastPaymentStatus == FastPaymentStatus.Performed)
                    {
                        response.ErrorMessage = "Онлайн-заказ уже оплачен";
                        return(response);
                    }

                    if (fastPayment.FastPaymentStatus == FastPaymentStatus.Processing)
                    {
                        _logger.LogInformation($"Делаем запрос в банк, чтобы узнать статус оплаты сессии {ticket}");
                        try
                        {
                            var orderInfoResponseDto = await _fastPaymentOrderModel.GetOrderInfo(ticket);

                            if ((int)orderInfoResponseDto.Status != (int)fastPayment.FastPaymentStatus)
                            {
                                _fastPaymentModel.UpdateFastPaymentStatus(
                                    fastPayment, orderInfoResponseDto.Status, orderInfoResponseDto.StatusDate);
                            }

                            if (orderInfoResponseDto.Status == FastPaymentDTOStatus.Performed)
                            {
                                response.ErrorMessage = "Онлайн-заказ уже оплачен";
                                return(response);
                            }

                            if (orderInfoResponseDto.Status == FastPaymentDTOStatus.Processing)
                            {
                                _logger.LogInformation($"Отменяем платеж с сессией {ticket}");
                                _fastPaymentModel.UpdateFastPaymentStatus(fastPayment, FastPaymentDTOStatus.Rejected, DateTime.Now);
                            }
                        }
                        catch (Exception e)
                        {
                            response.ErrorMessage = "При получении информации об оплате из банка или обновлении статуса платежа произошла ошибка";
                            _logger.LogError(
                                e,
                                $"При получении информации об оплате из банка {ticket} или обновлении статуса платежа произошла ошибка");
                            return(response);
                        }
                    }
                }

                var orderValidationResult = _fastPaymentOrderModel.ValidateOnlineOrder(onlineOrderSum);

                if (orderValidationResult != null)
                {
                    response.ErrorMessage = orderValidationResult;
                    return(response);
                }

                var fastPaymentGuid = Guid.NewGuid();
                OrderRegistrationResponseDTO orderRegistrationResponseDto = null;

                try
                {
                    _logger.LogInformation($"Регистрируем онлайн-заказ {onlineOrderId} в системе эквайринга");
                    orderRegistrationResponseDto = await _fastPaymentOrderModel.RegisterOnlineOrder(requestRegisterOnlineOrderDto);

                    if (orderRegistrationResponseDto.ResponseCode != 0)
                    {
                        var message = $"При регистрации онлайн-заказа {onlineOrderId} в системе эквайринга произошла ошибка";
                        response.ErrorMessage = message;
                        _logger.LogError(message + $" Код ответа {orderRegistrationResponseDto.ResponseCode}\n" +
                                         $"{orderRegistrationResponseDto.ResponseMessage}");
                        return(response);
                    }
                }
                catch (Exception e)
                {
                    var message = $"При регистрации онлайн-заказа {onlineOrderId} в системе эквайринга произошла ошибка";
                    response.ErrorMessage = message;
                    _logger.LogError(e, message);
                    return(response);
                }

                _logger.LogInformation($"Сохраняем новую сессию оплаты для онлайн-заказа №{onlineOrderId}");
                try
                {
                    _fastPaymentModel.SaveNewTicketForOnlineOrder(orderRegistrationResponseDto, fastPaymentGuid, onlineOrderId, onlineOrderSum, FastPaymentPayType.ByQrCode);
                }
                catch (Exception e)
                {
                    var message = $"При сохранении новой сессии оплаты для онлайн-заказа {onlineOrderId} произошла ошибка";
                    response.ErrorMessage = message;
                    _logger.LogError(e, message);
                    return(response);
                }

                response.PayUrl = _fastPaymentOrderModel.GetPayUrlForOnlineOrder(fastPaymentGuid);
            }
            catch (Exception e)
            {
                response.ErrorMessage = e.Message;
                _logger.LogError(e, $"При регистрации онлайн-заказа {onlineOrderId} произошла ошибка");
            }

            return(response);
        }
Exemple #7
0
        public async Task <FastPaymentResponseDTO> RegisterOrder(int orderId, string phoneNumber, bool isQr)
        {
            _logger.LogInformation($"Поступил запрос на отправку платежа с данными orderId: {orderId}, phoneNumber: {phoneNumber}");

            var response = new FastPaymentResponseDTO();
            var paramsValidationResult = _fastPaymentOrderModel.ValidateParameters(orderId, ref phoneNumber);

            if (paramsValidationResult != null)
            {
                response.ErrorMessage = paramsValidationResult;
                return(response);
            }

            phoneNumber = $"+7{phoneNumber}";
            try
            {
                var fastPayments = _fastPaymentModel.GetAllPerformedOrProcessingFastPaymentsByOrder(orderId);

                if (fastPayments.Any())
                {
                    var fastPayment = fastPayments[0];
                    var ticket      = fastPayment.Ticket;

                    if (fastPayment.FastPaymentStatus == FastPaymentStatus.Performed)
                    {
                        response.FastPaymentStatus = FastPaymentStatus.Performed;
                        return(response);
                    }

                    if (fastPayment.FastPaymentStatus == FastPaymentStatus.Processing)
                    {
                        _logger.LogInformation($"Делаем запрос в банк, чтобы узнать статус оплаты сессии {ticket}");
                        var orderInfoResponseDto = await _fastPaymentOrderModel.GetOrderInfo(ticket);

                        if ((int)orderInfoResponseDto.Status != (int)fastPayment.FastPaymentStatus)
                        {
                            _fastPaymentModel.UpdateFastPaymentStatus(
                                fastPayment, orderInfoResponseDto.Status, orderInfoResponseDto.StatusDate);
                        }

                        if (orderInfoResponseDto.Status == FastPaymentDTOStatus.Performed)
                        {
                            response.FastPaymentStatus = FastPaymentStatus.Performed;
                            return(response);
                        }
                        if (orderInfoResponseDto.Status == FastPaymentDTOStatus.Processing)
                        {
                            _logger.LogInformation($"Отменяем платеж с сессией {ticket}");
                            _fastPaymentModel.UpdateFastPaymentStatus(fastPayment, FastPaymentDTOStatus.Rejected, DateTime.Now);
                        }
                    }
                }

                var order = _fastPaymentOrderModel.GetOrder(orderId);
                var orderValidationResult = _fastPaymentOrderModel.ValidateOrder(order, orderId);

                if (orderValidationResult != null)
                {
                    response.ErrorMessage = orderValidationResult;
                    return(response);
                }

                var fastPaymentGuid = Guid.NewGuid();
                OrderRegistrationResponseDTO orderRegistrationResponseDto = null;

                try
                {
                    _logger.LogInformation("Регистрируем заказ в системе эквайринга");
                    orderRegistrationResponseDto = await _fastPaymentOrderModel.RegisterOrder(order, fastPaymentGuid, phoneNumber, isQr);

                    if (orderRegistrationResponseDto.ResponseCode != 0)
                    {
                        var message = $"При регистрации заказа {orderId} в системе эквайринга произошла ошибка";
                        response.ErrorMessage = message;
                        _logger.LogError(message + $" Код ответа {orderRegistrationResponseDto.ResponseCode}\n" +
                                         $"{orderRegistrationResponseDto.ResponseMessage}");
                        return(response);
                    }
                }
                catch (Exception e)
                {
                    var message = $"При регистрации заказа {orderId} в системе эквайринга произошла ошибка";
                    response.ErrorMessage = message;
                    _logger.LogError(e, message);
                    return(response);
                }

                _logger.LogInformation("Сохраняем новую сессию оплаты");
                var payType = isQr ? FastPaymentPayType.ByQrCode : FastPaymentPayType.ByCard;
                _fastPaymentModel.SaveNewTicketForOrder(orderRegistrationResponseDto, orderId, fastPaymentGuid, payType, phoneNumber);

                response.Ticket            = orderRegistrationResponseDto.Ticket;
                response.FastPaymentGuid   = fastPaymentGuid;
                response.FastPaymentStatus = FastPaymentStatus.Processing;
            }
            catch (Exception e)
            {
                response.ErrorMessage = e.Message;
                _logger.LogError(e, $"При регистрации заказа {orderId} произошла ошибка");
            }

            return(response);
        }