SDK PHP dla Polski
corp-merch/sdk na Packagist — PHP 8.1+, PSR-7/PSR-18, natywne bridge'y Laravel i Symfony, readonly DTO.
Instalacja i init
composer require corp-merch/sdk. $cm = new CorpMerch\Client(apiKey: getenv('CM_KEY'), country: 'PL'). Używa PSR-18 HTTP client — przekaż dowolny (Guzzle, Symfony HttpClient, sensowny default). Stosuje VAT 23% i KSeF dla Polski; domyślny hub Warszawa.
Quickstart — złóż zamówienie
$order = $cm->orders->create(idempotencyKey: Uuid::v4(), buyer: ['vat_id' => 'PL…'], lines: [['sku' => 'TSH-001', 'qty' => 200]], promisedDate: '2026-07-01'); echo $order->id; echo $order->estimatedVatAmountCents. Zwraca readonly DTO Order. Błędy rzucane jako CorpMerch\Exception\ValidationException itp.
Bridge Laravel i Symfony
Laravel: zainstaluj corp-merch/sdk-laravel — rejestruje singleton powiązany z config('corp-merch.country'). Symfony: corp-merch/sdk-symfony dodaje bundle z autowired client. Oba pakiety dostarczają middleware webhook walidujące podpis i dispatchujące typowane zdarzenia na event busie frameworka.
FAQ
Minimalna wersja PHP?
PHP 8.1 (readonly properties, enumy). PHP 8.2 i 8.3 testowane. PHP 7.x nie wspierany.
Który HTTP client?
PSR-18 — bring your own. Domyślne discovery via http-interop/http-factory-discovery, łapie Guzzle lub Symfony HttpClient.
Jak typowane są response?
Readonly DTO (Order, Invoice, CatalogItem). Enumy dla statusów (OrderStatus::ACCEPTED itp.). Strict types: declare(strict_types=1) w każdym pliku.
Iteracja katalogu?
foreach ($cm->catalog->iterate(country: 'PL') as $item) { … } — generator-based, leniwe fetch stron. Cancel mid-loop przez break bez marnowania.
Kod źródłowy?
MIT na GitHub: github.com/corp-merch/sdk-php. PSR-12 codestyle; PHPStan level 9 w CI.