API pro e-shopy
Stejný párovací motor jako na terminálu, jen pro váš e-shop: vystavíte platbu, zobrazíte QR v košíku a webhook vám do pár desítek sekund potvrdí zaplacení.
Klíče
Správce vytvoří API klíč — token se zobrazí jen jednou, uložte si ho hned. Ke klíči patří i webhook secret pro ověřování podpisů (ten jde zobrazit opakovaně). Klíče se nemažou, jen deaktivují — historie plateb na ně odkazuje.
Vystavení platby
POST /api/v1/payment_requests
Authorization: Bearer <token>
Content-Type: application/json
{
"amount": 250,
"reference": "objednavka-123",
"webhook_url": "https://vas-eshop.cz/jenqr-webhook",
"expires_in": 1800,
"customer": { "name": "Firma s.r.o.", "ico": "12345678",
"dic": "CZ12345678", "address": "Dlouhá 1, Praha" },
"line_items": [ { "title": "Zboží", "price": 250, "qty": 1, "vat_rate": 21 } ]
}
Povinná je jen částka. reference (vaše číslo objednávky)
a webhook_url chcete prakticky vždy. expires_in
je 300–3600 sekund, výchozích 600. customer
a line_items jsou volitelné — se zadaným odběratelem vyjde
doklad jako faktura, s položkami je položkový.
Sazba DPH smí být 21, 12 nebo 0.
Odpověď (201) vrací id, vs, status
a spayd — řetězec QR Platby, ze kterého vykreslíte QR kód.
Stav zjistíte kdykoli přes GET /api/v1/payment_requests/<id>
(spayd vrací, jen dokud má smysl platit).
Webhook
Při změně stavu (paid, partially_paid,
expired) pošleme POST na vaši URL. Tělo podepisujeme hlavičkou
X-Jenqr-Signature — HMAC-SHA256 surového těla webhook secretem:
expected = OpenSSL::HMAC.hexdigest("SHA256", webhook_secret, request_body)
valid = Rack::Utils.secure_compare(expected, request.headers["X-Jenqr-Signature"])
Doručení opakujeme s odstupy, ale stav si vždy můžete ověřit i GETem — webhook berte jako zrychlení, ne jediný zdroj pravdy.
Chyby a limity
401 unauthorized— chybný nebo deaktivovaný token.402 subscription_inactive— vypršelé předplatné.422 bank_connection_missing / webhook_url_invalid / validation_failed— v těle je důvod.- Rychlostní limit 120 požadavků za minutu na klíč; párování samotné určuje banka (dotaz 1× za 30 s).