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
     });
 }
Exemple #4
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 #5
0
 public Task <OrderRegistrationResponseDTO> RegisterOnlineOrder(RequestRegisterOnlineOrderDTO registerOnlineOrderDto)
 {
     return(_orderRequestManager.RegisterOnlineOrder(registerOnlineOrderDto));
 }