[ * ['variant_id' => 123, 'quantity' => 2] * ], * 'customer' => ['email' => 'customer@example.com'] * ] * ); * * $response = $apiGateway->send($request); */ final readonly class CreateOrderApiRequest implements ApiRequest { public function __construct( private ShopifyApiKey $apiKey, private ShopifyStore $store, private array $orderData, private ?RetryStrategy $retryStrategy = null ) { } public function getEndpoint(): ApiEndpoint { $shopUrl = "https://{$this->store->value}.myshopify.com/admin/api/2024-01/orders.json"; return ApiEndpoint::fromUrl( Url::parse($shopUrl) ); } public function getMethod(): HttpMethod { return HttpMethod::POST; } public function getPayload(): array { return [ 'order' => $this->orderData, ]; } public function getTimeout(): Duration { // Order creation should be quick return Duration::fromSeconds(10); } public function getRetryStrategy(): ?RetryStrategy { return $this->retryStrategy; } public function getHeaders(): Headers { return new Headers([ 'X-Shopify-Access-Token' => $this->apiKey->value, 'Content-Type' => 'application/json', 'Accept' => 'application/json', ]); } public function getRequestName(): string { return 'shopify.create_order'; } }