Cómo crear un incoming payment en Open Payments

Resumen

Crear un incoming payment en Open Payments es el paso donde el receptor declara que está listo para recibir dinero bajo condiciones específicas. Aprenderás cómo configurar esa solicitud, resolver errores comunes y avanzar hacia la cotización que valida el envío entre Alicia y Bob.

¿Qué es un incoming payment y cómo se configura?

Un incoming payment funciona como un boleto o recibo digital que indica que Bob está listo para recibir un pago en una moneda y bajo unas condiciones determinadas. Es el recurso que Alicia usará para enviar dinero hacia él.

Para configurar la llamada necesitas tres piezas que ya vienen del flujo previo:

  • La dirección del resource server del receptor, descubierta desde su wallet address, que es donde se gestionan los recursos de pago.
  • El access token obtenido del auth server en el paso anterior, que autoriza al cliente a crear el recurso.
  • El cuerpo de la petición con la wallet address única de Bob y el incoming amount, donde se define la moneda, el asset, los decimales y los términos.

¿Qué define el incoming amount? Define el monto, la moneda y la escala decimal del pago. Si envías 10 dólares con escala 2, el sistema lo registra como 1000, no como un número legible para humanos.

Esa lógica de decimales es central en Open Payments: lo que ves como 10 USD vive internamente con su escala correspondiente [01:05].

¿Por qué falla la creación del incoming payment?

Al ejecutar node index.js por primera vez puede aparecer una referencia de route indicando que el grant no está finalizado [02:15]. No es un error grave.

El problema viene del if statement del paso anterior, que valida si la autorización del pago entrante está finalizada. La solución está en los imports: además del cliente autenticado, necesitas importar la utilidad isFinalizedGrant desde la librería de Open Payments.

js import { createAuthenticatedClient, isFinalizedGrant } from "@interledger/open-payments";

Guardas, vuelves a ejecutar y el pago entrante queda montado correctamente. Con eso cierras el paso tres del flujo.

¿Cómo se crea el grant para una cotización?

Antes de avanzar, vale la pena ubicarse. En el paso anterior creaste formalmente la orden de recepción en la cuenta de Bob. Ahora Alicia necesita usar ese incoming payment para iniciar el envío y crear el outgoing payment.

Si revisas la billetera de pruebas, en transacciones puedes elegir la cuenta desde la que se preparan los pagos. Verás que el tipo de transacción aparece como incoming y el status sigue en pendiente, porque aún falta la cotización que valide la operación [04:10].

¿Qué es un quote en Open Payments?

Un quote es la cotización que calcula tres cosas a la vez:

  1. Cuánto dinero envía el emisor.
  2. Cuánto recibe el receptor.
  3. Cuáles son las rutas más óptimas y las tasas de conversión que aplican.

El sistema busca la ruta más eficiente, pero eso no significa que sea gratis: busca lo óptimo según costos y conversiones. El quote funciona como un contrato previo entre Alicia y Bob donde ambas partes saben exactamente cuál será el resultado del pago.

¿Dónde se crea el quote? Se crea en el resource server, pero requiere un permiso emitido por el auth server del emisor. Sin esa autorización, no hay cotización posible.

¿Cómo se ejecuta la solicitud del quote grant?

El flujo del bloque de código sigue una secuencia clara:

  • Se hace el request de la concesión al auth server del emisor.
  • Se revisa la autorización y el token en la billetera.
  • Se define el quote con sus parámetros.
  • Se aplica un condicional que espera a que la concesión finalice.
  • Se imprime el objeto resultante para inspeccionar la información generada.

Al ejecutar node index.js el output muestra que el grant fue completado, con su fecha de creación y expiración. Notarás que el amount recibido aún aparece en cero [06:20], porque todavía falta toda la lógica del outgoing payment en pasos posteriores.

¿Qué sigue después del quote grant?

Hasta aquí pediste al auth server de Alicia los permisos para crear una cotización de pago. Si la concesión se otorga, recibes un access token. Con ese token podrás llamar al resource server de Alicia para crear el quote que le dirá a Bob cuánto exactamente debe esperar.

Los siguientes pasos del flujo son:

  • Usar el quote grant para invocar client.quote.create.
  • Obtener la cotización con los detalles de envío y recepción.
  • Continuar hacia el outgoing payment para cerrar la transacción.

¿Te ha pasado que un grant no finaliza correctamente en tu propio flujo? Cuéntame cómo lo resolviste.