Comment ça fonctionne

Comment PCI Proxy fonctionne

Vous nous envoyez des données de carte. Nous les tokenisons, les stockons dans un vault PCI DSS et vous renvoyons un token. Vos systèmes ne reçoivent jamais le numéro de carte.

Flux de données

Le flux en 5 étapes

Du moment où le client saisit sa carte jusqu'au token que vous enregistrez dans votre back-office : voici ce qui se passe étape par étape.

Phase 1

Données entrantes

Checkout web, appel API ou formulaire centre d'appels

Phase 2

PCI Proxy intercepte

Nous recevons les données de carte du payload HTTP avant qu'elles atteignent vos serveurs

Phase 3

Tokenisation

Nous chiffrons le numéro de carte et générons un token unique

Phase 4

Vault sécurisé

Le numéro de carte reste chiffré dans notre vault PCI DSS Niveau 1, EU uniquement

Phase 5

Token vers vous

Vous recevez le token et l'utilisez pour les paiements, abonnements ou remboursements

Tokenisation

Ce qui se passe lors de la tokenisation

Nous remplaçons le numéro de carte par un token. Vous ne voyez jamais la carte en clair dans vos systèmes. Voici les trois étapes internes.

01

Étape

Nous détectons les données de carte

Nous analysons les requêtes entrantes et identifions les numéros de carte dans les payloads JSON, formulaires ou multipart. Aucune modification de votre code : connectez votre flux et c'est terminé.

02

Étape

Nous créons le token

Chaque token commence par tok_pci_eu_ et inclut les quatre derniers chiffres, le réseau et la date d'expiration. Votre interface peut ainsi afficher « Visa se terminant par 1234 » sans jamais détenir le numéro de carte.

03

Étape

Même token, même carte

Si la même carte arrive de nouveau, nous renvoyons le même token. Utile pour les abonnements et les cartes enregistrées. Le mapping reste uniquement dans le vault et n'est pas exposé via l'API.

pci-proxy · exemple en direct ACTIF

→ POST /v1/tokenize

{

"card_number": "4111 1111 1111 1234",

"expiry": "12/26"

}

AES-256 · Vault EU

← 200 OK · 47ms

{

"token": "tok_pci_eu_a1b2c3d4e5f61234",

"last_four": "1234",

"brand": "visa",

"card_in_your_systems": false

}

Numéro de carte jamais sur vos serveurs · Vault EU · Journalisé
Récupération de la carte

Quand le numéro de carte est nécessaire

Pour autoriser un paiement, le PSP a besoin du vrai numéro de carte. Vous envoyez le token : nous récupérons la carte du vault et la transmettons de manière sécurisée. Vous ne la voyez jamais.

1

Quand cela se produit

Lorsque vous devez débiter une carte enregistrée, envoyez le token à notre endpoint de transmission. Nous résolvons le numéro de carte dans le vault et le transmettons au PSP via une connexion chiffrée. Il n'apparaît pas dans vos logs.

2

Qui peut le faire

Uniquement les détenteurs d'une clé API avec la permission forward ou detokenize. Vous pouvez restreindre par IP, environnement et volume de requêtes.

3

Entièrement audité

Chaque récupération est journalisée : qui l'a demandée, quand, et quel PSP. Les logs sont conservés au moins 12 mois et sont accessibles depuis le tableau de bord ou l'API.

Couches de protection

Niveau 1 Clé API signée

Chaque requête est authentifiée

Niveau 2 Liste blanche d'IP

Uniquement depuis vos serveurs autorisés

Niveau 3 Connexion chiffrée vers le PSP

TLS avec certificats vérifiés

Niveau 4 Logs d'audit

Conservés au moins 12 mois

API

Deux endpoints, flux clair

Authentifiez-vous avec votre clé API. Un endpoint crée le token, l'autre l'utilise pour payer. JSON en entrée, JSON en sortie.

POST /v1/tokenize Scope: tokenize

Corps de la requête

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

Réponse 200 OK

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

Corps de la requête

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

Réponse (du PSP, proxifiée)

{
  "status":         "authorized",
  "transaction_id": "txn_9f8e7d6c",
  "amount":         9900,
  "currency":       "EUR"
}
Requêtes signées
Latence moyenne inférieure à 50 ms
REST + Webhooks
Événements en temps réel

Webhooks et notifications

Quand un événement se produit (token créé, paiement envoyé, erreur), nous envoyons un événement en temps réel à votre endpoint. Chaque message est signé pour que vous puissiez le vérifier côté serveur.

En cas d'échec de livraison, nous réessayons jusqu'à 5 fois avec des intervalles croissants. Vous pouvez aussi rejouer manuellement depuis le tableau de bord pendant 72 heures.

Types d'événements pris en charge

token.created Nouveau token généré
token.used Token envoyé au PSP
token.expired Token a atteint sa TTL
token.deleted Token supprimé sur demande
forward.success PSP a renvoyé 2xx
forward.failure PSP a renvoyé une erreur

Exemple de 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
}

Vérification de signature

Chaque webhook inclut l'en-tête X-PCI-Signature. Calculez le HMAC-SHA256 du corps avec votre secret et comparez-le à la signature. S'ils ne correspondent pas, rejetez la requête.

Anti-rejeu Signature vérifiable 5 tentatives automatiques
Intégration

SDK et modes d'intégration

SDK pour Node, Python et PHP, ou champs hébergés en iFrames. Choisissez ce qui correspond à votre 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+ · Navigateur · TypeScript inclus
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 et .NET disponibles
Champs hébergés

iFrames sécurisés pour le checkout

Pour rester en SAQ A : les champs de carte sont rendus dans nos iFrames. Les données de carte ne transitent jamais par votre 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 uniquement, jamais le numéro de carte
      console.log(result.token);
    }
  });
</script>
checkout.your-shop.com

Détails de paiement

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

Données de carte jamais sur votre serveur

SAQ A

Moins de contraintes PCI

CSS

Style personnalisable

Mobile

Responsive

Prêt à intégrer ?

Découvrez ce qu'est un PCI Proxy, explorez la tokenisation en profondeur ou voyez comment les développeurs utilisent la plateforme.