Swagger

Integration Consent

Samoobslužný autorizačný model: postavíte URL s parametrami vašej aplikácie, používateľ ju otvorí, v KROSe schváli prepojenie a vy dostanete tokeny — buď priamym POST-om do vášho servera, alebo si ich vyzdvihnete pollingom. Žiadna dohoda s KROSom vopred nie je potrebná.

Registrácia vopred nie je potrebná

Integration Consent si nevyžaduje žiadnu predchádzajúcu registráciu ani dohodu s KROSom — ktokoľvek si vie zostaviť consent URL podľa parametrov nižšie a rovno ju použiť. To je iné než dostať doplnok zaradený do obchodu doplnkov v KROS aplikácii — to je samostatný krok, ktorý si vyžaduje kontaktovať KROS. Pozri Obchod doplnkov.

Platí pre Fakturáciu aj Sklad

Integration Consent funguje rovnako pre KROS Fakturáciu aj KROS Sklad — používateľ pri schvaľovaní vyberá firmu, nie produkt.

Consent URL

Základ URL je https://firma.kros.sk/integration-consent, ku ktorému pridáte nasledujúce parametre v query stringu.

Parameter Povinný Hodnota
plugin_name áno názov aplikácie zobrazený používateľovi
integrator_name áno obchodné meno vašej firmy
version áno 1
response_mode áno post alebo poll
state áno kryptograficky bezpečný náhodný reťazec, minimálne 32 znakov
redirect_url pri post URL, na ktorú KROS pošle POST s tokenmi
company_mode nie single (default) alebo multiple
webhook nie HTTPS URL na príjem notifikácií
webhook_secret nie kľúč na verifikáciu webhookov; ak sa neuvedie, KROS ho vygeneruje
URL
https://firma.kros.sk/integration-consent
  ?plugin_name=MyEcommerceApp
  &integrator_name=Acme%20Corporation
  &version=1
  &response_mode=post
  &redirect_url=https%3A%2F%2Fmyapp.com%2Fkros%2Fcallback
  &company_mode=multiple
  &state=random-state-id-12345

Post mode

Po schválení prepojenia KROS pošle z prehliadača používateľa priamy HTTP POST na váš redirect_url, s telom vo formáte application/x-www-form-urlencoded.

Používateľ KROS Váš server 1. Otvorí consent URL a schváli prepojenie 2. Pripraví auto-submit POST formulár s tokenmi 3. Prehliadač POST-ne redirect_url s tokenmi (data[n][…], state) 4. Overí state, uloží tokeny, potvrdí prepojenie
Postupnosť post mode: 1) používateľ otvorí consent URL a v KROSe schváli prepojenie, 2) KROS pripraví automaticky odosielaný POST formulár s tokenmi, 3) prehliadač používateľa odošle POST na redirect_url s poľami data[n][…] a state, 4) váš server prijme POST, overí state a uloží tokeny.

Telo POST požiadavky vyzerá takto:

POST Form data
data[0][companyId]=123
data[0][token]=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
data[0][companyName]=Acme Corp
data[0][webhookSecret]=aG9zZXJhbmRvbXNlY3JldA==
data[1][companyId]=456
data[1][token]=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
data[1][companyName]=Tech Inc
data[1][webhookSecret]=YW5vdGhlcnNlY3JldA==
state=random-state-id-12345

state je v post mode voliteľný, ale odporúčaný — pošlite ho v consent URL a po prijatí POST-u porovnajte, či sa vrátená hodnota zhoduje s tou, ktorú ste poslali. Post mode je vhodný pre serverové webové aplikácie, ktoré majú verejne dostupný endpoint na prijatie POST-u.

Tvar tela je rovnaký v oboch režimoch company_mode. Aj pri single prídu dáta indexované — dostanete jednu položku data[0][…]. Neindexované polia companyId, token v koreni tela KROS neposiela nikdy, takže na svojej strane vystačíte s jednou vetvou kódu, ktorá prejde pole data[…] bez ohľadu na režim.

Pole data[n][webhookSecret] je v tele len vtedy, keď prepojenie má webhook; companyId, token a companyName prídu vždy. state sa pridá do tela iba vtedy, ak ste ho poslali v consent URL.

POST odošle prehliadač používateľa sám, s krátkym odpočtom po schválení. Ak sa automatické odoslanie nespustí (napr. používateľ stránku medzitým opustí), má na obrazovke tlačidlo na návrat, ktoré ten istý POST odošle ručne — váš endpoint preto musí zvládnuť aj to, že tá istá požiadavka príde s odstupom niekoľkých sekúnd či minút.

Poll mode

Po schválení prepojenia KROS tokeny neposiela nikam sám — uloží ich na svojej strane, naviazané na váš state, a to na 15 minút. Počas tohto okna si ich vyzdvihnete volaním poll endpointu.

Používateľ KROS Váš server 1. Otvorí consent URL (response_mode=poll), schváli 2. POST /api/integration- subscription/poll { state } 3. Odpoveď: status Pending / Approved / Denied / Expired 4. Opakuje pri Pending (KROS uchováva tokeny 15 min)
Postupnosť poll mode: 1) používateľ otvorí consent URL s response_mode=poll a v KROSe schváli prepojenie, 2) váš server volá POST /api/integration-subscription/poll so svojím state, 3) KROS odpovie stavom Pending, Approved, Denied alebo Expired, 4) kým je stav Pending, server volanie opakuje — KROS uchováva tokeny 15 minút.
POST HTTP
POST /api/integration-subscription/poll HTTP/1.1
Host: api-economy.kros.sk
Content-Type: application/json

{ "state": "a7s9f8j2k1l0m3n4b5v6c7x8z9q1w2e3r4t5y6u7i8o9p0" }

Odpoveď:

JSON
{
  "data": {
    "status": "Approved",
    "companies": [
      {
        "companyId": 123,
        "companyName": "Acme Corp",
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
        "webHookSecret": "aG9zZXJhbmRvbXNlY3JldA=="
      }
    ]
  }
}
status Význam a čo spraviť ďalej
Pending Používateľ ešte prepojenie neschválil — pokračujte v pollovaní.
Approved Tokeny sú pripravené v poli companies — uložte si ich a pollovanie ukončite.
Denied Hodnota je súčasťou kontraktu, ale poll endpoint ju dnes nevracia — ošetrite ju ako terminálny stav (pollovanie ukončite), nestavajte však na nej detekciu zamietnutia.
Expired 15-minútové okno na vyzdvihnutie tokenov uplynulo — ak používateľ ešte chce prepojenie schváliť, začnite znova novou consent URL s novým state.

Zamietnutie neviete odlíšiť od čakania. Ak používateľ prepojenie neschváli, KROS si pod vaším state nič neuloží a poll endpoint bude naďalej vracať Pending — rovnako ako keby používateľ obrazovku ešte len mal otvorenú. Pollovanie preto ukončite vlastným časovým limitom (rozumné je držať sa 15-minútového okna) a po jeho uplynutí považujte pokus za neúspešný.

Na rozdiel od post mode je state v poll mode povinný — je to kľúč, pod ktorým si tokeny vyzdvihnete, takže bez neho poll endpoint nemá čo hľadať. Poll mode je vhodný pre mobilné aplikácie, SPA, CLI nástroje a background joby, teda klientov bez verejne dostupného servera na prijatie POST-u.

webhookSecret vs. webHookSecret

Názov poľa sa medzi režimami líši veľkosťou jedného písmena, čo partnerom často spôsobí zbytočné hľadanie chyby: post mode posiela pole webhookSecret (malé h), zatiaľ čo poll odpoveď vracia webHookSecret (veľké H). Overte si presný názov poľa v tom režime, ktorý používate.

Životnosť a revokácia tokenu

Token získaný cez Integration Consent nemá časovú expiráciu. Neobnovuje sa a nerotuje — platí, kým prepojenie v KROSe existuje. Nepotrebujete teda refresh token ani plánované preberanie nového tokenu; potrebujete ale ošetriť, že token môže kedykoľvek prestať platiť rozhodnutím používateľa.

Prepojenia vytvorené cez consent sa používateľovi zobrazia v nastaveniach firmy v sekcii API prepojenia, v tom istom zozname ako manuálne vytvorené prepojenia. Tam ich vie aj zrušiť:

Zmena sa nemusí prejaviť v tej istej sekunde — autorizácia tokenu je na strane API krátko cachovaná, takže rátajte s rádovo minútovým oneskorením, kým zrušený token začne vracať 401.

Opakovaný súhlas vytvorí ďalšie prepojenie, staré nezruší

Keď používateľ prejde procesom súhlasu pre tú istú firmu znova, vznikne nové samostatné prepojenie s novým tokenom — pôvodné zostáva v platnosti a v zozname prepojení. Tokeny teda platia súbežne, kým jeden z nich používateľ nezmaže. Ak posielate používateľa cez consent opakovane (napríklad pri preinštalovaní doplnku), starý token si na svojej strane zahoďte a počítajte s tým, že v KROSe uvidí viac prepojení s rovnakým názvom.

Ďalší krok

Nastavte si príjem udalostí na Webhookoch, alebo pokračujte na Najčastejšie integrácie.