Image Principale

Créer un produit sur Prestashop avec le WebService


Récemment, j'ai appris à utiliser les webservice de Prestashop. Cet article détaillera les étapes afin de créer un tout nouvel article sur Prestashop. Nous ferons attention de remplir tous les champs obligatoires.

Pré-requis:

  • Un site sous PrestaShop
  • Une clé Prestashop Webservice

I Récupérer un schéma XML d'un produit

La première chose que nous avons à faire est de récupérer un fichier XML, qui va nous indiquer à peu près tous les champs que nous devons remplir. Pour faire cela, voici la marche à suivre.

1) Se connecter à Prestashop

Voici le code pour établir une connexion à Prestashop:

define('DEBUG', true);
define('PS_SHOP_PATH', 'http://monprestashop.com');
define('PS_WS_AUTH_KEY', 'VOTRE CLE WEBSERVICE');
require_once('./PSWebServiceLibrary.php');

try {
    $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);
}
catch (PrestaShopWebserviceException $ex) {
    // Shows a message related to the error
    echo 'Other error: <br />' . $ex->getMessage();
}

Vous devez être bien sûr d'avoir télécharger le fichier PSWebServiceLibrary.php et l'avoir placé dans le bon répertoire. Vous pouvez trouver le code de ce fichier sur ce lien.

2) Récupérer le XML vide

Continuons notre petit code, et récupérons le XML vide d'un produit:

$xml = $webService->get(array('url' => 'http://monprestashop.com/api/products?schema=synopsis'));
$resources = $xml->product->children();

En utilisant schema-synopsis, on demande en plus à Prestashop de nous indiquer quels sont les champs obligatoires à remplir.

Il va ensuite être nécessaire de supprimer quelques champs. En effet, si l'on renvoie tout comme si de rien n'était, PrestaShop nous renverra une erreur en nous indiquant que nous n'avons pas le droit de toucher à certains champs:

unset($resources->manufacturer_name);
unset($resources->quantity);
unset($resources->position_in_category);
unset($resources->associations); 

I Remplir le fichier XML

Le but de cet article est de permettre l'enregistrement du produit sur la boutique en ligne. Nous n'allons donc que remplir les champs obligatoire. Et comme vous pouvez le voir dans les champs que nous avons enlevé, notre produit ne sera associé à rien pour l'instant. C'est un enregistrement le plus sommaire possible d'un article.

1) Les champs de langue

Il est nécessaire de rentrer le nom du produit ainsi qu'une chaine de caractère qui correspondra à l'url de réécriture sur Prestashop. Mais ce n'est pas si simple puisqu'une difficulté vient s'ajouter: les langues dans Prestashop. Si vous n'avez qu'une langue sur votre magasin, vous devez également faire cette étape.

for($i = 0; $i < count($resources->name->language); $i++){
    $resources->name->language[$i] = 'Le nom de mon produit';
    $resources->link_rewrite->language[$i] = 'mon-produit';
}

Le code ci-dessus vous ira sûrement si vous n'utilisez qu'une langue sur votre magasin. Cependant, si vous utilisez effectivement plusieurs langues sur votre magasin, vous pouvez remplir un nom et u link_rewrite pour chacune des langues. Par exemple, si vous avez deux langues sur votre site, et que la langue originale est le français et la langue ajoutée l'anglais:

// On renseigne les éléments en français
$resources->name->language[0] = 'Mon produit';
$resources->link_rewrite->language[0] = 'mon-produit';

// Puis en Anglais
$resources->name->language[1] = 'My product';
$resources->link_rewrite->language[1] = 'my-product';

2) Les autres champs obligatoires

Enfait, il n'y en a qu'un, et c'est le prix. Vous pouvez donc simplement faire:

$resources->price = 20;

III Envoyer le fichier et sauvegarder le produit

Il ne nous reste plus qu'à sauvegarder notre produit dans la base de données Prestashop en faisant:

$opt = array( 'resource' => 'products' );
$opt[ 'postXml' ] = $xml->asXML();
$xml = $webservice->add( $opt );

Votre produit est maintenant enregistré sur Prestashop! Bravo! Si vous voulez récupérer l'ID Prestashop du produit que vous venez d'enregistrer, vous pouvez utiliser ces lignes:

$resources = $xml->product->children();
$id = $resources->id;

Et voici donc le code complet:


define('DEBUG', true);
define('PS_SHOP_PATH', 'http://monprestashop.com');
define('PS_WS_AUTH_KEY', 'VOTRE CLE WEBSERVICE');
require_once('./PSWebServiceLibrary.php');

try {
    $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);
}
catch (PrestaShopWebserviceException $ex) {
    // Shows a message related to the error
    echo 'Other error: <br />' . $ex->getMessage();
}

$xml = $webService->get(array('url' => 'http://monprestashop.com/api/products?schema=synopsis'));
$resources = $xml->product->children();

unset($resources->manufacturer_name);
unset($resources->quantity);
unset($resources->position_in_category);
unset($resources->associations);

for($i = 0; $i < count($resources->name->language); $i++){
    $resources->name->language[$i] = 'Le nom de mon produit';
    $resources->link_rewrite->language[$i] = 'mon-produit';
}

$resources->price = 20;

$opt = array( 'resource' => 'products' );
$opt[ 'postXml' ] = $xml->asXML();
$xml = $webservice->add( $opt );

$resources = $xml->product->children();
$id = $resources->id;