Vista ràpida
Tot el necessari per integrar sense obrir el dashboard.
Flux recomanat
El backend crea el pagament, el frontend redirigeix a checkoutUrl, el backend entrega per webhook signat.
Sense custòdia
Redsys i el banc del comerç processen. PontPay no reté ni mou fons.
Preparat per IA
OpenAPI, resum LLM i prompt protegit perquè Codex/Cursor no inventin contractes.
Model d'integració
Usuaris del panell, API keys i credencials Redsys són coses diferents.
1. Configura el comerç
Cada comerç inicia sessió, configura el seu FUC, terminal, secret Redsys i entorn. PontPay xifra aquestes credencials.
2. Crea el pagament
El teu servidor crea un pagament amb Bearer key, versió fixa i Idempotency-Key. El client mai veu claus secretes.
3. Redirigeix al checkout
PontPay retorna checkoutUrl. Redsys cobra amb el contracte bancari del comerç.
4. Entrega per webhook
El teu backend verifica X-PontPay-Signature, dedupica l'esdeveniment i confirma l'estat abans d'entregar.
Inici ràpid
Crea un pagament allotjat i envia el comprador a PontPay.
Truca a PontPay des del teu backend, mai des de JavaScript públic.
Fixa PontPay-Version per evitar canvis silenciosos.
Fes servir una Idempotency-Key per cada intent lògic de checkout.
Fes servir un webhookUrl HTTPS públic; en local, fes servir un túnel HTTPS en comptes de localhost o IPs.
Persisteix payment.id, orderId i checkoutUrl abans de redirigir.
Entrega només amb webhook signat o GET /payments/{id}.
Checkout allotjat
El contracte principal és petit, estable i fàcil de mapar.
/api/v1/payments
Crear pagament i obtenir checkoutUrl.
Idempotència: Obligatòria
/api/v1/payments/{id}
Consultar l'estat final, orderId i traçabilitat.
Idempotència: No
/api/v1/payment-links
Crear links per a QR, reserves, dipòsits o factures.
Idempotència: Obligatòria
/api/v1/redsys/request/{paymentId}
Construir el payload signat per al checkout Redsys.
Idempotència: No
/api/v1/redsys/notify
Rebre i verificar la notificació bancària.
Idempotència: No
/api/v1/webhooks/test
Enviar un esdeveniment signat de prova al teu endpoint.
Idempotència: No
Webhooks
La redirecció és UX. Els webhooks són la font de veritat.
Llegeix el raw body exacte abans de parsejar JSON.
Verifica HMAC-SHA256 en temps constant.
Dedupica per event type + data.id.
Respon 2xx ràpid i processa la feina pesada després.
Els reintents de PontPay són com a mínim una vegada; el teu handler ha de ser idempotent.
payment.succeeded
Quan arriba
Redsys va autoritzar i PontPay va confirmar.
Acció recomanada
Marca la comanda cobrada i entrega si no depèn de revisió.
payment.failed
Quan arriba
Redsys va rebutjar o va fallar l'intent.
Acció recomanada
No entreguis. Allibera la reserva o mostra recuperació de pagament.
payment.pending_confirmation
Quan arriba
El rail està en verificació intermèdia.
Acció recomanada
Manté l'usuari esperant; no facis fulfilment encara.
payment.refunded
Quan arriba
El pagament ha estat reemborsat completament.
Acció recomanada
Actualitza saldo, suport i comptabilitat interna.
redsys.signature_invalid
Quan arriba
Una notificació Redsys no s'ha pogut verificar.
Acció recomanada
Alerta operacions; no exposis detall tècnic al client.
Seguretat API
Controls obligatoris abans de producció.
Claus només al backend
L'API key de PontPay, el secret de webhook i les credencials Redsys viuen al servidor. No han d'aparèixer al navegador, apps mòbils, repositoris, prompts ni logs.
Callbacks públics HTTPS
webhookUrl i els endpoints registrats han d'utilitzar hostnames públics HTTPS. PontPay bloqueja http, localhost, IPs directes, sufixos interns, metadata hosts i credencials incrustades.
Reintents idempotents
Cada operació lògica de creació porta la seva Idempotency-Key estable. El backend del comerç dedupica webhooks abans d'entregar comandes o reserves.
Signatura i estat final
successUrl només confirma l'experiència del comprador. L'entrega es decideix amb webhook HMAC verificat o consultant GET /payments/{id}.
Permès: https://api.el-teu-domini.com/pontpay/webhook.
Bloquejat: http://, localhost, 127.0.0.1, IPs directes, .local, .internal i user:pass@host.
Guarda request_id, payment.id i orderId per a suport, auditoria i traçabilitat.
Revisa /llms.txt i OpenAPI quan canviï el contracte perquè els agents generin integracions correctes.
Fiabilitat
Reintenta sense duplicar cobraments ni entregues.
Regles d'idempotència
Mateixa operació lògica: reutilitza la mateixa Idempotency-Key.
Un altre carret, import, reserva o factura: crea una clau nova.
Registra request_id amb el teu orderId per a suport i auditoria.
Tracta el 409 com un conflicte entre clau i cos fins revisar-ho.
requires_payment
Pagament llest per entrar al checkout allotjat.
Acció
Redirigir a checkoutUrl.
redirected_to_redsys
Client enviat a Redsys.
Acció
Esperar notify/webhook.
succeeded
Redsys va autoritzar i PontPay va confirmar.
Acció
Entregar després de webhook/API fetch.
failed
Redsys va rebutjar o va fallar el pagament.
Acció
Mostrar reintent o alternativa.
expired
El checkout ha caducat.
Acció
Crear un nou pagament si encara cal.
Errors
Missatges segurs per a l'usuari, detall operatiu per als logs.
Genera una clau estable per operació.
Envia Authorization: Bearer <key>.
Comprova entorn, tenant i id.
Consulta l'estat actual abans de reintentar.
Respecta retry-after i reintenta amb backoff.
Reintenta més tard i registra request_id.
Documentació per a IA