Come funziona

Come funziona PCI Proxy

Ci invii i dati della carta. Noi li tokenizziamo, li conserviamo in un vault PCI DSS e restituiamo un token. I tuoi sistemi non ricevono mai il numero carta.

Flusso dati

Il flusso in 5 fasi

Dal momento in cui il cliente inserisce la carta al token che salvi nel tuo back office: ecco cosa succede passo dopo passo.

Fase 1

Dati carta in entrata

Checkout del sito, chiamata API o modulo call center

Fase 2

PCI Proxy intercetta

Riceviamo i dati carta dal payload HTTP prima che raggiungano i tuoi server

Fase 3

Tokenizzazione

Cifriamo il numero carta e generiamo un token univoco

Fase 4

Vault sicuro

Il numero carta rimane cifrato nel nostro vault PCI DSS Level 1, solo in EU

Fase 5

Token a te

Ricevi il token e lo usi per pagamenti, abbonamenti o rimborsi

Tokenizzazione

Cosa succede quando tokenizziamo

Sostituiamo il numero carta con un token. Non vedi mai la carta in chiaro nei tuoi sistemi. Ecco i tre passaggi interni.

01

Passo

Rileviamo i dati carta

Analizziamo le richieste in arrivo e identifichiamo i numeri carta in JSON, form o payload multipart. Nessuna modifica al codice da parte tua: collega il tuo flusso e hai finito.

02

Passo

Creiamo il token

Ogni token inizia con tok_pci_eu_ e include le ultime quattro cifre, il circuito e la scadenza. La tua UI può mostrare "Visa che termina con 1234" senza mai detenere il numero carta.

03

Passo

Stesso token, stessa carta

Se la stessa carta arriva di nuovo, restituiamo lo stesso token. Utile per abbonamenti e carte salvate. La mappatura rimane solo nel vault e non è esposta tramite API.

pci-proxy · live example ACTIVE

→ POST /v1/tokenize

{

"card_number": "4111 1111 1111 1234",

"expiry": "12/26"

}

AES-256 · EU vault

← 200 OK · 47ms

{

"token": "tok_pci_eu_a1b2c3d4e5f61234",

"last_four": "1234",

"brand": "visa",

"card_in_your_systems": false

}

Numero carta mai sui tuoi server · Vault EU · Registrato
Recupero carta

Quando serve il numero carta

Per autorizzare un pagamento il PSP ha bisogno del numero carta reale. Tu invii il token: noi recuperiamo la carta dal vault e la inoltriamo in modo sicuro. Non la vedi mai.

1

Quando accade

Quando devi addebitare una carta salvata, invia il token al nostro endpoint forward. Risolviamo il numero carta nel vault e lo passiamo al PSP tramite connessione cifrata. Non appare nei tuoi log.

2

Chi può farlo

Solo i titolari di una chiave API con permesso forward o detokenize. Puoi restringere per IP, ambiente e volume di richieste.

3

Completamente auditato

Ogni recupero viene registrato: chi lo ha richiesto, quando e quale PSP. I log sono conservati per almeno 12 mesi e sono disponibili dalla dashboard o tramite API.

Livelli di protezione

Livello 1 Chiave API firmata

Ogni richiesta viene autenticata

Livello 2 IP whitelist

Solo dai tuoi server autorizzati

Livello 3 Connessione cifrata al PSP

TLS con certificati verificati

Livello 4 Log di audit

Conservati per almeno 12 mesi

API

Due endpoint, flusso chiaro

Autenticati con la tua chiave API. Un endpoint crea il token, l'altro lo usa per pagare. JSON in entrata, JSON in uscita.

POST /v1/tokenize Scope: tokenize

Corpo richiesta

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

Response 200 OK

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

Corpo richiesta

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

Risposta (dal PSP, proxied)

{
  "status":         "authorized",
  "transaction_id": "txn_9f8e7d6c",
  "amount":         9900,
  "currency":       "EUR"
}
Richieste firmate
Latenza media inferiore a 50 ms
REST + Webhooks
Eventi in tempo reale

Webhook e notifiche

Quando accade qualcosa (token creato, pagamento inviato, errore), inviamo un evento in tempo reale al tuo endpoint. Ogni messaggio è firmato così puoi verificarlo lato server.

Se la consegna fallisce, riproviamo fino a 5 volte con intervalli crescenti. Puoi anche riprodurre manualmente dalla dashboard entro 72 ore.

Tipi di evento supportati

token.created Nuovo token generato
token.used Token inviato al PSP
token.expired Token ha raggiunto il TTL
token.deleted Token rimosso su richiesta
forward.success PSP ha restituito 2xx
forward.failure PSP ha restituito errore

Esempio di payload webhook

POST your-server.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
}

Verifica della firma

Ogni webhook include l'header X-PCI-Signature. Calcola HMAC-SHA256 del body con il tuo secret e confrontalo con la firma. Se non corrispondono, rifiuta la richiesta.

Anti-replay Firma verificabile 5 tentativi automatici
Integrazione

SDK e modalità di integrazione

SDK per Node, Python e PHP, o campi ospitati in iFrame. Scegli ciò che si adatta al tuo stack.

JS

JavaScript SDK

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 included
PY

Python SDK

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 available
PHP

PHP SDK

Composer
use PCIProxyEU\Client;

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

$result = $client->tokenize([
  'card_number' => '4111...'
]);
PHP 8.1+ · Java and .NET available
Campi ospitati

iFrame sicuri per il checkout

Per restare in SAQ A: i campi carta vengono renderizzati nei nostri iFrame. I dati carta non passano mai attraverso il tuo 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) => {
      // token only, never the card number
      console.log(result.token);
    }
  });
</script>
checkout.your-shop.com

Dettagli pagamento

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

Dati carta mai sul tuo server

SAQ A

Meno oneri PCI

CSS

Stile personalizzabile

Mobile

Responsive

Pronto a integrare?

Scopri cos'è un PCI Proxy, approfondisci la tokenizzazione o guarda come gli sviluppatori usano la piattaforma.