Saltar al contenido principal

Place to Pay (Ecuador) — guía de producción

XENPIA es la vitrina; xenpdoo es quien cobra (Place to Pay). Las tarjetas nunca pasan por Nest ni por el frontend.

Ambientes​

TestProducción
Checkouthttps://checkout-test.placetopay.echttps://checkout.placetopay.ec
Payment Linkshttps://sites-test.placetopay.comhttps://sites.placetopay.com (o el host que indique el dashboard EC)
CredencialesSitio de pruebasSitio de producción (distinto)

Nunca mezclar login/secret de test con URLs de producción (ni al revés).

Flag fail-closed en XENPIA​

Sin estas variables (o con cualquier valor distinto de true/1), la vitrina no existe (404):

PAYMENTS_ENABLED=true
NEXT_PUBLIC_PAYMENTS_ENABLED=true
PUBLIC_APP_URL=https://app.xenpia.com

Hay que setear las dos. Si solo enciendes el frontend, el backend responde 404. Si solo el backend, no hay botones ni menú.

Configurar Place to Pay en xenpdoo​

  1. Instalar el módulo payment_placetopay (Apps → actualizar lista → instalar).
  2. Contabilidad → Configuración → Proveedores de pago → Place to Pay.
  3. Estado Test (sandbox) o Enabled (prod).
  4. Completar login, secret key, URLs Checkout/Sites, locale es_EC, moneda USD.
  5. web.base.url de Odoo debe ser HTTPS público (el webhook PTP apunta a Odoo, no a XENPIA):
    • https://<xenpdoo>/payment/placetopay/notification
  6. En xenpia: ODOO_BASE_URL, ODOO_API_KEY, ODOO_WEBHOOK_SECRET ya existentes.

Sandbox sin cuenta bancaria​

Se puede integrar y probar sin cuenta bancaria. Place to Pay no liquida a producción hasta:

  • KYC Ecuador (RUC, estatutos, IDs de beneficiarios/UBO, domicilio).
  • Cuenta bancaria de desembolsos.
  • Sitio de producción aprobado.
  • Políticas visibles en el sitio (/legal/privacy, /legal/terms, reembolsos).

Tarjetas de prueba: docs.placetopay.dev — Test your integration.

Local: el webhook PTP no llega a localhost → túnel (ngrok/Cloudflare) hacia xenpdoo, o confiar en la re-consulta al returnUrl (/pay/return?ref=).

IVA​

El desglose IVA sale de la factura Odoo (account.move), no de Nest. Cuando definan si base_price del plan es neto o bruto, ajustar impuestos en el producto xemp_subscriptions.product_subscription.

Cutover a producción​

  1. KYC + cuenta bancaria aprobados en Place to Pay.
  2. Crear sitio de producción; copiar login/secret al provider Odoo (state=enabled, URLs prod).
  3. Pedir a soporte Place to Pay la activación de firmas SHA-256 en notificaciones.
  4. En XENPIA (test primero, luego prod):
    PAYMENTS_ENABLED=true
    NEXT_PUBLIC_PAYMENTS_ENABLED=true
    PUBLIC_APP_URL=https://app.xenpia.com
  5. Smoke test con monto mínimo.
  6. Conciliar dashboard Place to Pay vs facturas Odoo (no vs tablas Nest).
  7. Para apagar la vitrina sin tocar Odoo: quitar las vars o poner false.

Recurrente​

El primer Checkout con “Activar cobro recurrente” tokeniza la tarjeta en Place to Pay; el token vive en payment.token de Odoo. El cron XENPIA: cobros recurrentes Place to Pay cobra con Collect cuando next_invoice_date venció. Tras 3 fallos, recurring_status=failed (no suspende el tenant automáticamente).

Refunds​

La sesión Checkout no cambia de APPROVED si luego hay reverso. Reversar/consultar la transacción en Odoo / Place to Pay; el espejo payments en Supabase puede quedar APPROVED hasta re-sync manual.

Checklist go-live​

  • Módulo payment_placetopay instalado
  • Provider en test funciona (tarjeta de prueba → factura/suscripción)
  • Webhook HTTPS TLS 1.2+ hacia Odoo
  • PAYMENTS_ENABLED + NEXT_PUBLIC_PAYMENTS_ENABLED solo donde corresponda
  • KYC + cuenta bancaria
  • Credenciales y URLs de producción
  • Smoke test monto mínimo en prod
  • Monitoreo de fallos recurrentes en suscripciones Odoo