public async Task <SalesOrderDto> PlaceOrderAsync(string orderNumber) { // 1: get user and order var user = await GetCurrentUser(); if (user.PaymentProfile == null) { throw new NotFoundException("User payment profile not found."); } var order = await _salesOrderRepository.GetOrderByNumberAsync(orderNumber); if (order == null) { throw new NotFoundException("Order not found."); } // 3. Place order order.PlaceOrder(); await _salesOrderRepository.SaveAsync(); // 4. send payment request var url = string.Format(_paymentProcessConfigs.PostPaymentUrl, _paymentProcessConfigs.RootUrl); var headers = new List <(string, string)> { PaymentHelper.GetAuthorizationHeader(_paymentProcessConfigs.PaymentPasscode) }; var body = PaymentHelper.PostPaymentRequestBody( order.OrderNumber, order.AmountTotal, user.PaymentProfile.CustomerCode, user.PaymentProfile.PaymentToken ); var paymentResponse = await HttpRequestHelper.PostAsync(url, headers, body); if (paymentResponse.StatusCode != HttpStatusCode.OK) { throw new OrderActiveException(await paymentResponse.Content.ReadAsStringAsync()); } var tansctionMeta = await paymentResponse.Content.ReadAsStringAsync(); PaymentProcessingResponseDto tansctionDto = JsonConvert.DeserializeObject <PaymentProcessingResponseDto>(tansctionMeta); // 4. Active Order ActiveOrder(tansctionDto, tansctionMeta, order); await _salesOrderRepository.SaveAsync(); // 4. async send bambora request return(Mapper.Map <SalesOrderDto>(order)); }
private void ActiveOrder(PaymentProcessingResponseDto tansctionDto, string tansctionMeta, Order order) { // 4. Active Order if (!Enum.TryParse(tansctionDto.Type, out TransactionTypeEnum transactionType)) { transactionType = TransactionTypeEnum.Unknown; // TODO: should throw exception? //throw new OrderValidationException("Transaction Type invalide."); } if (!DateTime.TryParse(tansctionDto.Created, out DateTime transactionCreateTime)) { transactionCreateTime = DateTime.UtcNow; // TODO: should throw exception? //throw new OrderValidationException("Transaction time invalide."); } order.ActiveOrder( tansctionDto.Id, tansctionDto.Approved == "1", transactionType, transactionCreateTime, tansctionMeta ); }