Fejlesztőknek

Három hívás és egy webhook.

A Gateway egy hosted checkout, ezért az integráció szándékosan kicsi: hozz létre egy rendelést, irányítsd az ügyfelet az oldalra, ellenőrizd az aláírt eredményt. Az alábbiakban a teljes felület szerepel — a fizetési felületet, a módszerek logikáját, a 3-D Secure-t, a walleteket és a nyugtákat mi építjük és tartjuk naprakészen.

Dióhéjban

Mivel integrálsz.

  • REST HTTPS felett
  • JSON be, JSON ki
  • Bearer API-kulcsok
  • Idempotencia-kulcsok
  • Aláírt webhookok
  • Replay-védelem
  • Teszt és éles mód
  • iOS és Android SDK-k
  • Webshop-pluginek
  • Beágyazott mezők

Gyorsindítás

A semmitől a kifizetett rendelésig.

A teljes sikeres folyamat. Az összegek a legkisebb pénzegységben értendők, a hivatkozások a tieid, a checkout URL pedig az, ahová az ügyfelet átirányítod. Az API alap-URL-t a sandbox-kulcsokkal együtt kapod — exportáld PROTOCORE_API_BASE néven, és az alábbi hívások pontosan így működnek.

01

Rendelés létrehozása

Egyetlen hívás az összeggel, a pénznemmel és a saját hivatkozásoddal. Az idempotencia-kulcsot te generálod — az újraküldött kérés az eredeti rendelést adja vissza, nem hoz létre másodikat.

POST /v1/orders
curl -X POST "$PROTOCORE_API_BASE/v1/orders" \
  -H "Authorization: Bearer $PROTOCORE_API_KEY" \
  -H "Idempotency-Key: 9F21-0716" \
  -H "Content-Type: application/json" \
  -d '{
        "amount": 4900,
        "currency": "EUR",
        "reference": "9F21-0716",
        "line_items": [
          { "name": "Brand identity sprint", "amount": 3850 },
          { "name": "Typeface licensing",   "amount": 600 },
          { "name": "Rush delivery",        "amount": 400 }
        ],
        "return_url": "https://arcstudio.ro/thanks"
      }'
02

Az ügyfél átirányítása a checkoutra

A válasz tartalmaz egy checkout URL-t a saját checkout hosztodon — azon, amelyet a sandboxszal kaptál, vagy a saját domaineden, ha ráirányítod hozzánk. Irányítsd oda az ügyfelet, vagy nyisd meg az SDK-ban; a módszerek, a walletek és a 3-D Secure ezen az oldalon élnek, így neked nincs mit építened.

201 Created
{
  "id": "ord_2h4Kq9wRz",
  "reference": "9F21-0716",
  "amount": 4900,
  "currency": "EUR",
  "status": "pending",
  "checkout_url": "https://<your-checkout-host>/c/2h4Kq9wRz"
}
03

Az aláírt eredmény ellenőrzése

A fizetés befejeztével egy aláírt esemény érkezik a végpontodra. Mielőtt bármiben megbíznál, ellenőrizd az aláírást a webhook secreted alapján, majd teljesíts a már ismert hivatkozás szerint.

POST /your/webhook — order.paid
{
  "type": "order.paid",
  "id": "evt_7Ka2Lm",
  "created": "2026-07-23T09:41:02Z",
  "data": {
    "id": "ord_2h4Kq9wRz",
    "reference": "9F21-0716",
    "amount": 4900,
    "currency": "EUR",
    "method": "usdc",
    "settlement": { "currency": "EUR", "amount": 4900, "rate": "0.9184" }
  }
}

Referencia

Azok a végpontok, amelyeket tényleg használni fogsz.

A dokumentációban több is van, de a legtöbb integráció ennél a készletnél tovább sosem jut.

POST /v1/orders
Rendelés létrehozása, és a checkout URL visszaadása. Idempotencia-kulcsot fogad.
GET /v1/orders/:id
A rendelés aktuális állapota — státusz, módszer, elszámolás és visszatérítések.
POST /v1/orders/:id/refunds
Visszatérítés a rendelésre, teljes vagy részleges, kötelező indoklással.
POST /v1/orders/:id/void
Az engedélyezés feloldása az elszámolás előtt, így egyáltalán nem mozog pénz.
POST /v1/links
Fizetési link létrehozása — egyszer használatos vagy gyűjtő, opcionális lejárattal.
GET /v1/payouts/:id
Egy elszámolási köteg és a rendelések, amelyek fedezték, tételesen felsorolt díjakkal.
POST /v1/customers/:id/cards
Kártya tárolása (vault) egykattintásos és ismétlődő terheléshez; tokenhivatkozást ad vissza.
POST /v1/subscriptions
Tárolt kártya terhelése ütemezés szerint; minden ciklus külön rendelést hoz létre.

Webhookok

Miről értesül a backendod.

Minden esemény tartalmazza az általad létrehozott rendelés hivatkozását, így a kezelőd egy típus szerinti switch és egy saját oldali keresés is lehet.

order.paid
Az engedélyezés és a capture sikerült — teljesíts a hivatkozás alapján.
order.failed
A fizetés nem fejeződött be, olyan okkal, amelyre egy operátor lépni tud.
order.refunded
Visszatérítés történt, teljes vagy részleges, indoklással és megjegyzéssel.
order.disputed
Chargeback indult, a bizonyítékok már a rendeléshez csatolva.
payout.settled
Egy elszámolási köteg elindult a számlád felé, a mögötte álló rendelések listájával.
subscription.charged
Egy ismétlődő ciklus saját rendelést és nyugtát hozott létre.
Ellenőrzés

Az aláírást ellenőrizd, mielőtt a törzsben megbízol.

Minden kézbesítés időbélyeget és a nyers törzsre számolt HMAC-aláírást tartalmaz. Az összehasonlítás konstans idejű legyen, utasíts el mindent, ami régebbi a tűrési ablakodnál, a duplikált eseményazonosítót pedig kezeld már feldolgozottként — nem 2xx válasz esetén újrapróbálkozunk, ezért a kezelődnek is idempotensnek kell lennie.

Node — aláírás-ellenőrzés
import { createHmac, timingSafeEqual } from "node:crypto";

export function verify(rawBody, header, secret) {
  const [ts, sig] = header.split(",").map((p) => p.split("=")[1]);
  const expected = createHmac("sha256", secret)
    .update(`${ts}.${rawBody}`)
    .digest("hex");

  const a = Buffer.from(sig, "hex");
  const b = Buffer.from(expected, "hex");
  if (a.length !== b.length || !timingSafeEqual(a, b)) return false;

  // Reject replays outside a five-minute window.
  return Math.abs(Date.now() / 1000 - Number(ts)) < 300;
}

Garanciák

Tulajdonságok, amelyekre építhetsz.

01

Idempotens létrehozás

Minden rendeléslétrehozás idempotencia-kulcsot fogad. Az újraküldött kérés — időtúllépés, deploy vagy üzenetsor-újrakézbesítés után — az eredeti rendelést adja vissza, nem terhel kétszer.

02

Aláírt, replay-védett események

A webhookok időbélyeges HMAC-aláírást és stabil eseményazonosítót kapnak. A kézbesítés backoffal újrapróbálkozik, amíg a végpontod 2xx-szel nem válaszol, így egy deploy-ablak nem veszít el fizetést.

03

Egy hivatkozás, végig

A létrehozáskor megadott hivatkozás megjelenik a checkouton, a nyugtán, a webhookban, a kifizetésen és minden későbbi visszatérítésen. Nincs második azonosító, amelyet rendszerek között kellene megfeleltetni.

04

A teszt mód ugyanaz a kódút

A teszt kulcsok ugyanazokat a folyamatokat futtatják teszt munkameneteken. Ami tesztben átmegy, az megy élesbe — a különbség a küldött kulcsban van, nem a hívott végpontokban.

Tesztadatok

Hogyan próbáld ki a fontos útvonalakat.

Minden alábbi útvonalhoz tartozik egy tesztkártya, amelyet a sandbox kiadásakor a kulcsokkal együtt kapsz meg. A számokat sandboxonként adjuk meg, és nem tesszük közzé itt, így azok a kártyatársaságok tesztsávjainak változásakor is helyesek maradnak. A működés mindkét esetben determinisztikus: egy teszt ugyanolyan könnyen ellenőrizhet elutasítást, mint sikeres tranzakciót.

Azonnali jóváhagyás
Engedélyez és terhel 3-D Secure kihívás nélkül — az ideális eset.
3-D Secure kihívás
Végigvihető kihívást kényszerít ki, így a visszatérési szakaszt is tesztelheted.
Soft decline
Fedezethiány miatt elutasít, majd egy alternatív útvonalon újrapróbálkozik.
Hard decline
Lejárt kártyára hivatkozva véglegesen elutasít, újrapróbálkozás nélkül.
USDC tesztnetworkök
Teszthálózati USDC Ethereumon, Base-en és Solanán, fix árfolyamon.
Átutalás-szimuláció
Jelölj egy teszt vIBAN-átutalást megérkezettnek, hogy a rendelés fizetett állapotba lépjen.

Kérj kulcsokat, és kezdj bele.

Egy sandbox kereskedői fiók API-kulcsokkal, webhook-titkokkal és minden bekapcsolt fizetési móddal — plusz a teljes referencia, hogy a csapatod már az aláírás előtt integrálhasson.