public async Task <IActionResult> CreateOrder(CreateOrderRequestDto createOrderRequestDto) { return(Ok(await _mediator.Send(new CreateOrderCommand { CreateOrderRequestDto = createOrderRequestDto }))); }
public async Task <CreateOrderResponseDto> CreateOrderAsync(CreateOrderRequestDto order) { var uri = _baseUri + "/mpmobile/instore/qr/" + _userId + "/" + order.ExternalId + "?access_token=" + _accessToken; using (var client = new HttpClient()) { HttpContent content = new StringContent(System.Text.Json.JsonSerializer.Serialize(order), Encoding.UTF8, "application/json"); content.Headers.Add("X-Ttl-Store-Preference", _orderTimeoutSeconds.ToString()); HttpResponseMessage response = await client.PostAsync(uri, content); var responseText = await response.Content.ReadAsStringAsync(); var responseDto = JsonSerializer.Deserialize <CreateOrderResponseDto>(responseText); responseDto.Success = response.IsSuccessStatusCode; responseDto.Status = (int)response.StatusCode; responseDto.Content = responseText; responseDto.RequestUri = response.RequestMessage.RequestUri.OriginalString; return(responseDto); } }
public LhiActionResult <CreateOrderResponseDto> CreateOrder([FromBody] CreateOrderRequestDto orderRequest) { var transactionId = Guid.NewGuid().ToString(); var contractId = Guid.NewGuid().ToString(); var createOrderCommand = new CreateOrderCommand { TransactionId = transactionId, ContractId = contractId }; try { _endpoint.Send(createOrderCommand); } catch (Exception ex) { _logger.LogError(ex, "Could not send CreateOrderCommand to NServiceBus"); } // log info var format = "{Application}.{Service}.{Operation}-{TransactionId}: {LogMessage}"; var message = $"Step 0: CreateOrderCommand was sent with TransactionId {transactionId}"; //_logger.LogInformation(message, transactionId); _logger.LogInformation(format, "Lhi.NsbDemo.Orders", "Api", "OrderController-CreateOrder", transactionId, message); // instrumentation _promCounter.Labels(Environment.MachineName, "received").Inc(); LhiActionResult <CreateOrderResponseDto> responseMessage = new LhiActionResult <CreateOrderResponseDto>( new CreateOrderResponseDto { //TrackingId = createOrderCommand.TransactionId }); responseMessage.CustomResponseHeaders.Add("TrackingId", createOrderCommand.TransactionId); return(responseMessage); }
public async Task <TransactionResponse> ProcessTransactionAsync(TransactionRequest transaction) { if (transaction == null) { throw (new ArgumentNullException("transDef")); } if (!IsValidTransaction(transaction, out var errorList)) { return(new TransactionResponse(TransactionResponse.ResultCodesEnum.InvalidParametersError, errorList)); } var request = new CreateOrderRequestDto(transaction); var apiClient = await InitApiClient(transaction.MerchantId); if (apiClient is null) { return(new TransactionResponse(BaseResponse.ResultCodesEnum.NotReady, _errorList)); } CreateOrderResponseDto createResponse; try { createResponse = await apiClient.CreateOrderAsync(request); } catch (HttpRequestException e) { return(new TransactionResponse(TransactionResponse.ResultCodesEnum.CommunicationsError, "Error de comunicación con el host de MercardoPago: " + e.Message)); } if (!createResponse.Success) { if (createResponse.Status == 500) { return(new TransactionResponse(TransactionResponse.ResultCodesEnum.InternalProcessorError, "Error interno de MercadoPago durante CreatePayment: " + createResponse.ErrorMessage)); } else { return(new TransactionResponse(TransactionResponse.ResultCodesEnum.ProcessorError, "Error creando la orden: " + createResponse.ErrorMessage)); } } var timer = new Stopwatch(); SearchPaymentsResponseDto searchResponse = null; timer.Start(); while (timer.Elapsed < TimeSpan.FromSeconds(_orderTimeoutSeconds + 5)) { try { searchResponse = await apiClient.SearchPaymentAsync(transaction.TransactionReference); } catch (HttpRequestException e) { return(new TransactionResponse(TransactionResponse.ResultCodesEnum.CommunicationsError, "Error de comunicación con el host de MercardoPago durante SearchPayment: " + e.Message)); } if (!searchResponse.Success) { if (searchResponse.Status == 500) { return(new TransactionResponse(TransactionResponse.ResultCodesEnum.InternalProcessorError, "Error interno de MercadoPago durante SearchPayment: " + createResponse.ErrorMessage)); } else { return(new TransactionResponse(TransactionResponse.ResultCodesEnum.ProcessorError, "Error buscando la orden: " + searchResponse.ErrorMessage)); } } foreach (var payment in searchResponse.Payments) { if (payment.Payment_Status == "approved") { return(new TransactionResponse(TransactionResponse.ResultCodesEnum.Approved) { ResultDescription = "Transaccion Aprobada (" + payment.Payment_Status_Detail + ")", TotalPaid = payment.TotalPaidAmount, NetReceived = payment.NetReceivedAmount, AuthCode = payment.AuthCode, PaymentType = payment.PaymentType switch { "account_money" => PaymentType.AccountMoney, "credit_card" => PaymentType.CreditCard, "debit_card" => PaymentType.DebitCard, "bank_transfer" => PaymentType.BankTransfer, "atm" => PaymentType.Atm, "ticket" => PaymentType.Ticket, "prepaid_card" => PaymentType.PrepaidCard, _ => throw new NotImplementedException() }