Merch aziendale in altri paesi:AMArmeniaGEGeorgiaTRTürkiyeRSSerbiaAEUAECYCyprusPTPortugalPLPolandESSpain

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.

Parla con uno specialista