Beispiel #1
0
        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));
        }
Beispiel #2
0
        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
                );
        }