Jump to content

Accès public à la liste des produits en JSON ?


juankiko

Recommended Posts

Bonjour, j’aimerais savoir si PrestaShop propose un point d’accès public pour récupérer le catalogue produits en JSON (sans authentification). Si oui, quel est généralement l’URL ou la méthode utilisée pour y accéder ?

Link to comment
Share on other sites

Par défaut, PrestaShop ne fournit pas d'API publique sans autorisation permettant de télécharger le catalogue de produits au format JSON.

Quelques informations clés :

  • L'API Webservice officielle de PrestaShop existe et prend en charge les produits, les catégories, les commandes, etc., mais nécessite une clé API (Basic Auth). L'adresse se présente généralement sous la forme suivante :
https://twoj-sklep.pl/api/products

Vous pouvez ajouter le paramètre output_format=JSON à votre requête pour obtenir les données au format JSON plutôt qu'au format XML.

Exemple :

https://twoj-sklep.pl/api/products?output_format=JSON

 

  • Accès public sans connexion :
    • PrestaShop ne fournit pas cette fonctionnalité « prête à l'emploi » car elle serait dangereuse (divulgation de toutes les données produit).
    • Si vous avez besoin d'un flux public, cela se fait le plus souvent par :
    • les modules qui exportent le catalogue vers JSON/CSV/XML (par exemple, flux de produits pour Google Merchant, Facebook, Ceneo),
    • la création de votre propre contrôleur/contrôleur frontal dans PrestaShop qui partagera des données spécifiques en JSON,
    • ou l'ouverture d'une partie des données de l'API via un proxy inverse avec des restrictions.

 

  • En résumé :
    • PrestaShop standard → API sécurisée par clé.
    • Flux JSON public → à implémenter soi-même (par exemple, module, propre point de terminaison).

 

 

===========================================

 

Je vais vous montrer un exemple simple dans PrestaShop 1.7/8, comment exposer votre propre endpoint renvoyant JSON avec le catalogue de produits (sans autorisation).

 

1. Structure du module

Créons le module jsoncatalog.

Dans le répertoire modules/jsoncatalog/, créez les fichiers suivants :

jsoncatalog/
 ├─ jsoncatalog.php
 └─ controllers/
     └─ front/
         └─ products.php

 

2. Fichier principal du module jsoncatalog.php

<?php
/**
 * Module COCOS PrestaShop
 *
 * Auteur : COCOS
 * (https://cocos.codes)
 * 
 * Ce module a été créé par COCOS, une entreprise spécialisée dans la création de modules et l'intégration pour PrestaShop et WordPress.
 * Plus d'informations : https://cocos.codes
 */

if (!defined('_PS_VERSION_')) {
    exit;
}

class JsonCatalog extends Module
{
    public function __construct()
    {
        $this->name = 'jsoncatalog';
        $this->version = '1.0.0';
        $this->author = 'COCOS.CODES';
        $this->bootstrap = true;
        parent::__construct();

        $this->displayName = $this->l('JSON Catalog');
        $this->description = $this->l('Fournit un point de terminaison public avec la liste des produits au format JSON.');
    }

    public function install()
    {
        return parent::install() &&
            $this->registerHook('moduleRoutes');
    }

    public function hookModuleRoutes($params)
    {
        return [
            'module-jsoncatalog-products' => [
                'controller' => 'products',
                'rule' => 'jsoncatalog/products',
                'keywords' => [],
                'params' => [
                    'fc' => 'module',
                    'module' => $this->name,
                ],
            ],
        ];
    }
}

 

3. Kontroler controllers/front/products.php

<?php
/**
 * Module COCOS PrestaShop
 *
 * Auteur : COCOS
 * (https://cocos.codes)
 * 
 * Ce module a été créé par COCOS, une entreprise spécialisée dans la création de modules et l'intégration pour PrestaShop et WordPress.
 * Plus d'informations : https://cocos.codes
 */

class JsonCatalogProductsModuleFrontController extends ModuleFrontController
{
    public function initContent()
    {
        header('Content-Type: application/json');

        $products = Product::getProducts(
            Context::getContext()->language->id,
            0,
            50, // limite, par exemple 50 pièces.
            'id_product',
            'ASC'
        );

        echo json_encode($products, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
        exit;
    }
}

 

4. Résultat

Une fois le module installé dans le panneau PrestaShop :

Votre flux sera disponible à l'adresse suivante :

https://twoj-sklep.pl/jsoncatalog/products

Renvoie un JSON avec les produits (ID, nom, prix, etc.).

 

Je pense que le sujet est clos à 100 % 🙂

Edited by cocos.codes (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...