La .NET CONF 2024 acaba de terminar. Descubre las NOVEDADES de .NET 9 junto a los CAMBIOS que trae C# 13.
Puedes ver el contenido de este vídeo junto con su curso en el modo vídeo (similar a Udemy) si pulsas aquí.

API de stripe para automatizar

24 Jun 2024 5 min (0) Comentarios

Este postes el Segundo de un curso completo y gratuito sobre Stripe, el cual está disponible tanto esta misma web así como en YouTube.

Tanto el curso como el código del mismo estan disponibles de forma abierta y gratuita, si te gusta el contenido ya sabes que puedes apoyar a la web haciendote premium, o comprando mi libro.

En el vídeo de YouTube, el contenido de este post incia en el minuto 95:20.

 

 

Ahora que ya tenemos claro cómo funciona Stripe, la api, la CLI e incluso el SDK para el código vamos a modificar nuestro proyecto para automatizar cuantos más procesos mejor.  

 

 

1 - Creación de productos y precios a través de la API de Stripe

 

Cada vez que creemos un producto en la base de datos, este se cree también en stripe con el precio que hemos indicado en vez de tener que crearlo de forma manual y enlazar el precio. 

 

Para ello únicamente tenemos que modificar el caso de uso a lo siguiente: 

public class CreateProductUseCase(ApplicationDbContext applicationDbContext)
{
	public async Task<bool> Execute(CreateProductRequest createProduct)
	{
		//TODO: validations ETC but i'm not gonna waste time on that.

		string productId = await CreateProductInStripe(createProduct.Name, createProduct.ImageUrl);
		string priceId = await CreatePriceStripe(productId, Convert.ToInt64(createProduct.Price * 100));


		applicationDbContext.Products.Add(new Data.Entities.ProductEntity()
		{
			ImageUrl = createProduct.ImageUrl,
			Name = createProduct.Name,
			Price = createProduct.Price,
			StripePriceId = priceId,
		});

		return await applicationDbContext.SaveChangesAsync() > 0;
	}

	private async Task<string> CreateProductInStripe(string name, string imageUrl)
	{
		var options = new ProductCreateOptions
		{
			Name = name,
			Images = new List<string>()
			{
				imageUrl,
			}
		};
		var service = new ProductService();
		Product product = await service.CreateAsync(options);
		return product.Id;
	}

	private async Task<string> CreatePriceStripe(string productId, long priceInCents)
	{
		var options = new PriceCreateOptions()
		{
			Active = true,
			Currency = "eur",
			UnitAmount = priceInCents,
			Product = productId
		};
		PriceService priceService = new PriceService();
		var price = await priceService.CreateAsync(options);
		return price.Id;
	}
}

 

La diferencia principal es que ahora vamos a coger el priceId a través de la API en vez de manualmente en el navegador como hemos visto en el primer capítulo del curso, lo cual es esencial si estamos añadiendo muchos productos. 

 

Si te fijas, en el código estamos siguiendo el mismo proceso que hemos seguido en la interfaz web, primero hemos creado el producto y luego el precio.

 

Y simplemente podemos crear un par de libros a través de la API que hemos utilizado en capítulos anteriores y podemos ver el resultado:  

Si pulsamos en comprar nos irá a la pasarela de stripe y podremos comprar perfectamente. 

 

 

2 - Pagos con  de usuario

 

Una de las partes más importantes de las aplicaciones web es poder tener usuarios registrados y pagos a través de estos usuarios, para que así se mantenga esa información como puede ser una subscripción; 

 

Pero otro motivo muy importante puede ser para mandar información desde nuestra web a Stripe. 

 

No voy a entrar en detalle sobre cómo se administran los usuarios, ya que hay muchas formas, yo he utilizado la que viene por defecto en la plantilla de .NET 8 que hemos visto en el primer capítulo. En producción, recomiendo tener un servicio de gestión de usuarios.

 

Para el caso, me he creado un usuario llamado [email protected] ahora, cuando este usuario realice un pago, el email va a ir incrustado en el proceso de checkout y no va a ser posible cambiarlo. 

SessionCreateOptions options = new SessionCreateOptions
{
	SuccessUrl = "https://localhost:7265/payment-completed",
	CustomerEmail = User?.FindFirstValue(ClaimTypes.Email) ?? null, 👈
	LineItems = new List<SessionLineItemOptions>
	{
		new SessionLineItemOptions
		{
			Price = stripePriceId,
			Quantity = 1,
		},
	},
	Mode = "payment",
};

 

Al pulsar en comprar podemos ver como el email está totalmente bloqueado.

 


Uso del bloqueador de anuncios adblock

Hola!

Primero de todo bienvenido a la web de NetMentor donde podrás aprender programación en C# y .NET desde un nivel de principiante hasta más avanzado.


Yo entiendo que utilices un bloqueador de anuncios como AdBlock, Ublock o el propio navegador Brave. Pero te tengo que pedir por favor que desactives el bloqueador para esta web.


Intento personalmente no poner mucha publicidad, la justa para pagar el servidor y por supuesto que no sea intrusiva; Si pese a ello piensas que es intrusiva siempre me puedes escribir por privado o por Twitter a @NetMentorTW.


Si ya lo has desactivado, por favor recarga la página.


Un saludo y muchas gracias por tu colaboración

© copyright 2024 NetMentor | Todos los derechos reservados | RSS Feed

Buy me a coffee Invitame a un café