public async Task <ActionResult> Get([FromRoute] GetPaymentRequestModel requestModel) { if (!EnsureMerchantValidity(out var merchant)) { return(BadRequest(new ErrorResponseModel("missing or invalid merchant header"))); } _logger.LogInformation(requestModel.PaymentId.ToString()); var payment = await _paymentRepository.GetByPaymentIdAsync(requestModel.PaymentId); if (payment == null) { return(NotFound()); } // Protect against access of payment data from other merchants if (payment.MerchantId != merchant.MerchantId) { return(BadRequest(new ErrorResponseModel("Merchant mismatch"))); } var responseModel = new GetPaymentResponseModel { Payment = _modelMapper.MapPayment(payment) }; return(Ok(responseModel)); }
public async Task <GetPaymentResponseModel> GetPaymentRequestAsync(GetPaymentRequestModel requestModel) { var url = string.Format("{0}", requestModel.PaymentId); var responseRaw = await _httpClient.GetAsync(url).ConfigureAwait(false); // Possible improvement: Optimize resiliency with retry behavior if (!responseRaw.IsSuccessStatusCode) { var errorMessage = await TryGetErrorMessage(responseRaw).ConfigureAwait(false); throw new PaymentGatewayRequestException(responseRaw.StatusCode, responseRaw.ReasonPhrase, errorMessage); } var responseJson = await responseRaw.Content.ReadAsStringAsync().ConfigureAwait(false); var response = JsonSerializer.Deserialize <GetPaymentResponseModel>(responseJson); return(response); }