Jak to działa

Jak działa PCI Proxy

Przesyłasz nam dane karty. My dokonujemy tokenizacji, przechowujemy je w vault PCI DSS i zwracamy token. Twoje systemy nigdy nie otrzymują numeru karty.

Przepływ danych

Przepływ w 5 krokach

Od chwili, gdy klient wpisuje dane karty, do tokenu zapisanego w Twoim back office: oto co dzieje się krok po kroku.

Faza 1

Dane karty wchodzą

Kasa na stronie, wywołanie API lub formularz call center

Faza 2

PCI Proxy przechwytuje

Odbieramy dane karty z ładunku HTTP zanim dotrą do Twoich serwerów

Faza 3

Tokenizacja

Szyfrujemy numer karty i generujemy unikalny token

Faza 4

Bezpieczny vault

Numer karty pozostaje zaszyfrowany w naszym vault PCI DSS Level 1, wyłącznie w UE

Faza 5

Token do Ciebie

Otrzymujesz token i używasz go do płatności, subskrypcji lub zwrotów

Tokenizacja

Co dzieje się podczas tokenizacji

Zastępujemy numer karty tokenem. W Twoich systemach nigdy nie pojawia się numer karty w postaci jawnej. Oto trzy wewnętrzne kroki.

01

Krok

Wykrywamy dane karty

Analizujemy przychodzące żądania i identyfikujemy numery kart w JSON, formularzach lub ładunkach multipart. Bez zmian w Twoim kodzie: podłącz swój przepływ i gotowe.

02

Krok

Tworzymy token

Każdy token zaczyna się od tok_pci_eu_ i zawiera cztery ostatnie cyfry, schemat oraz datę ważności. Dzięki temu Twój interfejs może wyświetlać „Visa kończąca się na 1234" bez przechowywania numeru karty.

03

Krok

Ten sam token, ta sama karta

Jeśli ta sama karta pojawi się ponownie, zwracamy ten sam token. Przydatne w subskrypcjach i zapisanych kartach. Mapowanie pozostaje wyłącznie w vault i nie jest udostępniane przez API.

pci-proxy · przykład na żywo AKTYWNY

→ 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

}

Numer karty nigdy na Twoich serwerach · vault UE · rejestrowane
Pobieranie karty

Kiedy numer karty jest potrzebny

Aby autoryzować płatność, PSP potrzebuje prawdziwego numeru karty. Przesyłasz token: pobieramy kartę z vault i przekazujemy ją bezpiecznie. Ty jej nigdy nie widzisz.

1

Kiedy to następuje

Gdy chcesz obciążyć zapisaną kartę, wyślij token do naszego endpointu forward. Rozwiązujemy numer karty w vault i przekazujemy go do PSP przez szyfrowane połączenie. Numer nie pojawia się w Twoich logach.

2

Kto może to zrobić

Wyłącznie posiadacze klucza API z uprawnieniami forward lub detokenize. Możesz ograniczyć dostęp według adresu IP, środowiska i wolumenu żądań.

3

W pełni audytowane

Każde pobranie jest rejestrowane: kto je zainicjował, kiedy i do którego PSP. Logi są przechowywane przez co najmniej 12 miesięcy i dostępne z poziomu dashboardu lub API.

Warstwy ochrony

Poziom 1 Podpisany klucz API

Każde żądanie jest uwierzytelniane

Poziom 2 Biała lista IP

Tylko z Twoich autoryzowanych serwerów

Poziom 3 Szyfrowane połączenie z PSP

TLS z weryfikowanymi certyfikatami

Poziom 4 Logi audytowe

Przechowywane przez co najmniej 12 miesięcy

API

Dwa endpointy, przejrzysty przepływ

Uwierzytelnij się kluczem API. Jeden endpoint tworzy token, drugi używa go do płatności. JSON na wejściu, JSON na wyjściu.

POST /v1/tokenize Zakres: tokenize

Treść żądania

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

Odpowiedź 200 OK

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

Treść żądania

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

Odpowiedź (od PSP, proxied)

{
  "status":         "authorized",
  "transaction_id": "txn_9f8e7d6c",
  "amount":         9900,
  "currency":       "EUR"
}
Podpisane żądania
Średnie opóźnienie poniżej 50 ms
REST + Webhooks
Zdarzenia w czasie rzeczywistym

Webhooki i powiadomienia

Gdy coś się wydarzy (token utworzony, płatność wysłana, błąd), wysyłamy zdarzenie w czasie rzeczywistym na Twój endpoint. Każda wiadomość jest podpisana, dzięki czemu możesz ją zweryfikować po stronie serwera.

Jeśli dostarczenie się nie powiedzie, ponowimy próbę do 5 razy z rosnącymi odstępami. Możesz też ręcznie odtworzyć zdarzenie z dashboardu w ciągu 72 godzin.

Obsługiwane typy zdarzeń

token.created Nowy token wygenerowany
token.used Token wysłany do PSP
token.expired Token osiągnął swój TTL
token.deleted Token usunięty na żądanie
forward.success PSP zwrócił 2xx
forward.failure PSP zwrócił błąd

Przykładowy ładunek webhooka

POST twoj-serwer.pl/webhooks/pci NA ŻYWO
{
  "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
}

Weryfikacja podpisu

Każdy webhook zawiera nagłówek X-PCI-Signature. Oblicz HMAC-SHA256 treści z Twoim sekretem i porównaj z podpisem. Jeśli się nie zgadzają, odrzuć żądanie.

Ochrona przed powtórzeniem Weryfikowalny podpis 5 automatycznych prób
Integracja

SDK i sposoby integracji

SDK dla Node, Python i PHP lub Hosted Fields w iFrame. Wybierz rozwiązanie pasujące do Twojego stosu technologicznego.

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+ · Przeglądarka · TypeScript w zestawie
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 dostępny
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 i .NET dostępne
Hosted Fields

Bezpieczne iFrame dla kasy

Aby zachować SAQ A: pola karty są renderowane w naszych iFrame. Dane karty nigdy nie przechodzą przez Twój 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) => {
      // tylko token, nigdy numer karty
      console.log(result.token);
    }
  });
</script>
checkout.twoj-sklep.pl

Dane płatności

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

Dane karty nigdy na Twoim serwerze

SAQ A

Mniejszy zakres PCI

CSS

Dostosowywalny styl

Mobile

Responsywny

Gotowy do integracji?

Dowiedz się czym jest PCI Proxy, poznaj tokenizację w szczegółach lub sprawdź, jak programiści korzystają z platformy.