public override async Task <CreateStripePaymentIntentResponse> CreateStripePaymentIntent( CreateStripePaymentIntentRequest request, ServerCallContext context ) { var httpContext = context.GetHttpContext(); var paymentIntentService = new PaymentIntentService(); var options = new PaymentIntentCreateOptions { PaymentMethod = request.PaymentMethodId, Customer = httpContext.GetStripeCustomerId(), ReceiptEmail = httpContext.GetEmail(), Amount = request.Transaction.Currency.ToCents(), Currency = Options.Invoice.Currency, Metadata = new Dictionary <string, string> { ["UserId"] = httpContext.GetUserId(), ["TransactionId"] = request.Transaction.Id } }; var paymentIntent = await paymentIntentService.CreateAsync(options); var response = new CreateStripePaymentIntentResponse { ClientSecret = paymentIntent.ClientSecret }; var message = $"A new payment {paymentIntent.Id} for {paymentIntent.Amount} {paymentIntent.Currency} was created"; return(context.Ok(response, message)); }
public void Deposit_ShouldThrowRpcExceptionWithInternalStatus() { // Arrange var userId = new UserId(); const string email = "*****@*****.**"; var host = TestHost.WithClaimsFromBearerAuthentication(new Claim(JwtClaimTypes.Subject, userId.ToString()), new Claim(JwtClaimTypes.Email, email)); var client = new PaymentService.PaymentServiceClient(host.CreateChannel()); var request = new CreateStripePaymentIntentRequest { Transaction = new TransactionDto { Currency = new CurrencyDto { Type = EnumCurrencyType.Money, Amount = 20 }, Description = "test", Id = new TransactionId(), Status = EnumTransactionStatus.Pending, Timestamp = DateTime.UtcNow.ToTimestamp(), Type = EnumTransactionType.Deposit } }; // Act var func = new Func <Task>(async() => await client.CreateStripePaymentIntentAsync(request)); // Assert func.Should().Throw <RpcException>(); }
public async Task <IActionResult> DepositAsync([FromBody] DepositTransactionRequest request) { var createTransactionRequest = new CreateTransactionRequest { Bundle = request.BundleId }; var createTransactionResponse = await _cashierServiceClient.CreateTransactionAsync(createTransactionRequest); try { var createStripePaymentIntentRequest = new CreateStripePaymentIntentRequest { PaymentMethodId = request.PaymentMethodId, Transaction = createTransactionResponse.Transaction }; var createStripePaymentIntentResponse = await _paymentServiceClient.CreateStripePaymentIntentAsync(createStripePaymentIntentRequest); return(this.Ok(createStripePaymentIntentResponse.ClientSecret)); } catch (RpcException exception) { var cancelTransactionRequest = new CancelTransactionRequest { TransactionId = createTransactionResponse.Transaction.Id }; await _cashierServiceClient.CancelTransactionAsync(cancelTransactionRequest); throw exception.Capture(); } }
public void Deposit_ShouldThrowRpcExceptionNoDefaultPayment() { // Arrange var userId = new UserId(); const string email = "*****@*****.**"; var host = TestHost.WithClaimsFromBearerAuthentication(new Claim(JwtClaimTypes.Subject, userId.ToString()), new Claim(JwtClaimTypes.Email, email)) .WithWebHostBuilder( builder => { builder.ConfigureTestContainer <ContainerBuilder>( container => { TestMock.ServiceBusPublisher.Setup(x => x.PublishAsync(It.IsAny <UserDepositSucceededIntegrationEvent>())) .Returns(Task.CompletedTask); container.RegisterInstance(TestMock.ServiceBusPublisher.Object).As <IServiceBusPublisher>(); TestMock.StripeCustomerService.Setup(x => x.HasDefaultPaymentMethodAsync(It.IsAny <string>())).ReturnsAsync(false); container.RegisterInstance(TestMock.StripeCustomerService.Object).As <IStripeCustomerService>(); }); }); var client = new PaymentService.PaymentServiceClient(host.CreateChannel()); var request = new CreateStripePaymentIntentRequest { Transaction = new TransactionDto { Currency = new CurrencyDto { Type = EnumCurrencyType.Money, Amount = 20 }, Description = "test", Id = new TransactionId(), Status = EnumTransactionStatus.Pending, Timestamp = DateTime.UtcNow.ToTimestamp(), Type = EnumTransactionType.Deposit } }; // Act var func = new Func <Task>(async() => await client.CreateStripePaymentIntentAsync(request)); // Assert func.Should().Throw <RpcException>(); }