⚠️ Codigos de error — causas y soluciones
Actualizado: 2024-12-01
La API REST de PrestaShop devuelve codigos de estado HTTP estandar. Los errores incluyen un mensaje XML con detalles adicionales sobre la causa del error.
#Tabla de codigos de error
| Codigo | Estado | Causa mas comun |
|---|---|---|
| 200 | OK | Operacion exitosa |
| 201 | Created | POST exitoso — nuevo recurso creado |
| 400 | Bad Request | XML/JSON malformado, campo requerido faltante o valor invalido |
| 401 | Unauthorized | API Key incorrecta, inexistente o WebService desactivado |
| 403 | Forbidden | API Key valida pero sin permisos para el recurso o metodo |
| 404 | Not Found | Recurso con ese ID no existe, o endpoint incorrecto |
| 405 | Method Not Allowed | Intentar POST en un recurso que solo permite GET |
| 500 | Internal Server Error | Error en el servidor — revisar logs de PrestaShop |
| 503 | Service Unavailable | Tienda en modo mantenimiento |
#401 — Autenticacion fallida
| Causa | Solucion |
|---|---|
| WebService desactivado en el BO | Ir a Parametros Avanzados → WebService → Activar |
| API Key incorrecta o espacios extra | Verificar la clave en el BO y que no tenga espacios |
| API Key desactivada | Ir al BO y activar la clave |
| HTTPS requerido pero usas HTTP | Usar HTTPS para las peticiones (obligatorio en muchos servidores |
| Servidor con mod_rewrite mal conf. | Verificar el .htaccess y que mod_rewrite este activo |
#403 — Sin permisos
Diagnosticar y resolver error 403
bash
# ── Causa: la clave no tiene permiso para el recurso/metodo ──
# Solucion: ir al BO → WebService → Editar clave → Permisos
# Activar el check de GET/POST/PUT/DELETE para el recurso afectado
# ── Causa: intentar acceder a un recurso que no existe en tu PS ──
curl -u "KEY:" "https://t.com/api"
# Lista todos los recursos disponibles y los permisos de tu clave
# ── Respuesta tipica de error 403 en XML ──
# <prestashop>
# <errors>
# <error>
# <code>403</code>
# <message>This call to the Web Services API has not been authorized.</message>
# </error>
# </errors>
# </prestashop>
#404 — Recurso no encontrado
| Causa | Solucion |
|---|---|
| ID de recurso que no existe | Verificar que el ID existe en la BD |
| Endpoint incorrecto | Verificar el nombre del recurso (plural: products, orders...) |
| URL mal formada | Comprobar que la URL base sea correcta |
| mod_rewrite no activo | El .htaccess de PS requiere mod_rewrite en Apache |
| BASE_URL incorrecta | Si la tienda no esta en la raiz, ajustar la URL |
#500 — Error del servidor
Diagnosticar errores 500
bash
# ── Error 500 en el WS — siempre revisar los logs ──
# Logs de PrestaShop
cat /path/to/prestashop/var/logs/dev.log
cat /path/to/prestashop/var/logs/prod.log
# Logs de PHP
cat /var/log/php/error.log
cat /var/log/apache2/error.log
# Causas comunes de 500 en WS:
# - Campo requerido faltante en XML (revisar schema=synopsis)
# - FK invalida (id_manufacturer que no existe)
# - Valor fuera de rango (texto mas largo que el maximo)
# - Hook/modulo lanzando excepcion durante el proceso
# - Permisos de archivo incorrectos en uploads/
# Activar modo debug para mas detalles:
# En config/config.inc.php:
# define('_PS_MODE_DEV_', true);
#Manejo de errores en PHP
Cliente PHP con manejo de errores robusto
php
<?php
function psApiRequest(string $method, string $apiKey, string $url, string $body = ''): array
{
$ch = curl_init($url . '?output_format=JSON');
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_USERPWD => $apiKey . ':',
CURLOPT_TIMEOUT => 30,
];
if ($body) {
$options[CURLOPT_POSTFIELDS] = $body;
$options[CURLOPT_HTTPHEADER] = ['Content-Type: application/xml'];
}
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlError = curl_error($ch);
curl_close($ch);
if ($curlError) {
throw new \RuntimeException('cURL Error: ' . $curlError);
}
$data = json_decode($response, true);
if ($httpCode >= 400) {
$message = $data['errors'][0]['message'] ?? $response;
throw new \RuntimeException('HTTP ' . $httpCode . ': ' . $message);
}
return $data ?? [];
}
// ── Uso con try/catch ──
try {
$result = psApiRequest('GET', $apiKey, 'https://t.com/api/products/999');
} catch (\RuntimeException $e) {
if (str_contains($e->getMessage(), 'HTTP 404')) {
echo 'Producto no encontrado';
} elseif (str_contains($e->getMessage(), 'HTTP 401')) {
echo 'API Key invalida';
} else {
throw $e; // Re-lanzar otros errores
}
}
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.