Kehittäjille
Kolme kutsua ja webhook.
Gateway on hostattu checkout, joten integraatio on tarkoituksella pieni: luo tilaus, ohjaa asiakas sivulle, tarkista allekirjoitettu tulos. Tässä on koko pinta — maksukäyttöliittymä, maksutapojen logiikka, 3-D Secure, lompakot ja kuitit rakennamme ja pidämme ajan tasalla me.
Rakenne
Mitä vasten integroit.
- REST HTTPS-yhteyden yli
- JSON sisään, JSON ulos
- Bearer-API-avaimet
- Idempotenssiavaimet
- Allekirjoitetut webhookit
- Toistosuojaus
- Testi- ja tuotantotila
- iOS- ja Android-SDK:t
- Verkkokauppalisäosat
- Upotettavat kentät
Pikaopas
Tyhjästä maksettuun tilaukseen.
Koko onnistunut polku. Summat annetaan pienimmissä yksiköissä, viitteet ovat omiasi, ja checkout-URL on osoite, johon asiakas ohjataan. API:n perus-URL annetaan sandbox-avainten mukana — vie se muuttujaan PROTOCORE_API_BASE, niin alla olevat kutsut toimivat sellaisinaan.
Luo tilaus
Yksi kutsu: summa, valuutta ja oma viitteesi. Idempotenssiavaimen generoit itse — uudelleen lähetetty pyyntö palauttaa alkuperäisen tilauksen eikä luo toista.
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"
}'Ohjaa asiakas checkoutiin
Vastaus sisältää checkout-URL:n omalla checkout-hostillasi — sandboxin mukana annetulla tai omalla domainillasi, kun osoitat sen meille. Ohjaa asiakas sinne tai avaa sivu SDK:ssa; maksutavat, lompakot ja 3-D Secure löytyvät tältä sivulta, joten omalla puolellasi ei ole mitään rakennettavaa.
{
"id": "ord_2h4Kq9wRz",
"reference": "9F21-0716",
"amount": 4900,
"currency": "EUR",
"status": "pending",
"checkout_url": "https://<your-checkout-host>/c/2h4Kq9wRz"
}Tarkista allekirjoitettu tulos
Kun maksu on valmis, allekirjoitettu tapahtuma saapuu päätepisteeseesi. Tarkista allekirjoitus webhook-salaisuutta vasten ennen kuin luotat mihinkään, ja toimita sitten tilaus viitteen perusteella, jonka jo tunnet.
{
"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" }
}
}Referenssi
Päätepisteet, joita oikeasti käytät.
Dokumentaatiossa on enemmän, mutta tämä on joukko, jonka pidemmälle useimmat integraatiot eivät koskaan kasva.
Webhookit
Mistä taustajärjestelmäsi saa tiedon.
Jokaisessa tapahtumassa on luomasi tilauksen viite, joten käsittelijäsi voi olla pelkkä switch tyypin mukaan ja haku omasta järjestelmästäsi.
Tarkista allekirjoitus, ennen kuin luotat sisältöön.
Jokaisessa toimituksessa on aikaleima ja raakasisällön yli laskettu HMAC-allekirjoitus. Vertaa vakioajassa, hylkää kaikki toleranssi-ikkunaasi vanhempi ja käsittele päällekkäinen tapahtuma-id jo käsiteltynä — yritämme uudelleen, jos vastaus ei ole 2xx, joten myös käsittelijäsi on oltava idempotentti.
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;
}Takuut
Ominaisuudet, joiden varaan voit rakentaa.
Idempotentit luonnit
Jokainen tilauksen luonti ottaa idempotenssiavaimen. Uudelleen lähetetty pyyntö — aikakatkaisun, julkaisun tai jonon uudelleentoimituksen jälkeen — palauttaa alkuperäisen tilauksen eikä veloita kahdesti.
Allekirjoitetut, toistosuojatut tapahtumat
Webhookeissa on aikaleimattu HMAC-allekirjoitus ja pysyvä tapahtuma-id. Toimitukset yritetään uudelleen backoffilla, kunnes päätepisteesi vastaa 2xx, joten julkaisuikkuna ei hävitä maksua.
Yksi viite alusta loppuun
Luontivaiheessa antamasi viite näkyy checkoutissa, kuitissa, webhookissa, selvityksessä ja myöhemmässä hyvityksessä. Järjestelmien välillä ei tarvitse yhdistää toista tunnistetta.
Testitila käyttää samaa koodipolkua
Testiavaimet ajavat täsmälleen samat prosessit testisessioita vasten. Mikä läpäisee testissä, menee tuotantoon — ero on lähetettävissä avaimissa, ei kutsuttavissa päätepisteissä.
Testidata
Näin harjoitat tärkeät polut.
Jokaisen alla olevan polun takana on testikortti, joka luetellaan avaintesi mukana, kun sandbox otetaan käyttöön. Numerot ovat sandbox-kohtaisia eikä niitä julkaista tässä, jotta ne pysyvät oikein korttiyhtiöiden testinumerovälien muuttuessa. Toiminta on joka tapauksessa determinististä: testi voi varmistaa hylkäyksen yhtä helposti kuin onnistuneen maksun.
Hae avaimet ja aloita.
Sandbox-kauppias, jolla on API-avaimet, webhook-salaisuudet ja kaikki maksutavat käytössä – sekä täydet viitedokumentit, jotta tiimisi voi integroida ennen kuin mitään on allekirjoitettu.