Jump to content

Error API/Webservice al obtener blank schemas


aruiz0922

Recommended Posts

Buenas a todos.

Soy nuevo en prestashop y estoy empezando con la API, de momento bien pero estoy teniendo problemas al obtener blank schemas de algunos resources, en 15 de los 70 posibles el servidor me devuelve el error "This call to PrestaShop Web Services failed and returned an HTTP status of 500. That means: Internal Server Error", es una instalación limpia de Prestashop

Prestashop 1.7.8.6

PHP 7.4.28

Resources que dan error: attachment, carts, categories, combinations, customers, customer_threads, customizations, manufacturers, order_details, order_slip, orders, product_options, products, supply_orders y warehouses.

Este es el error p.e. en orders:

HTTP REQUEST HEADER
GET //api/orders?schema=blank HTTP/1.1
Host: kit1.example.com
Authorization: Basic OVQ3Q1VaWVBQTFRMWDVQODVHWlZUU0ZGSDlGQUE1Slg6
Accept: */*

HTTP RESPONSE HEADER
HTTP/1.1 500 Internal Server Error
Date: Wed, 14 Sep 2022 08:31:58 GMT
Server: Apache/2.4.53 (Debian)
Access-Time: 1663144318
X-Powered-By: PrestaShop Webservice
PSWS-Version: 1.7.8.6
Execution-Time: 0.007
Content-Sha1: cf663b2f7b73f0da43139eef17228652a00d0e36
Set-Cookie: PrestaShop-950383588b671a3073f0a00f5126f5e3=def5020088608d2a95b96b505e2b85e00f2c4a635ea3a55a41d26c43e23a25ca9be15a34a25ec782906590f2914969ed39aecac21edfd786c15d72237fa51b35a4630734a09c9c78a98be4893dc76acc247474ae6d52830b2a42cdfa941f3878d50dd1655132ebc2f88079cd72d54faeca5641e30d3aa3d452a1b0a15232917356c609b049419846e8d7720ebe517eb586c751f4784fd8237c43d530b8ee20057050f7fe3b1dbd403e74282b7798f7a1ff5354e7bf6cbc1965a98c309b5ef95c8d95ac2a989687c2e84c991ba5852bd66cef3e6d244c4257b1; expires=Tue, 04-Oct-2022 08:31:58 GMT; Max-Age=1728000; path=/; domain=kit1.infortisa.com; secure; HttpOnly; SameSite=Lax
Content-Length: 2936
Connection: close
Content-Type: text/xml;charset=utf-8
RETURN HTTP BODY
<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<errors>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 716)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
<error>
<code><![CDATA[5]]></code>
<message><![CDATA[[PHP Notice #8] Trying to access array offset on value of type null (/var/www/kit1/classes/webservice/WebserviceOutputBuilder.php, line 719)]]></message>
</error>
</errors>
</prestashop>
{"error":"1","msg":"This call to PrestaShop Web Services failed and returned an HTTP status of 500. That means: Internal Server Error."}

Alguna idea?

Gracias.

Edited by aruiz0922 (see edit history)
Link to comment
Share on other sites

He probado a instalar un Prestashop limpio, versión 1.7.8.7 en un servidor nuevo con versión de PHP 7.4.30, el problema sigue presente tanto si lo instala con los datos de demo o vacío.

La solución de momento es tener los blank schemas en una carpeta y cargarlos desde ahí, preferiría poder cargarlos directamente desde la API por tener el schema siempre actualizado, pero la verdad es que al tenerlos descargados previamente evito una llamada al webservice y se mejora el rendimiento.

En cualquier caso, si alguien da un poco de luz sobre este tema, se lo agradezco.

Link to comment
Share on other sites

  • 3 months later...

Buenas, ya se que ha pasado mucho tiempo pero acabo de iniciar con Prestashop y he tenido el mismo problema que tienes tu y lo he podido solucionar.

Después de mirar el código del fichero WebserviceOutputBuilder.php encontré que si un recurso tiene asociaciones no se captura correctamente ya que intenta obtener un valor de un array que es null y obviamente no puede acceder a la posición del 'id'.

El error lo encontré en el siguiente método:

protected function renderFlatAssociation($object, $depth, $associations, $ws_params)

Este es el fragmento que produce el error:

if ($field_name == 'id' && !isset($field['sqlId'])) {
	$field['sqlId'] = 'id';
	$field['value'] = $object_assoc['id']; // No se comprueba que sea distinto de null
} elseif (!isset($field['sqlId'])) {
	$field['sqlId'] = $field_name;
	$field['value'] = $object_assoc[$field_name]; // Igual aquí
}

La solución es cambiar esa condición, quedando como lo siguiente:

// Este fragmente de código lo he sacado de una versión más moderna de Prestashop, en concreto la 8.0.0
if ($field_name == 'id' && !isset($field['sqlId'])) {
	$field['sqlId'] = 'id';
	$field['value'] = isset($object_assoc['id']) ? $object_assoc['id'] : null; // Ahora se comprueba que no sea null
} elseif (!isset($field['sqlId'])) {
	$field['sqlId'] = $field_name;
	$field['value'] = isset($object_assoc[$field_name]) ? $object_assoc[$field_name] : null; // Aquí igual
}

Como puedes ver el cambio es mínimo, pero esto me ha solucionado el problema y me devuelve el schema de cualquier recurso que tiene asociaciones.

Espero te sea de ayuda, me disculpo si algo esta mal. Como he dicho soy nuevo en Prestashop, un saludo.

Edited by RafaEno
He ido a la solución del asunto, el codigo de GitHub (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...