public string Handle(PrepairGuestPaymentRequest command)
        {
            var duplicatePaymentAttempt = _paymentRequestRepository.GetByInvoiceId(command.InvoiceId).Result;

            if (duplicatePaymentAttempt != null && !string.IsNullOrWhiteSpace(duplicatePaymentAttempt.InvoiceId))
            {
                throw new Exception("Duplicate PaymentRequest Attempt, PaymentId with InvoiceId: " + command.InvoiceId + " already exists");
            }

            //Prepaire PaymentRequest with InvoiceId, Amount And Merchant Details
            var recipient      = _merchantQueries.GetById(command.RecipientMerchantId).Result;
            var paymentRequest = MapToPaymentRequest(command, recipient);

            //Save PaymentRequest
            _paymentRequestRepository.Add(paymentRequest).Wait();
            _paymentRequestRepository.Save().Wait();

            ///ToDo: Implement Retries and Auth to Endpoint
            ///MakePayment
            //var chargeResponse = await _chargeCard.Charge(chargeRequest);
            //if (chargeResponse.Success)
            //{
            //    payment.Succeed(chargeResponse.BankSimTransactionId);
            //    _paymentRepository.Save().Wait();
            //    //await _notifyMerchantPaymentSucceeded.Notify(command.InvoiceId, payment.PaymentId, recipient.MerchantId);
            //    //await _notifyCustomerByEmailPaymentSucceeded.Notify(command.SenderEmail, command.InvoiceId, payment.PaymentId, recipient.MerchantId);
            //}
            //else
            //{
            //    payment.Fail("return a reason from bank");
            //    _paymentRepository.Save().Wait();
            //}
            return(paymentRequest.PaymentRequestId);
        }
Ejemplo n.º 2
0
        public string PciDssCheckout(string invoiceId, string userId)
        {
            IdempotentVerificationCheck(invoiceId);
            var   checkout = _queryCheckoutApplicationService.GetCheckoutFromBasket(userId);
            var   orderId  = Guid.NewGuid().ToString();
            Order order    = new Order()
            {
                OrderId = orderId, InvoiceId = invoiceId, UserId = userId, Status = OrderStatus.Ordered, CurrencyCode = checkout.CurrencyCode, MerchantId = checkout.SellerMerchantId, OrderItems = checkout.CheckoutProductViewModels.ToList().Select(x => new OrderItem {
                    OrderItemId = Guid.NewGuid().ToString(), OrderId = orderId, Title = x.Title, Price = x.Price
                })
            };

            _orderRepository.Add(order);

            var dto = new PrepairGuestPaymentRequest()
            {
                InvoiceId = invoiceId, Amount = Convert.ToString(checkout.TotalCost), CurrencyCode = checkout.CurrencyCode, OrderId = order.OrderId, RecipientMerchantId = checkout.SellerMerchantId, UserId = userId
            };
            var response = _postToSecureHttpEndpointWithRetries.Post(apiClientUrl: "https://localhost:44379/prepairpayment", idServerUrl: "https://localhost:5001", "client", "secret", "CheckoutApi", dto);
            var deserialisedContentPaymentRequestId = response.Content.ReadAsStringAsync().Result;

            if (response.IsSuccessStatusCode)
            {
                order.Status = OrderStatus.Ordered;
                _orderRepository.Update(order);
            }

            return(deserialisedContentPaymentRequestId);
        }
 private PaymentRequest MapToPaymentRequest(PrepairGuestPaymentRequest command, Merchant recipient)
 {
     return(new PaymentRequest
     {
         PaymentRequestId = Guid.NewGuid().ToString(),
         InvoiceId = command.InvoiceId,
         MerchantId = recipient.MerchantId,
         Amount = command.Amount,
         CurrencyCode = command.CurrencyCode,
     });
 }
Ejemplo n.º 4
0
        public IActionResult Post([FromBody] PrepairGuestPaymentRequest command)
        {
            var paymentRequestId = _prepairPaymentCommandHandler.Handle(command);

            return(Created("https://localhost:44379/prepairpayment", paymentRequestId));
        }