Jump to content

Problema al acceder a la info de un carrito Prestashop desde una página externa


Recommended Posts

Hola comunidad!

Necesito acceder a la información del carrito de un Prestashop, desde un página externa a este Prestashop, en este caso desde un plugin Wordpress que solicita por GET esa info del carrito, comento:

Instalación de Prestashop (http://localhost/prestashop)

Aquí he creado un módulo que lo hace es devolver cierta información para que el plugin de Wordpress la consuma, dentro del módulo, en /front/controllers/ he creado un archivo info.php con el siguiente código:

include_once(dirname(__FILE__).'../../../../../config/config.inc.php');
include_once(dirname(__FILE__).'../../../../../init.php');

class ApiCartInfoModuleFrontController extends ModuleFrontController
{

  public function __construct($response = array()) {
    parent::__construct($response);
    $this->display_header = false;
    $this->display_header_javascript = false;
    $this->display_footer = false;
  }

  public function postProcess(){

    $product = new Product(1);

    $newCart = new Cart($this->context->cookie->id_cart);

    $data = array(
      "id_cookie_cart" => $this->context->cookie->id_cart,
      "nameProduct" => $product->name[1],
      "total"  => strval($newCart->getOrderTotal()),
      "static_token" => Tools::getToken(false),
      "token" => Tools::getToken()
    );

    echo json_encode($data);
  }

}

Si accedo a esta url https://localhost/prestashop/module/apicart/info, puedo ver perfectamente la salida del array por pantalla:

{"id_cookie_cart":"15","nameProduct":"Camiseta efecto deste\u00f1ido de manga corta","total":"56.76","static_token":"3455435gfdgdfg4545435","token":"454435dfdfrgf4354545fg"}

El problema viene cuando desde Wordpress con Vue realizo una petición GET a esa url para obtener el mismo objeto JSON, hay ciertos datos del objeto que no obtengo correctamente.

Instalación de Wordpress (http://localhost/wordpress)

Aquí he creado un plugin que carga Vue y mediante una petición GET por Fetch:

var url ="http://localhost/prestashop/module/apicart/info";
  var options = {
    method: 'GET',
  }
  fetch(url,options)
  .then((response) => {

    return response.json();

  }).then((data) => {

    console.log(data);

  })

En el console.log que hago de data, obtengo lo siguiente:

{id_cookie_cart: false, nameProduct: "Camiseta efecto desteñido de manga corta", total: "0", static_token: "3455435gfdgdfg4545435", token: "454435dfdfrgf4354545fg"}

Como podéis ver, los valores de id_cookie_cart y de total no los llego a recoger, que son los que más me interesan, pues mi intención es poder consultar el carrito de Prestashop desde Wordpress con VUE en este caso.

Todo lo que intento devolver desde $this->context lo obtengo desde Vue como 0, false, etc.

¿Alguien tiene idea de por qué no me llegan esos valores y como puede acceder a ellos de la manera que quiero acceder?

 

Link to comment
Share on other sites

  • 2 weeks later...

Hola @gusman126 , el problema que veo con la API de Prestashop es que hay muy poca documentación sobre ella, el otro día intenté crear un nuevo recurso de la api que hiciese ciertas acciones y que el resultado me lo devolviese un endpoint de la API pero no conseguí hacerlo funcionar como esperaba. Si tienes alguna referencia donde pueda ver ejemplos o alguna documentación que no sea la oficial (es muy escasa) te lo agradecería.

Saludos!

Link to comment
Share on other sites

Hace tiempo intente añadir un boton de añadir al carrito productos desde Wordpress, en la version 1.7 hay un modulo que lo ha ce posible, durante un tiempo funciono, pero no recuerdo si fue por el cambio en el wordpress o prestashop dejo de funcionar,

Yo añadía el fichero de classes/Cookie.php al principio del fichero, el fichero lo tenia en el wordpress y las llamadas/paths a los ficheros de prestashop lo hacia desde wordpress.

include_once('../../../../tienda/config/defines.inc.php');
	include_once('../../../../tienda/config/config.inc.php');
	include_once('../../../../tienda/classes/Cookie.php');
	global $cookie;
	$cont = 0;
	$link = new Link();

	$context = Context::getContext();
	$cart_id = $context->cookie->id_cart;

    if (!$cart_id) {

            $cart = new Cart();
	        $cart->id_currency = (int)($cookie->id_currency);
	        $cart->id_lang = (int)($cookie->id_lang);
	        $cart->add();
	        $context->cookie->id_cart = $cart->id_cart;
	        $cookie->write(); 
	}
	else{
	    $cart = new Cart($id_cart);
        $context->cookie->id_cart = $cart->id_cart;
        $cookie->write(); 
    }

Como te digo dejo de funcionar y sabiendo que en la 1.7 iban a añadir esa opción me olvide, luego la tienda cerro.

 

Sobre API de Prestashop, si hay poca documentación.

Por ahi ,tengo que buscarlo tengo el codigo para leer productos, no para carritos , si te hace falta avisa y lo pongo.

 

El modulo que te comento de generar botones para añadir al carrito...

image.thumb.png.941b7586692640d323d5b89f1b623d69.png

 

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

Genial! Voy a probar ese código, con tener acceso en Wordpress al ID del carrito en el mismo navegador ya puedo hacer las llamadas a la API de Prestashop y obtener la info de ese carrito en JSON, te comentaré que tal me va.

En cuando a lo de la API de Prestashop, cualquier ayuda es bienvenida :) De hecho mi intención es ir documentando en Github (en la medida de lo posible y lo que mi tiempo libre me permita) ya que con el auge de las PWA's nos va a venir bien a todos.

Gracias por tu ayuda @gusman126

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...