Skip to main content
Oficjalne SDK PHP (≥ 8.1): dowolny klient PSR-18 (domyślnie Guzzle), PSR-4, niemutowalne DTO, PHPStan poziom 8. Odpowiada @itemshop/sdk z TypeScript.

Instalacja

Storefront (publiczne, bez sekretów)

Kasa

Strona nigdy nie dotyka danych płatniczych: checkout->create() zwraca redirectUrl (bramka albo strona statusu dla darmowego zamówienia). SDK dodaje losowy Idempotency-Key i ponawia błędy sieci z tym samym kluczem, więc zerwane połączenie nie utworzy dwóch zamówień. Koszyk ma 1–20 pozycji; dwie lub więcej tworzą jedną grupę płatności (->groupId, ->orderIds).
Możesz też użyć typowanych modeli (new StorefrontCheckoutDto(items: [new StorefrontCartItemDto(productId: …)], …)). Własny klucz (idempotencyKey:) trzymaj z koszykiem w sesji, by zachować idempotencję między żądaniami; Storefront::newIdempotencyKey() generuje poprawny.

Vouchery i widżety

Widżet wyłączony przez właściciela sklepu zwraca puste dane.

Klient (klucz API, po stronie serwera)

Klucz utworzysz w panelu: Ustawienia → Klucze API — nadaj tylko potrzebne uprawnienia. Zobacz API z kluczem.
Zasoby: shops, team, servers, products, paymentMethods, blacklist, discounts, vouchers, stats, uploads, orders, paymentErrors, site (files, draft, revisions, builds, deployments), templates, agents, skills. Ustawienia i tokeny AI Workspace są tylko dla panelu, więc nie ma ich w kliencie.

Strona: wdrożenie z CI

Błędy

Każdy wyjątek rozszerza ItemShop\Exception\ItemShopException i ma zawsze ustawione $errorCode (UPPER_SNAKE_CASE): kod z backendu, jeśli był, inaczej wyprowadzony ze statusu, inaczej kod SDK (NETWORK_ERROR, TIMEOUT, CONFIG_ERROR, VALIDATION_FAILED). $status wynosi 0, gdy nie było odpowiedzi.

Ponowienia, limity czasu, klient HTTP

GET oraz zapisy z Idempotency-Key (kasa) są ponawiane po błędach sieci i statusach 408/425/429/500/502/503/504; inne zapisy tylko po 429. Backoff wykładniczy od 300 ms, maks. 5 s, z jitterem, z poszanowaniem Retry-After.

Webhooki

Backend nie wysyła jeszcze podpisanych webhooków wychodzących (zamówienia trafiają na Discord i do pluginu) — zob. Webhooki. Webhook implementuje planowany schemat Standard Webhooks (webhook-id, webhook-timestamp, webhook-signature: v1,<base64 HMAC-SHA256>), więc możesz pisać odbiornik już dziś.

Modele

Modele są w ItemShop\Model jako klasy final z polami public readonly, generowane z OpenAPI. Model::fromArray() buduje model z formatu camelCase, ->toArray() / json_encode($model) wraca. Pola nieznane SDK trafiają do $model->extra.

Storefront API

Endpointy pod spodem SDK.

Błędy i limity

Kody błędów i limity zapytań.