SDK PHP per l'Italia
corp-merch/sdk su Packagist — PHP 8.1+, PSR-7/PSR-18, bridge nativi Laravel e Symfony, DTO readonly.
Install e init
composer require corp-merch/sdk. $cm = new CorpMerch\Client(apiKey: getenv('CM_KEY'), country: 'IT'). Usa PSR-18 HTTP client — passa qualsiasi (Guzzle, Symfony HttpClient, default sensato). Applica IVA 22% e SdI per l'Italia; hub default Milano.
Quickstart — invio ordine
$order = $cm->orders->create(idempotencyKey: Uuid::v4(), buyer: ['vat_id' => 'IT…'], lines: [['sku' => 'TSH-001', 'qty' => 200]], promisedDate: '2026-07-01'); echo $order->id; echo $order->estimatedIvaAmountCents. Ritorna DTO Order readonly. Errori sollevati come CorpMerch\Exception\ValidationException ecc.
Bridge Laravel e Symfony
Laravel: installa corp-merch/sdk-laravel — registra singleton legato a config('corp-merch.country'). Symfony: corp-merch/sdk-symfony aggiunge bundle con client autowired. Entrambi i pacchetti spediscono middleware webhook che validano firma e dispatch eventi tipizzati sul bus eventi del framework.
FAQ
Versione minima PHP?
PHP 8.1 (readonly properties, enum). PHP 8.2 e 8.3 testati. PHP 7.x non supportato.
Quale HTTP client?
PSR-18 — bring your own. Discovery default via http-interop/http-factory-discovery, picks up Guzzle o Symfony HttpClient.
Come sono tipizzate le response?
DTO readonly (Order, Invoice, CatalogItem). Enum per status (OrderStatus::ACCEPTED ecc.). Strict types: declare(strict_types=1) su ogni file.
Iterazione catalogo?
foreach ($cm->catalog->iterate(country: 'IT') as $item) { … } — generator-based, fetch pagine lazy. Cancel mid-loop con break senza waste.
Source code?
MIT su GitHub: github.com/corp-merch/sdk-php. PSR-12 codestyle; PHPStan level 9 in CI.