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); }
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, }); }
public IActionResult Post([FromBody] PrepairGuestPaymentRequest command) { var paymentRequestId = _prepairPaymentCommandHandler.Handle(command); return(Created("https://localhost:44379/prepairpayment", paymentRequestId)); }