Este postes el primero 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 esta al princpio, no tienes que saltarte nada.
Índice
0 - Introducción
La gran mayoría de los que estáis viendo este vídeo sois desarrolladores, los cuales teneis un trabajo diario que os da de comer, pero muchos teneis ideas que potencialmente pueden convertirse en productos que os generan un beneficio.
Uno de los motivos principales por lo que muchos no empezamos a monetizar proyectos personales es por lo difícil que es la administración de pagos con los usuarios, porque ya no es solo la implementación de una pasarela de pago, sino que legalmente tenemos que cumplir un montón de regulaciones y en cada país son diferentes, lo que hace que vender productos por internet sea muy complejo y seamos sinceros, imposible de mantener uno solo.
Aquí es donde entra Stripe, es una aplicación de terceros que se encarga de todo lo relacionado con los pagos, totalmente segura y tiene una de las mayores valoraciones de empresa que hay, eso es debido a lo fácil que es integrar en prácticamente cualquier sistema a través de su API.
Y es aquí donde quiero entrar, ya que gracias a esta facilidad de implementación podemos empezar a monetizar nuestro propio contenido de una forma muy sencilla, por un precio muy reducido (2.5% + 30c por transacción). Utilizando Stripe es como yo vendo los libros dentro de mi web personal, utilizo para cobrar las suscripciones premium o es más, es la plataforma que tengo configurada en BuymeaCoffee.
En este curso vamos a ver las modalidades más comunes dentro de los pagos, que son:
- Un pago único para un usuario
- Un pago recurrente como una suscripción
- Un pago con oferta/cupón.
Cualquier modalidad de pago que se te ocurra es posible con Stripe y para empezar con el curso, recomiendo hacerse una cuenta con ellos.
Stripe no lo utilizo solo yo, sino que empresas grandes como shopify o digitalocean lo utilizan por detrás y esto es porque Stripe es ideal para desarrolladores que no quieren darse cabezazos contra regulaciones o verificaciones de fraude.
1 - Que ofrece stripe?
Cuando nos registramos en stripe tenemos acceso al Dashboard y ojo, antes de continuar hay un elemento muy importante y diferenciador, Stripe tiene modo Producción y modo de prueba, que cuando lo activamos, todo lo que hacemos se va a generar en un entorno de prueba, por lo que no seremos cargados con dinero real y nos permite testear tantas veces como queramos.
Esta funcionalidad no existe en otras pasarelas, o por lo menos no existía cuando yo trabajé con ellas y siempre había que hacer pagos reales y luego cancelarlos para hacer pruebas…
Hablo de hace casi 10 años, así que espero que hayan mejorado.
Y desde luego lo que no existía era la posibilidad de simplemente hacerse una cuenta y empezar a facturar casi al instante.
Pero donde para mi Stripe es superior al resto y diferenciador es con su página web, o bueno no tanto la web, que es únicamente una interfaz de usuario delante de la parte mas poderosa de Stripe, la API, ya que todo lo que puedes hacer en la interfaz, lo puedes hacer tú mismo en la API.
Y no solo eso, Stripe tiene un botón que dice “developers” el cual contiene logs, estadísticas y registro de todas las acciones que realizas en la interfaz que incluyen tanto el cuerpo de la request como de la response.
Para quien no esté familiarizado con APIs recomiendo ver primero mi curso sobre Web API en esta web.
2 - Cómo nos comunicamos con stripe
La forma en la que nos comunicamos con stripe es a través de la api, pero en esta API debemos indicar nuestra API key;
Dentro de Stripe en la pestaña de desarrollador tenemos un menú que especifica API Key, ahí tendremos nuestras keys, las cuales permitirán tanto al front end como al back end hacer llamadas a la API de Stripe.
NOTA: Esta API Key es diferente si estás en modo de prueba y producción
Dentro de las Claves estándar tenemos dos opciones diferentes, la clave publicable y la clave secreta.
Por defecto una de ellas está oculta y la otra no:
Esto es debido a que la clave publicable está creada para ponerla en tu front end, Imagínate que tienes una aplicación con clientes que representan tus usuarios, y estos usuarios introducen su tarjeta de crédito o de su dirección para hacer un pago.
Esta información se encripta con la clave pública y stripe es capaz de desencriptarla por su lado, de esta forma puedes administrar información sensible en tu aplicación sin que dicha información pase por tu aplicación y así ahorrarte un montón de posibles problemas legales.
La segunda es nuestra clave secreta o clave privada, esta clave es más importante que la primera, porque si bien la publicable puede ser vista por los usuarios es importante mantener la clave privada de una forma segura.
Esta es la clave que vamos a utilizar para comunicarnos con la API de Stirpe, únicamente desde nuestro backend y la puedes utilizar para crear pagos, crear clientes, añadir tarjetas de crédito o incluso cobrar directamente, así que hay que tener mucho cuidado y no mostrarla nunca.
Idealmente la pondremos en un entorno seguro de credenciales, o como variable de entorno, NUNCA y repito NUNCA, hagas un comit de tu código si este tiene una clave privada en el ya que si alguien consigue esa key, puede hacer lo que quiera con tu cuenta de stripe (includio mandarse los fondos a si mismo).
Finalmente, Stripe nos da la opción de crear llaves restringidas, que es como la clave privada pero con permisos limitados, lo cual es totalmente recomendable ya que si por lo que sea alguien consigue tu key, solo podrá hacer las acciones que le deje la API.
2.1 - Interacción con la API de Stripe
Antes de ir al código quiero asegurarme de que todo funciona y de que todos estáis familiarizados con la API de stripe.
Un recurso muy útil va a ser la documentación de la API, la cual está disponible en la siguiente URL: https://docs.stripe.com/api y mi recomendación es que la tengas abierta durante el desarrollo de este curso.
Para hacer un ejemplo vamos a crear un producto a través de la API, vamos a la documentación de la API, a la sección de crear producto https://docs.stripe.com/api/products/create, donde veremos algo así:
Aquí vamos a diferenciar tres secciones:
La primera es la sección que tenemos a la izquierda, esta sección nos indica los parámetros del cuerpo de la request, como vemos el nombre (name) está especificado como obligatorio (required) el resto son parámetros opcionales.
En la parte de la derecha tenemos dos secciones, la superior oscura es una terminal o bloque de código que nos muestra cómo hacer dicha llamada utilizando el SDK de stripe en el lenguaje que tenemos seleccionado, en nuestro caso .NET. Si pulsamos en el botón de play se nos abre una terminal donde podemos hacer estas llamadas.
Finalmente en la parte inferior de la derecha tenemos la respuesta de la API.
Lo que vamos a hacer ahora es ir nosotros mismos a nuestra máquina y probar esta API.
Personalmente voy a utilizar postman, pero puedes utilizar cualquier aplicación que te permita hacer llamadas HTTP, por poder, puedes utilizar ficheros http o crearte una app de consola para probar, en mi caso, postman.
Si vas a utilizar postman, te dejo un enlace con todos los endpoints de la api, ya configurados en postman para que los importes en tu máquina -> https://www.postman.com/stripedev/workspace/stripe-developers/overview
Vamos a crear un producto, y antes de hacer la llamada como tal, debemos hacer dos cosas, especificar la api de postman https://api.stripe.com/v1/products
(v1/products) es la parte que cambiamos cada vez.
Y en la autorización seleccionamos que vamos a tener Un token Bearer donde por valor vamos a poner nuestra clave privada.
Nota: Alternativamente podemos usar un header Authorization
y especificar Bearer {{Clave}}
, a gusto de cada uno.
Como es una creación ponemos que el método http sea POST y posteriormente iremos al cuerpo del mensaje y generamos el producto, como es un ejemplo lo llamamos producto 1 y ponemos un precio de ejemplo:
Al ejecutar la request con el botón enviar, vemos que nos devolverá un cuerpo del mensaje similar a este
{
"id": "prod_Q2U3YlkZEjvNjk",
"object": "product",
"active": true,
"attributes": [],
"created": 1714754130,
"default_price": null,
"description": "producto ejemplo",
"features": [],
"images": [],
"livemode": false,
"marketing_features": [],
"metadata": {},
"name": "producto 1",
"package_dimensions": null,
"shippable": null,
"statement_descriptor": null,
"tax_code": null,
"type": "service",
"unit_label": null,
"updated": 1714754130,
"url": null
}
En esa respuesta tenemos una propiedad que va a ser clave, el ID del producto prod_Q2U3YlkZEjvNjk
que vamos a copiar y vamos a hacer un GET donde simplemente llamando a https://api.stripe.com/v1/products/prod_Q2U3YlkZEjvNjk
nos devuelve el producto:
Y podemos ir a la interfaz y ver como lo tenemos incluido:
La acción que acabamos de hacer en la API se puede hacer en la interfaz de una forma muy sencilla. Cuando utilizar la interfaz o cuando utilizar la API depende de tu caso de uso, si solo vas a tener 3 productos a la venta es más rápido hacerlo de forma manual en la interfaz, pero si vas a tener decenas o miles nuevos cada semana te sale mejor hacerlo con una API, lo mismo pasa para los clientes o cualquier otro elemento.