Udviklere
Tre kald og en webhook.
Gateway er et hostet checkout, så integrationen er bevidst lille: opret en ordre, send kunden til siden, verificér det signerede resultat. Det her er hele overfladen — betalings-UI'et, metodelogikken, 3-D Secure, wallets og kvitteringer er vores at bygge og holde ajour.
Overblik
Det, du integrerer mod.
- REST over HTTPS
- JSON ind, JSON ud
- Bearer API-nøgler
- Idempotensnøgler
- Signerede webhooks
- Replay-beskyttelse
- Test- og live-tilstand
- iOS- og Android-SDK'er
- Butiksplugins
- Embedded felter
Quickstart
Fra ingenting til en betalt ordre.
Hele happy path. Beløb er i mindste enhed, referencer er dine egne, og checkout-URL'en er dér, du sender kunden hen. API-basis-URL'en udleveres sammen med dine sandbox-nøgler — eksportér den som PROTOCORE_API_BASE, så kører kaldene nedenfor præcis som skrevet.
Opret ordren
Ét kald med beløb, valuta og din egen reference. Idempotensnøglen genererer du selv — en gentaget anmodning returnerer den oprindelige ordre i stedet for at oprette en ny.
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"
}'Send kunden til checkout
Svaret indeholder en checkout-URL på din egen checkout-host — den, der blev udstedt med din sandbox, eller dit eget domæne, når du har peget det på os. Omdirigér til den, eller åbn den i SDK'et; på den side bor metoderne, wallets og 3-D Secure, så der er intet at bygge hos dig.
{
"id": "ord_2h4Kq9wRz",
"reference": "9F21-0716",
"amount": 4900,
"currency": "EUR",
"status": "pending",
"checkout_url": "https://<your-checkout-host>/c/2h4Kq9wRz"
}Verificér det signerede resultat
Når betalingen er gennemført, når en signeret hændelse dit endpoint. Verificér signaturen mod din webhook-secret, før du stoler på noget, og levér derefter mod den reference, du allerede kender.
{
"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" }
}
}Reference
De endpoints, du faktisk får brug for.
Der er mere i dokumentationen, men dette er det sæt, de fleste integrationer aldrig vokser ud over.
Webhooks
Det, dit backend hører om.
Hver hændelse bærer den ordrereference, du oprettede, så din handler kan være en switch på typen og et opslag hos dig selv.
Tjek signaturen, før du stoler på body'en.
Hver levering har et tidsstempel og en HMAC-signatur over den rå body. Sammenlign i konstant tid, afvis alt ældre end dit tolerancevindue, og behandl et duplikeret hændelses-id som allerede håndteret — vi forsøger igen ved svar uden for 2xx, så din handler bør også være idempotent.
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;
}Garantier
De egenskaber, du kan bygge på.
Idempotente oprettelser
Enhver ordreoprettelse tager en idempotensnøgle. En gentaget anmodning — efter timeout, deploy eller genlevering fra en kø — returnerer den oprindelige ordre i stedet for at trække penge to gange.
Signerede, replay-beskyttede hændelser
Webhooks bærer en tidsstemplet HMAC-signatur og et stabilt hændelses-id. Leveringer forsøges igen med backoff, indtil dit endpoint svarer 2xx, så et deploy-vindue ikke koster en betaling.
Én reference, hele vejen
Den reference, du angiver ved oprettelsen, optræder på checkout, kvittering, webhook, udbetaling og enhver senere refundering. Der er ingen anden identifikator at mappe mellem systemer.
Testtilstand er samme kodesti
Testnøgler kører de identiske flows mod testsessioner. Det, der består i test, er det, der går i produktion — forskellen er, hvilke nøgler du sender, ikke hvilke endpoints du kalder.
Testdata
Sådan afprøver du de stier, der betyder noget.
Bag hver sti herunder ligger et testkort, som fremgår sammen med dine nøgler, når sandboxen udstedes — numrene er per sandbox og offentliggøres ikke her, så de forbliver korrekte, når schemes' testintervaller ændres. Adfærden er under alle omstændigheder deterministisk: En test kan lige så let asserte på et afslag som på en succes.
Hent nøgler og kom i gang.
En sandbox-forhandler med API-nøgler, webhook-secrets og alle betalingsmetoder aktiveret — plus den fulde reference, så dit team kan integrere, før noget er underskrevet.