Estoy integrando una tienda Prestashop usando vERP y vPrestashop. De momento todo bien, pero no soy capaz de subir imágenes a la tienda. Usando los objetos VImage y VByteArray no encuentro la manera de obtener el array en “crudo” para enviarlo en una cabecera al web service de prestashop, y en formato Base64 no me lo acepta, pero no se si es porque las cabeceras no van bien formadas o porque directamente Prestashop no acepta subir imágenes codificadas en Base64.
¿Alguien ha conseguido satisfactoriamente hacer esto?
Hola si en efecto hace un tiempo ayude alguien eso,
para realizar ese upload necesitas que el objeto XMLHttprequest te haga peticiones multipart lo cual no hace de una forma sencilla, para eso hice una libreria vAjax que es la que uso en todos los plugins que tengo de accesso a API, una persona uso esta libreria para realizar la subida de archivos y le funciono muy bien, algo como esto:
#include “(CurrentProject)/ajax.js”
$.ajax({
type: “POST”,
url: “http://url de prestashop”,
headers: {“Authorization”: “Basic REHI…”},
data: {id_product: “61”,
image: {type: “file”, path: “D://carpeta/imagen.png”}
},
responseType: “json”,
success: function(data, http_status) {
// Some of your code here !
},
error: function(data, http_status) {
// Some of your code here !
}
})
si claro @pnogueira de que se puede se puede, debes de hacer el cambio para que donde construye el vbyteArray si ve que digamos el attributo es un vByteArray pues no lea el fichero sino que lo asigna tal cual
Buenas chicos, he leído este post y justo he estado unos días revisando como mejorar la importación de imágenes en PS ya que actualmente utilizo el importador genérico y no es la conexión que me gustaría tener. @cristianvg2003 he intentado usar tu librería y conecta correctamente pero hay dos cosas que no consigo hacer.
La primera y más importante es que en el POST no consigo actualizar la imagen del producto aunque si estoy haciendo conexión, me devuelve error 500. Y la segunda que tiene relación con esta, es que no se como leer el mensaje de error o los datos que devuelve. ¿Debería mostrarse en el data? ¿Ese es el response? Sé que está haciendo conexión porque cuando hacemos un GET devuelve un 200 aunque en el data sigue devolviendo null.
He probado pasando los parametros id_product y el image pero en la api de PS la id del producto es tan solo id. Paso los datos que uso de conexión por si hay algo que no estoy teniendo en cuenta, muchas gracias de antemano.
para subir la imagen el path debe ser un lugar en tu maquina local para leer el archivo como tal, cosa que puedes hacer antes de esta llamada, tambien hay un ejemplo en la página de vAjax (https://github.com/Heavyblade/vajax).
Para visualizar el error es necesario obtener una representación en texto del objeto JSON de la respuesta, es decir, alert(JSON.stringify(code)).
Hola @cristianvg2003 muchas gracias por tu respuesta. Me despisté de la url de la imagen. No se muestra el mensaje aún usando JSON.stringify(code) pero me devuelve un error 500, ¿quizás sea por esto? La conexión con el servidor se hace correctamente, el problema está en el envío.
Es que no estoy seguro de como comprobar las modificaciones que tengo que hacer. ¿Dices que te funciona enviar imágenes a PS así? No sé cual puede ser el error, seguro es un despiste.
Hola @davidramallo, al final ¿conseguiste solucionar el errror 500?, estoy en este momento realizando una subida de imágenes a PS y es el error que me da.
Se monta la instrucción y se ejecuta con “Ejecutar comando del sistema”.
Antes de subir las imágenes del producto borro todas las que ya tenga en Prestashop haciendo una llamada a la url https://miweb.xxx/api/images/products/id_del_producto/id_de_la_imagen con el método DELETE. Los IDs de las imágenes los obtengo al dar el alta parseando la respuesta de la llamada de curl.
Es una forma muy sencilla de subir las imágenes. Espero que a alguien le sirva.