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