api

Prestashop : gérer les images produits via l’api

En compléments des informations déjà disponible sur la documentation développeur de prestashop sur la gestion globale des images : https://devdocs.prestashop.com/1.7/webservice/tutorials/advanced-use/image-management/
Cet article détaille brièvement la gestion des images des produits via l’api sous Prestashop.

Les tests ont été fait sur une version 1.7.6.x de prestashop mais l’api ayant assez peu bougé cela doit être fonctionnel sans doute sur les versions 1.6 également.

Le point essentiel à retenir dans les api étant qu’une url peut avoir un comportement différent en fonction de la méthode par laquelle elle est appellée ( GET / POST / PUT )

Je pars du principe que les accès nécessaire à l’api sont déjà définis, et la gestion de l’api est effectuée via la librairie proposée par Prestashop en php ( cf. https://devdocs.prestashop.com/1.7/webservice/tutorials/prestashop-webservice-lib/ )

Pour mon exemple d’illustration je me sers d’une version démo de prestahop avec les produits de base.
Dont l’url sera http://www.prestashop.local/tests/1769/
Et on va jouer avec l’identifiant produit 19 , le « mug personnalisable »

Les appels webservice qui seront exécuté via la lib Prestashop seront wrappés dans le code suivant
Et je rajoute également une fonction qui va permettre de simplifier les appels à la librairie curl .…

Prestashop : gérer les images produits via l’api Lire la suite »

Prestashop : Créer ou modifier un produit via l’api

J’ai récemment du tester le bon fonctionnement d’une api produit et j’ai un peu galérer à trouver un script fonctionnel pour créer et modifier un produit via l’api Prestashop.

Si d’autres personnes rencontrent le même problème voici des exemples basiques mais fonctionnels de création et de mise à jour de produits via l’api Prestashop

Le code a été testé sur une version 1.7.6 mais devrait fonctionner sur toutes les versions 1.7 , voir même les versions 1.6 vu que l’api a assez peu bougée.

Les exemples utilisent la librairie du webservice prestashop ( cf. https://devdocs.prestashop.com/1.7/development/webservice/tutorials/prestashop-webservice-lib/ )

Pour créer un produit

try {
        //Création d'un produit avec uniquement les champs requis
        $webService = new PrestaShopWebservice($url, $key, $debug);
 
        $xmlResponse = $webService->get(['url' => $url . '/api/products?schema=blank']);
        $productXML = $xmlResponse->product[0]; //Récupération du schéma de création
        $productXML->name->language[0] = "test de produit Langue 1";
        $productXML->name->language[1] = "test de produit FR";
        $productXML->description->language[0] = "test de description langue 1";
        $productXML->description->language[1] = "test de description FR";
        $productXML->price = "1000.000";
        $productXML->id_category_default = 2;
        $productXML->state = 1;//Cette valeur doit être à 1 pour que le produit soit visible dans les listings admin
 
        //On ajoute également dans une catégorie
        //La première catégorie est déjà présente dans le schéma
        $productXML->associations->categories->category[0]->id = 6;
 
        //Si on veut en ajouter d'autres il faut procéder différement en rajoutant des noeuds
        $categoriesNode = $productXML->associations->categories;
        $categoriesNode->addChild('category')->addChild('id',7);
        $categoriesNode->addChild('category')->addChild('id',8);
 
 
        //Envoi des informations au webservice
        $opt = ['resource' => 'products'];
        $opt['postXml'] = $xmlResponse->asXML();
        $return = $webService->add($opt);
        $id = $return->product->id;
        echo "Création du produit $id <br />";
 
    } catch ( PrestaShopWebserviceException $e){
        echo $e->getMessage();
    }

Prestashop : Créer ou modifier un produit via l’api Lire la suite »

Prestashop : Passer des commandes via l’api

J’ai récemment du faire des tests de commandes via les Api de Prestashop et je n’ai pas trouvé de script tout fait qui le permettait.
Celui-ci utilise la librairie fournie par Prestashop et disponible sur github : https://github.com/PrestaShop/PrestaShop-webservice-lib/blob/master/PSWebServiceLibrary.php

En voici donc un basique qui va effectuer les actions suivantes :

  • Récupération de l’identifiant client ( création du client si nécessaire )
  • Récupération de l’identifiant de l’adresse du client ( création si nécessaire )
  • Création d’un panier
  • Passage de la commande

Ce script a été exécuté avec succès sur la version 1.7.3.3 de Prestashop et doit donc être compatible avec les versions suivantes.
Je n’ai pas constaté de changement fondamentaux dans l’api par rapport à Prestashop 1.6, pour lequel il devrait également fonctionner ( en changeant les produits )

N’hésitez pas à partager vos retours d’expériences sur l’utilisation de l’api de Prestashop

 
require_once('./PSWebServiceLibrary.php');
 
try {
 
    $host = 'https://yourshop.com';
    $apiKey = 'APIKEY';
 
    $webService = new PrestaShopWebservice($host, $apiKey, false);
 
    /**
     * On stocke ici les variables communes aux commandes créés via l'api
     */
 
      $customerEmail = '[email protected]'

Prestashop : Passer des commandes via l’api Lire la suite »

Magento : Créer une commande via l’api

J’ai récemment eut à créer des commandes Magento via l’api et j’ai rencontré pas mal de difficultés, j’en profite pour condenser l’ensemble du processus dans cet article 🙂

Voici un script qui permettra de créer une commande Magento à partir de l’api Soap de Magento ( à la fois avec la version api V1 et api V2 )
Cet exemple a été réalisé sur un Magento 1.9.3.x de démonstration utilisant les samples data Magento.

N’hésitez pas à consulter la documentation officielle des api, si des points ne sont pas assez clairs  : https://devdocs.magento.com/guides/m1x/api/soap/introduction.html

Le script part des postulats suivants :

  • Passage de commande pour un client existant
  • Avec une adresse de facturation par défaut de renseignée
  • Les adresses de livraison et de facturation seront similaires.
  • Un accès à l’api avec tous les accès nécessaires existe sur le site magento de destination.

Les actions effectuées par le script sont les suivantes :

  1. Login à l’api
  2. Récupération de l’identifiant du  client à partir de son email
  3. Récupération de l’identifiant de l’adresse de facturation/livraison du client
  4. Création d’un panier
  5. Assignation du client au panier
  6. Assignation des adresses du client au panier
  7. Ajout de produits au panier
    1. Produit simple
    2. Produit configurable
    3. Produit groupé
    4. Produit Bundle
  8. Récupération des modes de livraison disponibles pour le panier
  9. Assignation du mode de livraison du panier
  10. Récupération des modes de paiement disponibles pour le panier
  11. Assignation du mode de paiement du panier
  12. Transformation panier en commande

 

Voir le script complet pour l’api V1
Voir le script complet pour l’api V2

Avant de vous montrer le script complet voici un focus sur les éléments à comprendre

Ajout des produits au panier

En fonction du type de produit à ajouter au panier , les informations à envoyer ne seront pas les mêmes.…

Magento : Créer une commande via l’api Lire la suite »

Prestashop : Ajouter un objet dans l’api

Nous allons voir comment ajouter un nouvel objet personnalisé dans l’api Prestashop via un module.
Cette méthodologie fonctionne sous Prestashop 1.7

L’objectif est d’ajouter de rendre un nouvel objet « Sample » qui pourra être manipulé via l’api.
Pour cela nous allons créer un module hhapisample

Ce module va ajouter une entité « sample » qui sera gérable via l’API.

Cette entité aura uniquement les paramètres suivants :

  • référence
  • nom ( multilingue )
  • description ( multilingue )

Voici le code de cette entité à placer dans le fichier classes/Sample.php du module.

/**
 * Classe d'exemple pour le webservice
 */
class Sample extends ObjectModel {
 
    /** @var string Référence du document */
    public $reference;
 
    /** @var string nom */
    public $name;
 
    /** @var string description */
    public $description;
 
    /**
     * Définition des paramètres de la classe
     */
    public static $definition = array(
        'table' => 'sample',
        'primary' => 'id_sample',
        'multilang' => true,
        'multilang_shop' => false,
        'fields' => array(
            'reference' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'size' => 255),
            'name' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'size' => 255 , 'lang' => true),
            'description' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml' , 'lang' => true),
        ),
    );
 
    /**
     * Mapping de la classe avec le webservice
     * 
     * @var type 
     */
    protected $webserviceParameters = [
        'objectsNodeName' => 'samples', //objectsNodeName doit être la valeur déclarée dans le hookAddWebserviceResources ( liste des entités )
        'objectNodeName' => 'sample', // Détail d'une entité
        'fields' => []
    ];
}

La définition du webservice est géré dans l’objet est configuré dans la variable $webserviceParameters
Pour rendre disponible cette entité, il faut greffer votre module sur le hook addWebserviceResources

/**
     * Ajout de la nouvelle entité au webservice
     * @param $params
     * @return array
     */
    public function hookAddWebserviceResources($params) {
        return [
            'samples' => [ //Nom du paramètre $webserviceParameters['objectsNodeName'] de la classe Objet
                'description' => 'Sample new entity for API',
                'class' => 'Sample'
            ],
        ];
    }

Une fois le module installé, vous pouvez-voir dans la liste des objets de l’api que l’entité sample est bien visible.…

Prestashop : Ajouter un objet dans l’api Lire la suite »

Publier des releases github via un script

Pour une fois un article qui n’est pas lié directement à une technologie en particulier , mais à la plateforme de sources github.
J’ai plusieurs modules qui sont disponibles sur cette plateforme et pour lequel un clone du dépôt ne permets pas d’obtenir un module fonctionnel.

Pour  cette raison il est nécessaire de créer des « releases » qui sont disponibles sur une page spécifique du dépot ( ex:  https://github.com/nenes25/eicaptcha/releases ) et sur lequel on peut mettre à disposition une archive ( ou tout autre fichier ) associé à la release à télécharger :

Ei captcha releases

Il est possible de faire cela manuellement directement depuis l’interface github, mais par principe manuellement c’est plus lent et plus souvent source d’erreurs qu’un script automatique.
Nous allons donc voir comment scripter tout ça en utilisant l’api v3 de github et curl.

Sachant que dans mon cas j’ai les prérequis suivants :

Je pense qu’il est possible de faire l’ensemble de la procédure ci-dessous via un script bash, mais pour moi c’était plus facile de le faire en php.…

Publier des releases github via un script Lire la suite »