Como funciona

Como funciona PCI Proxy

Nos envías los datos de tarjeta. Nós los tokenizamos, los custodiamos en el vault PCI DSS y te devolvemos un token. En seus sistemas nunca acaba el número de tarjeta.

Flujo de Datos

El flujo en 5 pasos

Desde el momento en que el cliente introduce la tarjeta hasta el token que guardas en tu gestión: esto es lo que ocurre paso a paso.

Fase 1

Datos de tarjeta entrantes

Checkout en el sitio, llamada API o formulario del call center

Fase 2

PCI Proxy intercepta

Recibimos los datos de tarjeta del payload HTTP antes de que lleguen a seus servidores

Fase 3

Tokenização

Ciframos el número de tarjeta y generamos un token único

Fase 4

Vault seguro

El número de tarjeta permanece cifrado en el vault PCI DSS Nível 1, solo en la UE

Fase 5

Token para ti

Recibes el token y lo usas para pagos, suscripciones o reembolsos

Tokenização

Qué ocurre cuando tokenizamos

Sustituimos el número de tarjeta por un token. Você nunca ves la tarjeta en texto claro en seus sistemas. Estos son los tres pasos internos.

01

Paso

Reconocemos los datos de tarjeta

Analizamos las solicitudes entrantes e identificamos los números de tarjeta, en JSON, formulario o multipart. No tienes que cambiar tu código: solo conectas el flujo y listo.

02

Paso

Creamos el token

Cada token empieza por tok_pci_eu_ e incluye los últimos cuatro dígitos, el circuito y la fecha de vencimiento. Así puedes mostrar en la interfaz "Visa que termina en 1234" sin tener el número de tarjeta.

03

Paso

Mismo token, misma tarjeta

Si la misma tarjeta llega de nuevo, devolvemos el mismo token. Útil para suscripciones y tarjetas ya guardadas. La correspondencia permanece solo en el vault, no está expuesta vía API.

pci-proxy · ejemplo en vivo ACTIVO

→ POST /v1/tokenize

{

"card_number": "4111 1111 1111 1234",

"expiry": "12/26"

}

AES-256 · vault UE

← 200 OK · 47ms

{

"token": "tok_pci_eu_a1b2c3d4e5f61234",

"last_four": "1234",

"brand": "visa",

"card_in_your_systems": false

}

Número de tarjeta nunca en seus servidores · Vault en la UE · Registrado
Recuperación de tarjeta

Cuando se necesita el número de tarjeta

Para autorizar un pago, el PSP necesita el número de tarjeta real. Você le envías el token: nós recuperamos la tarjeta del vault y la remitimos de forma segura. Você nunca la ves.

1

Cuándo ocurre

Cuando necesitas cargar una tarjeta guardada, envías el token a nuestro endpoint forward. Nós resolvemos el número de tarjeta en el vault y lo pasamos al PSP por conexión cifrada. No aparece en seus logs.

2

Quién puede hacerlo

Solo quien tenga una clave API con permiso forward o detokenize. Puedes limitar por IP, entorno y volumen de solicitudes.

3

Todo trazado

Cada recuperación queda registrada: quién solicitó, cuándo, hacia qué PSP. Los logs se conservan al menos 12 meses y puedes consultarlos desde el dashboard o la API.

Niveles de protección

Nivel 1 Clave API firmada

Cada solicitud es autenticada

Nivel 2 Whitelist de IP

Solo desde seus servidores autorizados

Nivel 3 Conexión cifrada al PSP

TLS con certificados verificados

Nivel 4 Logs de auditoría

Conservados al menos 12 meses

API

Dos endpoints, flujo claro

Autentícate con tu clave API. Un endpoint crea el token, el otro lo usa para pagar. JSON de entrada, JSON de salida.

POST /v1/tokenize Scope: tokenize

Cuerpo de la solicitud

{
  "card_number": "4111111111111111",
  "expiry":      "12/26",
  "cvv":         "123"
}

Resposta 200 OK

{
  "token":      "tok_pci_eu_a1b2c3d4e5f6",
  "last_four": "1111",
  "brand":     "visa",
  "expires_at": "2026-12-31"
}
POST /v1/forward Scope: forward

Cuerpo de la solicitud

{
  "token":      "tok_pci_eu_a1b2c3d4e5f6",
  "target_url": "https://psp.eu/charge",
  "amount":     9900,
  "currency":   "EUR"
}

Resposta (del PSP, proxiada)

{
  "status":         "authorized",
  "transaction_id": "txn_9f8e7d6c",
  "amount":         9900,
  "currency":       "EUR"
}
Solicitudes firmadas
Latencia media inferior a 50 ms
REST + Webhook
Eventos en Tiempo Real

Webhooks y notificaciones

Cuando ocurre algo (token creado, pago enviado, error), te enviamos un evento en tiempo real a tu endpoint. Cada mensaje está firmado: puedes verificarlo en el servidor.

Si la entrega falla, reintentamos hasta 5 veces con intervalos crecientes. También puedes relanzar manualmente desde el dashboard en las 72 horas siguientes.

Tipos de Eventos Soportados

token.created Nuevo token generado
token.used Token enviado al PSP
token.expired Token alcanzó el TTL
token.deleted Token eliminado a petición
forward.success PSP devolvió 2xx
forward.failure PSP devolvió error

Ejemplo de Payload Webhook

POST tu-servidor.com/webhooks/pci LIVE
{
  "event":     "token.created",
  "timestamp": "2026-04-03T10:15:30Z",
  "data": {
    "token":       "tok_pci_eu_a1b2c3d4e5f6",
    "last_four":   "1111",
    "brand":       "visa",
    "merchant_id": "mrc_xyz789"
  },
  "signature": "sha256=4a8b9c..."  // HMAC-SHA256
}

Verificación de firma

Cada webhook incluye la cabecera X-PCI-Signature. Calcula el HMAC-SHA256 del body con tu secret y compáralo con la firma. Si no coincide, rechaza la solicitud.

Anti-replay Firma verificable 5 reintentos automáticos
Integração

SDK y formas de integrarte

SDK en Node, Python y PHP, o campos hosted en iFrame. Elige el que se adapta a tu stack.

JS

SDK JavaScript

npm
import PCIProxy from '@pci-proxy-eu/js';

const pci = new PCIProxy({
  merchantId: 'mrc_xyz789'
});

const { token } = await pci.tokenize({
  cardNumber: '4111...'
});
Node.js 18+ · Browser · TypeScript incluido
PY

SDK Python

PyPI
from pci_proxy_eu import Client

client = Client(
  merchant_id="mrc_xyz789",
  api_key="sk_live_..."
)

result = client.tokenize(
  card_number="4111..."
)
Python 3.9+ · AsyncClient disponible
PHP

SDK PHP

Composer
use PCIProxyEU\Client;

$client = new Client(
  merchantId: 'mrc_xyz789',
  apiKey: 'sk_live_...'
);

$result = $client->tokenize([
  'card_number' => '4111...'
]);
PHP 8.1+ · Java y .NET disponibles
Campos hosted

iFrames seguros para el checkout

Para permanecer en SAQ A: los campos de tarjeta se renderizan en iFrames nuestros. Los datos de tarjeta nunca pasan por tu DOM.

hosted-fields.html
<div id="card-number"></div>
<div id="card-expiry"></div>
<div id="card-cvv"></div>

<script>
  PCIProxy.hostedFields({
    merchantId: 'mrc_xyz789',
    fields: {
      cardNumber: '#card-number',
      expiry:     '#card-expiry',
      cvv:        '#card-cvv'
    },
    onTokenize: (result) => {
      // solo token, nunca el número de tarjeta
      console.log(result.token);
    }
  });
</script>
checkout.tu-tienda.com

Datos de Pago

4111 1111 1111 •••• iFrame
12/27 iFrame
••• iFrame

Datos de tarjeta nunca en tu servidor

SAQ A

Menos obrigações PCI

CSS

Estilo personalizable

Mobile

Responsive

Listo para integrar?

Saiba o que é um PCI Proxy, profundiza en la tokenización o consulta cómo los programadores usan la plataforma.