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
| Test | Producción | |
|---|---|---|
| Checkout | https://checkout-test.placetopay.ec | https://checkout.placetopay.ec |
| Payment Links | https://sites-test.placetopay.com | https://sites.placetopay.com (o el host que indique el dashboard EC) |
| Credenciales | Sitio de pruebas | Sitio 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
- Instalar el módulo
payment_placetopay(Apps → actualizar lista → instalar). - Contabilidad → Configuración → Proveedores de pago → Place to Pay.
- Estado
Test(sandbox) oEnabled(prod). - Completar
login,secret key, URLs Checkout/Sites, localees_EC, monedaUSD. web.base.urlde Odoo debe ser HTTPS público (el webhook PTP apunta a Odoo, no a XENPIA):https://<xenpdoo>/payment/placetopay/notification
- En xenpia:
ODOO_BASE_URL,ODOO_API_KEY,ODOO_WEBHOOK_SECRETya 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
- KYC + cuenta bancaria aprobados en Place to Pay.
- Crear sitio de producción; copiar login/secret al provider Odoo (
state=enabled, URLs prod). - Pedir a soporte Place to Pay la activación de firmas SHA-256 en notificaciones.
- En XENPIA (test primero, luego prod):
PAYMENTS_ENABLED=trueNEXT_PUBLIC_PAYMENTS_ENABLED=truePUBLIC_APP_URL=https://app.xenpia.com
- Smoke test con monto mínimo.
- Conciliar dashboard Place to Pay vs facturas Odoo (no vs tablas Nest).
- 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_placetopayinstalado - Provider en test funciona (tarjeta de prueba → factura/suscripción)
- Webhook HTTPS TLS 1.2+ hacia Odoo
-
PAYMENTS_ENABLED+NEXT_PUBLIC_PAYMENTS_ENABLEDsolo 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