Original canónico: Fidelity — PayPal.
Revisado el 2026-09-06 con llms/paypal/llm.txt y las especificaciones oficiales
Orders v2 y Payments v2, importadas en contracts/paypal/ con URL, fecha y SHA-256.
El estado implemented corresponde al subconjunto de pagos descrito aquí.
#Fuentes
#Qué se emula
- OAuth
POST /v1/oauth2/tokencon Basic ygrant_type=client_credentials. Crear o rotar una aplicación devuelve una sola vezclientId,clientSecretyaccessToken. Se conserva únicamente el resumen del token. Las aplicaciones anteriores deben rotar para obtener el nuevo par OAuth. - Crear y consultar
/v2/checkout/orders. Sin fuente de pago, la orden empieza enCREATED; conpayment_source.paypal, enPAYER_ACTION_REQUIRED. - Aprobar en
/paypal/checkoutnow?token=...: cambia aAPPROVEDsin cobrar ni reservar dinero. El comercio captura después mediante/orders/{id}/captureo autoriza mediante/orders/{id}/authorize, según el intent original. - Consultar autorizaciones y capturas. Capturar una autorización mediante
/v2/payments/authorizations/{id}/capture, o anularla mediante/voidcon respuesta 204 vacía. Una sola captura final, completa o parcial. - Devolver mediante
/v2/payments/captures/{id}/refundcon HTTP 201, importe individual e identificador propio. Repetir una clave idempotente no contabiliza de nuevo. Se validan moneda, estado, intent y aislamiento por comercio. - La orden sigue en
COMPLETEDdespués de devolver; la captura reflejaPARTIALLY_REFUNDEDoREFUNDED. - El SDK oficial 2.5.0 prueba OAuth, creación y captura. Su adaptador HTTP se configura para enviar todo al emulador porque el SDK fija los hosts; no se modifican autenticación, serialización ni lectura de respuestas del SDK.
- Webhooks RSA-SHA256 con manifiesto documentado y CRC32.
webhookSecretactúa como identificador local del webhook./paypal/certs/paypal-test.pemsirve el certificado público de pruebas. Una prueba independiente usa Node crypto y CRC32 de zlib; el SDK no tiene verificador local. El verificador del emulador aplica una ventana configurable de 300 segundos. - Pantalla estrecha de revisión con identidad PayPal, tarjeta sintética, importe,
aprobación y regreso al comercio. Conserva los parámetros de retorno y añade
tokenyPayerIDsintético. Cancelar vuelve sin anular la orden. No pide credenciales reales de PayPal.
#Qué no se emula
- OAuth tiene tiempos y scopes simplificados. El token dura hasta la caducidad de la aplicación, su desactivación o rotación; no hay caducidad OAuth separada.
- Una unidad de compra y una captura final. Faltan capturas múltiples, reautorización, marketplace, desglose de artículos, envío y PATCH de órdenes. Las opciones monetarias no soportadas se rechazan explícitamente.
- No hay GET independiente ni historial de reembolsos como recurso. Se conservan contabilidad e idempotencia; no existen estados asíncronos de devolución.
- Los webhooks contienen recursos mínimos. Faltan el cuerpo completo, la selección de eventos de devolución parcial, el registro de webhooks y el endpoint remoto de verificación. Certificado y clave privada son fixtures públicos de prueba, nunca material de confianza para producción.
- El checkout es una simulación local. Sin login real, OTP, popup del SDK, postMessage, tokenización, Pay Later, Venmo, bóveda, suscripciones, facturas ni payouts. No se afirma igualdad visual con todas las variantes regionales.
- Validación parcial y contabilidad sintética. Importar el OpenAPI no equivale a validar todo su esquema; comisiones y plazos siguen siendo configurables.