예제 #1
0
        public IActionResult ReceivePayment([FromForm] PaidOrderDTO paidOrderDto)
        {
            _logger.LogInformation("Пришел ответ об успешной оплате");
            PaidOrderInfoDTO paidOrderInfoDto = null;

            try
            {
                _logger.LogInformation("Парсим и получаем объект PaidOrderInfoDTO из ответа");
                paidOrderInfoDto = _fastPaymentOrderModel.GetPaidOrderInfo(paidOrderDto.xml);
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Ошибка при парсинге ответа по успешной оплате");
                return(StatusCode(500));
            }

            try
            {
                _logger.LogInformation("Проверяем подпись");
                if (!_fastPaymentModel.ValidateSignature(paidOrderInfoDto))
                {
                    var signature   = paidOrderInfoDto.Signature;
                    var orderNumber = paidOrderInfoDto.OrderNumber;
                    _logger.LogError($"Ответ по оплате заказа №{orderNumber} пришел с неверной подписью {signature}");

                    try
                    {
                        _fastPaymentOrderModel.NotifyEmployee(orderNumber, signature);
                    }
                    catch (Exception e)
                    {
                        _logger.LogError(e, "Не удалось уведомить пользователя о неверной подписи оплаты");
                    }

                    return(new BadRequestResult());
                }

                _logger.LogInformation($"Обновляем статус оплаты платежа с ticket: {paidOrderInfoDto.Ticket}");
                _fastPaymentModel.UpdateFastPaymentStatus(paidOrderInfoDto);
            }
            catch (Exception e)
            {
                _logger.LogError(e,
                                 $"Ошибка при обработке поступившего платежа (ticket: {paidOrderInfoDto.Ticket}, status: {paidOrderInfoDto.Status})");
                return(StatusCode(500));
            }

            try
            {
                _logger.LogInformation($"Уведомляем водителя о изменении статуса оплаты заказа: {paidOrderInfoDto.OrderNumber}");
                _driverApiService.NotifyOfFastPaymentStatusChangedAsync(int.Parse(paidOrderInfoDto.OrderNumber));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Не удалось уведомить службу DriverApi об изменении статуса оплаты заказа");
            }
            return(new AcceptedResult());
        }
        public void UpdateFastPaymentStatus(PaidOrderInfoDTO paidOrderInfoDto)
        {
            var fastPayment = _fastPaymentRepository.GetFastPaymentByTicket(_uow, paidOrderInfoDto.Ticket);

            if (fastPayment != null && (int)paidOrderInfoDto.Status != (int)fastPayment.FastPaymentStatus)
            {
                UpdateFastPaymentStatus(fastPayment, paidOrderInfoDto.Status, paidOrderInfoDto.StatusDate);
            }
        }
 public SignatureParams GetSignatureParamsForValidate(PaidOrderInfoDTO paidOrderInfoDto)
 {
     return(new SignatureParams
     {
         OrderId = paidOrderInfoDto.OrderNumber,
         OrderSumInKopecks = paidOrderInfoDto.Amount,
         ShopId = paidOrderInfoDto.ShopId,
         Sign = _signatureSection.GetValue <string>("AvSign")
     });
 }
        public bool ValidateSignature(PaidOrderInfoDTO paidOrderInfoDto)
        {
            var signatureParameters = _fastPaymentApiFactory.GetSignatureParamsForValidate(paidOrderInfoDto);

            return(_signatureManager.Validate(paidOrderInfoDto.Signature, signatureParameters));
        }