public Task<OrderRegistrationResponseDTO> RegisterOnlineOrder(RequestRegisterOnlineOrderDTO registerOnlineOrderDto) { var orderDTO = GetOrderRegistrationRequestDTO(registerOnlineOrderDto); var xmlStringFromOrderDTO = _dtoManager.GetXmlStringFromDTO(orderDTO); return _orderService.RegisterOrderAsync(xmlStringFromOrderDTO); }
private OrderRegistrationRequestDTO GetOrderRegistrationRequestDTO(RequestRegisterOnlineOrderDTO registerOnlineOrderDto) { var signatureParameters = _fastPaymentApiFactory.GetSignatureParamsForRegisterOrder(registerOnlineOrderDto.OrderId, registerOnlineOrderDto.OrderSum); var signature = _signatureManager.GenerateSignature(signatureParameters); var orderRegistrationRequestDTO = _fastPaymentApiFactory.GetOrderRegistrationRequestDTOForOnlineOrder(registerOnlineOrderDto, signature); orderRegistrationRequestDTO.QRTtl = _fastPaymentParametersProvider.GetOnlinePayByQRLifetime; orderRegistrationRequestDTO.BackUrl = registerOnlineOrderDto.BackUrl; orderRegistrationRequestDTO.BackUrlOk = registerOnlineOrderDto.BackUrlOk; orderRegistrationRequestDTO.BackUrlFail = registerOnlineOrderDto.BackUrlFail; return orderRegistrationRequestDTO; }
public OrderRegistrationRequestDTO GetOrderRegistrationRequestDTOForOnlineOrder( RequestRegisterOnlineOrderDTO registerOnlineOrderDto, string signature) { return(new OrderRegistrationRequestDTO { ShopId = _signatureSection.GetValue <long>("ShopId"), ShopPasswd = _signatureSection.GetValue <string>("ShopPasswd"), Signature = signature, Amount = _orderSumConverter.ConvertOrderSumToKopecks(registerOnlineOrderDto.OrderSum), OrderNumber = registerOnlineOrderDto.OrderId.ToString(), OrderDescription = $"Онлайн-заказ №{registerOnlineOrderDto.OrderId}", Language = "RU", IsQR = 1, BackUrl = registerOnlineOrderDto.BackUrl, BackUrlOk = registerOnlineOrderDto.BackUrlOk, BackUrlFail = registerOnlineOrderDto.BackUrlFail }); }
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 Task <OrderRegistrationResponseDTO> RegisterOnlineOrder(RequestRegisterOnlineOrderDTO registerOnlineOrderDto) { return(_orderRequestManager.RegisterOnlineOrder(registerOnlineOrderDto)); }