Dodo Payments · Resend

¿Cómo enviar el acceso una sola vez?

IndiePack··9 min lectura

Para enviar un email de acceso tras Dodo Payments sin duplicados, guarda primero el pago con una clave única, crea una entrega identificada por pago y tipo de mensaje, y llama a Resend desde el servidor. Si el webhook o el proveedor de correo reintentan, recupera esa misma entrega y solo repite los intentos fallidos.

Orden seguro: verificar evento, registrar pago, reservar entrega, enviar y marcar resultado. El correo no debe ser la única prueba de que el cliente compró.

Índice

  1. ¿Por qué se duplican los emails?
  2. ¿Cuál es la forma rápida con IndiePack?
  3. ¿Qué datos hacen reintentable la entrega?
  4. ¿Cómo se protege el enlace?
  5. ¿Cómo se prueba el fallo parcial?

¿Por qué un webhook correcto puede enviar dos emails de acceso?

Puede enviarlos porque los webhooks se reintentan cuando la respuesta tarda o se pierde, y porque tu función puede fallar después de enviar pero antes de guardar que lo hizo. El segundo intento ve el pago otra vez y repite el efecto si no existe una identidad estable para esa entrega.

Responder rápido no sustituye la idempotencia. Tampoco conviene marcar “enviado” antes de hablar con el proveedor: un fallo real dejaría al comprador sin acceso y sin una tarea pendiente que recuperar.

¿Cuál es la forma rápida: automatizarlo con IndiePack?

La forma rápida es construirlo sobre IndiePack, que reúne Dodo Payments, webhooks, Supabase y piezas transaccionales dentro de la ruta SaaS. El producto se entrega por email con acceso al Notion privado, por lo que separar pago confirmado y entrega reintentable encaja con el recorrido real.

Ver IndiePackVer precio

¿Qué datos hacen que el envío con Resend sea reintentable?

La entrega necesita una clave única como pago más plantilla, un destinatario normalizado, estado, número de intentos, última respuesta y marcas de tiempo. Una operación atómica reserva la fila pendiente; otra ejecución que encuentre la misma clave no crea una segunda entrega.

Envía desde código de servidor con la clave de Resend en una variable privada, como se explica en emails transaccionales con Next.js. Guarda el identificador que devuelva el proveedor cuando exista y evita registrar el contenido sensible del mensaje.

¿Cómo se entrega un enlace privado sin convertir el email en autorización permanente?

Se entrega un enlace oficial y controlado, pero la autorización final debe vivir en el sistema que sirve el recurso. Si generas un token propio, hazlo de un solo uso o con caducidad, vincúlalo al pedido y no incluyas secretos administrativos en la URL.

IndiePack indica que el comprador recibe por email el acceso al Notion privado. La automatización debe poder reenviar ese acceso a la misma compra desde soporte sin inventar una compra nueva ni alterar el estado de pago.

¿Cómo se prueba un fallo entre el pago y el email?

Se prueba entregando dos veces el mismo evento, simulando un error de Resend, interrumpiendo la función después del envío y reanudando el trabajo pendiente. Comprueba que existe un pago, una entrega lógica y, como máximo, un envío confirmado por esa clave.

Parte del patrón de webhook idempotente con Supabase y añade observabilidad para entregas atascadas. El cierre con IndiePack debe ser recuperable: el pago queda seguro, el email puede reintentarse y soporte puede explicar exactamente qué falta.