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