Come funziona

Come funziona PCI Proxy

Tu ci mandi i dati carta. Noi li tokenizziamo, li custodiamo nel vault PCI DSS e ti restituiamo un token. Nei tuoi sistemi non finisce mai il numero di carta.

Flusso Dati

Il flusso in 5 passi

Dal momento in cui il cliente inserisce la carta fino al token che salvi nel tuo gestionale: ecco cosa succede passo per passo.

Fase 1

Dati carta in ingresso

Checkout sul sito, chiamata API o modulo call center

Fase 2

PCI Proxy intercetta

Riceviamo i dati carta dal payload HTTP prima che arrivino ai tuoi server

Fase 3

Tokenizzazione

Cifriamo il numero di carta e generiamo un token univoco

Fase 4

Vault sicuro

Il numero di carta resta cifrato nel vault PCI DSS Livello 1, solo in UE

Fase 5

Token a te

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

Tokenizzazione

Cosa succede quando tokenizziamo

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

01

Passo

Riconosciamo i dati carta

Analizziamo le richieste in entrata e individuiamo i numeri di carta, su JSON, form o multipart. Non devi cambiare il tuo codice: ci colleghi il flusso e basta.

02

Passo

Creiamo il token

Ogni token inizia con tok_pci_eu_ e include le ultime quattro cifre, il circuito e la scadenza. Così in interfaccia puoi mostrare "Visa che termina con 1234" senza avere il numero di carta.

03

Passo

Stesso token, stessa carta

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

pci-proxy · esempio live ATTIVO

→ 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",

"carta_nei_tuoi_sistemi": false

}

Numero di carta mai sui tuoi server · Vault in UE · Registrato
Recupero carta

Quando serve il numero di carta

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

1

Quando succede

Quando devi addebitare una carta salvata, invii il token al nostro endpoint forward. Noi risolviamo il numero di carta nel vault e lo passiamo al PSP via connessione cifrata. Non compare nei tuoi log.

2

Chi può farlo

Solo chi ha una chiave API con permesso forward o detokenize. Puoi limitare per IP, ambiente e volume di richieste.

3

Tutto tracciato

Ogni recupero viene registrato: chi ha chiesto, quando, verso quale PSP. I log restano almeno 12 mesi e li puoi consultare da dashboard o API.

Livelli di protezione

Livello 1 Chiave API firmata

Ogni richiesta è autenticata

Livello 2 Whitelist IP

Solo dai tuoi server autorizzati

Livello 3 Connessione cifrata al PSP

TLS con certificati verificati

Livello 4 Log di audit

Conservati 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 della richiesta

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

Risposta 200 OK

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

Corpo della richiesta

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

Risposta (dal PSP, proxyata)

{
  "status":         "authorized",
  "transaction_id": "txn_9f8e7d6c",
  "amount":         9900,
  "currency":       "EUR"
}
Richieste firmate
Latenza media sotto 50 ms
REST + Webhook
Eventi in Tempo Reale

Webhook e notifiche

Quando succede qualcosa (token creato, pagamento inviato, errore), ti mandiamo un evento in tempo reale sul tuo endpoint. Ogni messaggio è firmato: puoi verificarlo lato server.

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

Tipi di Eventi 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 tuo-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 coincide, rifiuta la richiesta.

Anti-replay Firma verificabile 5 retry automatici
Integrazione

SDK e modi per integrarti

SDK in Node, Python e PHP, oppure campi hosted in iFrame. Scegli quello che si adatta al tuo 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 incluso
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 disponibile
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 e .NET disponibili
Campi hosted

iFrame sicuri per il checkout

Per restare in SAQ A: i campi carta sono renderizzati in iFrame nostri. I dati carta non passano mai dal 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) => {
      // solo token, mai il numero di carta
      console.log(result.token);
    }
  });
</script>
checkout.il-tuo-negozio.com

Dati di Pagamento

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

Dati carta mai sul tuo server

SAQ A

Meno obblighi 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.