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); }
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); }
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); }
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); }