public PayByQRResponseDTO ConvertToPayByQRResponseDto(QRResponseDTO qrResponseDto)
 {
     return(new PayByQRResponseDTO
     {
         ErrorMessage = qrResponseDto.ErrorMessage,
         QRCode = qrResponseDto.QRCode,
         QRPaymentStatus = ConvertToAPIPaymentStatus(qrResponseDto.FastPaymentStatus)
     });
 }
Esempio n. 2
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);
        }