🏗️ Ejemplos CRUD — GET, POST, PUT, DELETE
Actualizado: 2024-12-01
La API REST de PrestaShop usa el metodo HTTP para determinar la operacion: GET para leer, POST para crear, PUT para actualizar y DELETE para eliminar.
#GET — leer recursos
GET — leer uno o varios recursos
php
<?php
function psApiGet(string $apiKey, string $shopUrl, string $endpoint, array $params = []): array
{
$params['output_format'] = 'JSON';
$url = rtrim($shopUrl, '/') . '/api/' . $endpoint . '?' . http_build_query($params);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => $apiKey . ':',
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true) ?? [];
}
// ── Obtener un producto por ID ──
$data = psApiGet($key, $url, 'products/42');
$product = $data['product'];
echo $product['reference'];
// ── Obtener lista de productos ──
$data = psApiGet($key, $url, 'products', [
'display' => '[id,reference,price]',
'filter[active]'=> 1,
'limit' => 20,
]);
$products = $data['products'];
// ── Obtener stock de un producto ──
$data = psApiGet($key, $url, 'stock_availables', [
'filter[id_product]' => 42,
'display' => 'full',
]);
$stock = $data['stock_availables'][0]['quantity'] ?? 0;
#POST — crear recursos
POST — crear un nuevo producto
php
<?php
function psApiPost(string $apiKey, string $shopUrl, string $resource, string $xmlBody): array
{
$url = rtrim($shopUrl, '/') . '/api/' . $resource . '?output_format=JSON';
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $xmlBody,
CURLOPT_HTTPHEADER => ['Content-Type: application/xml'],
CURLOPT_USERPWD => $apiKey . ':',
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true) ?? [];
}
// ── XML para crear un producto ──
// Nota: La API PS usa XML para POST/PUT, incluso con output_format=JSON
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<product>
<price>29.99</price>
<reference>MY-REF-001</reference>
<active>1</active>
<id_category_default>2</id_category_default>
<id_tax_rules_group>1</id_tax_rules_group>
<name>
<language id="1">Mi Nuevo Producto</language>
<language id="2">My New Product</language>
</name>
<description>
<language id="1"><![CDATA[<p>Descripcion del producto</p>]]></language>
</description>
<description_short>
<language id="1"><![CDATA[Descripcion corta]]></language>
</description_short>
</product>
</prestashop>';
$response = psApiPost($key, $url, 'products', $xml);
$newProductId = $response['product']['id'] ?? null;
echo 'Producto creado con ID: ' . $newProductId;
#PUT — actualizar recursos
PUT — actualizar stock y estado de pedido
php
<?php
function psApiPut(string $apiKey, string $shopUrl, string $endpoint, string $xmlBody): array
{
$url = rtrim($shopUrl, '/') . '/api/' . $endpoint . '?output_format=JSON';
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS => $xmlBody,
CURLOPT_HTTPHEADER => ['Content-Type: application/xml'],
CURLOPT_USERPWD => $apiKey . ':',
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true) ?? [];
}
// ── Actualizar stock de un producto ──
// Primero obtener el id_stock_available
$data = psApiGet($key, $url, 'stock_availables', ['filter[id_product]' => 42, 'display' => 'full']);
$idStock = $data['stock_availables'][0]['id'];
$stockXml = '<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<stock_available>
<id>' . $idStock . '</id>
<id_product>42</id_product>
<id_product_attribute>0</id_product_attribute>
<quantity>100</quantity>
</stock_available>
</prestashop>';
psApiPut($key, $url, 'stock_availables/' . $idStock, $stockXml);
// ── Cambiar estado de un pedido ──
$orderHistoryXml = '<?xml version="1.0" encoding="UTF-8"?>
<prestashop>
<order_history>
<id_order>123</id_order>
<id_order_state>5</id_order_state>
</order_history>
</prestashop>';
psApiPost($key, $url, 'order_histories', $orderHistoryXml);
#DELETE — eliminar recursos
DELETE — eliminar un recurso
php
<?php
function psApiDelete(string $apiKey, string $shopUrl, string $endpoint): bool
{
$url = rtrim($shopUrl, '/') . '/api/' . $endpoint;
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_USERPWD => $apiKey . ':',
]);
curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $httpCode === 200;
}
// ── Eliminar un producto ──
$success = psApiDelete($key, $url, 'products/42');
// ── Eliminar multiples recursos ──
$idsToDelete = [100, 101, 102];
foreach ($idsToDelete as $id) {
psApiDelete($key, $url, 'products/' . $id);
usleep(100000); // 100ms entre peticiones para no saturar el servidor
}
#Operaciones comunes completas
| Operacion | Metodo | Endpoint | Notas |
|---|---|---|---|
| Crear producto | POST | products | Requiere XML con todos los campos requeridos |
| Actualizar precio | PUT | products/{id} | Enviar todo el objeto, no solo el campo modificado |
| Actualizar stock | PUT | stock_availables/{id} | Obtener id_stock_available primero con GET |
| Cambiar estado pedido | POST | order_histories | Crear un nuevo historial de estado |
| Actualizar tracking | PUT | order_carriers/{id} | Obtener id_order_carrier con GET |
| Crear cliente | POST | customers | El password se hashea automaticamente |
| Aplicar cupon | POST | cart_rules | Crear la regla de descuento |
| Subir imagen | POST | images/products/{id} | Requiere multipart/form-data |
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.