Saltar al contenido principal
Requiere PHP 8.2 o posterior y cualquier cliente HTTP PSR-18.

Instalación

Si tu proyecto aún no tiene un cliente PSR-18, agrega uno, como Guzzle:

Inicio rápido

Crea un artículo y luego lista las existencias disponibles:

Autenticación

Pasa una clave de API o un token de acceso OAuth como primer argumento. Crea una clave de API en la app, en Configuración > Acceso > Claves de API. La clave actúa como el miembro que la creó, y cada llamada necesita tanto el permiso del miembro como uno de los alcances de la clave. Para un token OAuth que vence, pasa un closure. El cliente lo llama antes de cada solicitud:
Otros argumentos, todos con nombre: El cliente y las factories se encuentran con php-http/discovery cuando los omites.

Hacer llamadas

Cada área de la API tiene un método, como catalog() o inventory(), y cada operación es un método en él. Primero van los parámetros de ruta, luego el cuerpo y después la cadena de consulta:
El comentario de documentación de cada método indica su ruta, como GET /catalog/items/{item}. También puedes llamar a una ruta directamente:
Una llamada devuelve el cuerpo JSON decodificado como un arreglo. Una respuesta vacía devuelve null, una exportación CSV su texto y un archivo la respuesta PSR-7. Para comprobar tu propio código contra los tipos, impórtalos desde Schemas en un comentario de documentación de PHPStan:

Paginación

Una lista que puede crecer devuelve una página a la vez. Cada lista paginada tiene un segundo método que termina en All, que sigue los cursores y entrega cada registro:
$stockshift->paginate('/catalog/items') hace lo mismo por ruta. Para paginar a mano, envía el next_cursor de cada página como parámetro de consulta after hasta que sea null.

Errores

Una llamada fallida lanza una ApiException que contiene el cuerpo de detalles del problema de RFC 9457. Decide según errorCode, que es estable. El detalle está escrito para personas y puede cambiar.
ApiException también tiene status, problem y response. Una llamada que no recibe respuesta, porque falló la red, lanza una ConnectionException. Ambas extienden StockShiftException.

Reintentos y claves de idempotencia

El cliente reintenta un 429 después del tiempo que indica Retry-After. Lo hace con todos los métodos, porque la API no ejecutó la llamada. Si Retry-After es mayor que maxRetryAfter, lanza una excepción en lugar de esperar. Un 5xx o una falla de red se reintenta para GET, PUT y DELETE, con una breve espera entre intentos. Un POST o PATCH solo se reintenta cuando le das una clave de idempotencia, para que un reintento no pueda hacer el cambio dos veces:
Usa una clave nueva para cada cambio que quieras hacer. Los endpoints que respetan la clave lo indican en la referencia de la API.

Webhooks

Revisa el encabezado StockShift-Signature antes de confiar en una entrega. Webhook::verify() necesita el cuerpo sin procesar, exactamente como llegó:
Rechaza una entrega de más de cinco minutos de antigüedad. Pasa tolerance, en segundos, para cambiarlo. Los reintentos de un evento conservan su id, así que guárdalo y omite los eventos que ya procesaste. Cada evento tiene un tipo de PHPStan en Schemas, como InventoryStockAdjustedEvent. Para probar tu propio receptor, Webhook::sign() firma un payload igual que StockShift.

Versiones

La versión mayor cambia cuando la API cambia de una forma que puede romper tu código, como un campo eliminado o un parámetro obligatorio nuevo. Los endpoints y campos nuevos llegan en versiones menores. StockShift\Sdk\Generated\Api::VERSION contiene la versión de la referencia de la API con la que se compiló el paquete.