⚠️ 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

CodigoEstadoCausa mas comun
200OKOperacion exitosa
201CreatedPOST exitoso — nuevo recurso creado
400Bad RequestXML/JSON malformado, campo requerido faltante o valor invalido
401UnauthorizedAPI Key incorrecta, inexistente o WebService desactivado
403ForbiddenAPI Key valida pero sin permisos para el recurso o metodo
404Not FoundRecurso con ese ID no existe, o endpoint incorrecto
405Method Not AllowedIntentar POST en un recurso que solo permite GET
500Internal Server ErrorError en el servidor — revisar logs de PrestaShop
503Service UnavailableTienda en modo mantenimiento

#401 — Autenticacion fallida

CausaSolucion
WebService desactivado en el BOIr a Parametros Avanzados → WebService → Activar
API Key incorrecta o espacios extraVerificar la clave en el BO y que no tenga espacios
API Key desactivadaIr al BO y activar la clave
HTTPS requerido pero usas HTTPUsar 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

CausaSolucion
ID de recurso que no existeVerificar que el ID existe en la BD
Endpoint incorrectoVerificar el nombre del recurso (plural: products, orders...)
URL mal formadaComprobar que la URL base sea correcta
mod_rewrite no activoEl .htaccess de PS requiere mod_rewrite en Apache
BASE_URL incorrectaSi 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.