Jump to content

[API WebService] Lier différentes données (customers & ordres )


Recommended Posts

Bonjour,

 

Cela fait trois jours que je parcours les forums, que je publie mes questions, etc ... Sans aucune réponses. La documentation fournie par Prestashop étant pas assez détaillée pour un développeur junior et le forum anglais ne répondant pas, je tente ma chance ici.

 

Je cherche à pouvoir relier/lier/joindre plusieurs données avec l'API de Prestashop Web Service.

 

J'ai réussi à afficher l'id avec un lien qui amène vers une page qui affiche le nom prénom, mail, société du client concerné.

 

Mais voilà mon soucis, sur cette fiche client, j'aimerais pouvoir afficher les différentes commandes qu'il a effectué depuis sont inscription. J'ai essayé plusieurs choses mais sans succès (que vous verrez dans mon code publié ci-dessous ).

 

 

J'aimerais donc pouvoir afficher les différentes commandes ( via un lien ) que le client a effectué, mais impossible de savoir comment faire. Comme dit plus haut, la documentation n'est pas assez détaillée pour moi , du moins ce que je cherche n'est pas expliqué ( ainsi que différentes petites choses mais bon ).

 

Voilà, si quelqu'un pourrait m'aider ici s'il vous plait cela serait sympa !

<?php 
define('DEBUG', true);
define('PS_SHOP_PATH','XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
define('PS_WS_AUTH_KEY', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');

// Appel la librairie à la racine pour acceder aux méthodes GET, POST, PUT, DELETE
require_once('./PSWebServiceLibrary.php'); 

try
{
	//Création d'une nouvelle instance de PrestaShopWebService
	$webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);
	//Création d'un tableau qui va contenir "customers"
	$opt['resource'] = 'customers';
	$optOrder['resource'] = 'orders';
	// Vérification si l'id est définit
	if (isset($_GET['id']))
	{
		$opt['id'] = (int)$_GET['id'];
		$optOrder['id_customer'] = (int)$_GET['id'];

	}
	//On récupère UN SEUL utilisateur ( en fonction de l'id choisit )
	$xml = $webService->get($opt);
	$resources = $xml->children()->children();
	$xml2 = $webService->get(array(
    'resource' => 'customers',
    'display' => '[id,id_lang,firstname,lastname,email,company]', //Les informations que l'ont veut obtenir
    'filter[id]' => '['.$resources.']', //Filtrer par id 
    'limit' => 1 // Pour n'avoir qu'un seul résultat
	));
	$resources2 = $xml2->children()->children()->children();


    $xmlOrder = $webService->get($optOrder);
    $resourcesOrder = $xmlOrder->children()->children();
    var_dump($resourcesOrder);
    $xmlOrderTab = $webService->get(array(
    	'resource' => 'orders',
    	'display' => '[id,id_customer,total_paid,reference]',
    	'filter[id]' => '['.$resourcesOrder.']',
    	'limit' => 1
    ));

    $resourcesOrder2 = $xmlOrderTab->children()->children()->children();
    var_dump($xmlOrderTab);
}
catch (PrestaShopWebServiceExeption $ex)
{
	$trace = $ex->getTrace(); // Récupère toutes les Informations sur l'erreur
	$errorCode = $trace[0]['args'][0]; // Récupération du code d'erreur
	if ($errorCode == 401)
		echo 'Bad auth key'; else
		echo 'Other error : <br />'.$ex->getMessage();
	// Affiche un message associé à l’erreur
}

echo '<h1>Liste des utilisateurs ';
if (isset($_GET['id']))
{
	echo 'Details';
}
else
{ 
	echo 'List';
}
echo '</h1>';
// We set a link to go back to list if we are in customer's details
if (isset($_GET['id'])){
	echo '<a href="?">Retour</a>';
}
echo '<table border="5">';
//Si $resources est définie, on liste les éléments. Sinon, afficher erreur 
if (isset($resources))
{
	if (!isset($_GET['id']))
	{
		echo '<tr><th>Id</th><th>Détails</th></tr>';
		foreach ($resources as $resource)
		{
			
			echo '<tr><td>'.$resource->attributes().'</td><td>'.
			'<a href="?id='.$resource->attributes().'">Voir les détails</a>'.
			'</td></tr>';
		}
	}
	else
	{
		foreach ($resources2 as $key => $resource2)
		{
			echo '<tr>';
			echo '<th>'.$key.'</th><td>'.$resource2.'</td>';
			echo '</tr>';
		}
		foreach ($resourcesOrder as $key2 => $resourceOrder2)
		{
			echo '<tr>';
			echo '<th>'.$key2.'</th><td>'.$resourceOrder2.'</td>';
			echo '</tr>';
		}
	}
}
else
{
	echo 'erreur';
}
echo '</table>';

?>

J'espère avoir une petite réponse/aide, ayant posté plusieurs fois ici et ayant été aidé qu'une seule fois sur plusieurs post, j'aimerais vraiment avoir un coup de main ici car je n'ai encore jamais trouvé de personnes ayant eu un problème similaire ou autre ( a défaut d'avoir pourtant cherché ).

 

Coridlameeent

Link to comment
Share on other sites

Bonjour,

 

Vous avez eu des erreurs?

Vous pouvez nous mettre ce qui retourne les var_dump

aussi 

 'filter[id]' => '['.$resources.']', //Filtrer par id

Il faut mettre seulement l'id customer et je vois pas l'utilité de cette instruction vu que tu as deja envoyé l'id customer

 

Et je pense pour avoir les commandes il faut faire

$resourcesOrder2 = $xmlOrderTab->children()->children();

aussi 

'filter[id]' => '['.$resourcesOrder.']',

est inutile essaie de les supprimer et teste avec 

$resourcesOrder2 = $xmlOrderTab->children()->children();
    var_dump($xmlOrderTab);
Link to comment
Share on other sites

Tu peux essayer ce code ça marche pour moi

<?php
 
define('DEBUG', true);
define('PS_SHOP_PATH','http://localhost/presta_16');
define('PS_WS_AUTH_KEY', 'NDJBKLLP71SLXNCAL8TXMGZJKBPHF5UN');

// Appel la librairie à la racine pour acceder aux méthodes GET, POST, PUT, DELETE
require_once('./PSWebServiceLibrary.php'); 

try
{
	//Création d'une nouvelle instance de PrestaShopWebService
	$webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);
	//Création d'un tableau qui va contenir "customers"
	$opt['resource'] = 'customers';
	$optOrder['resource'] = 'orders';
	// Vérification si l'id est définit
	if (isset($_GET['id']))
	{
		$opt['id'] = (int)$_GET['id'];
		$optOrder['id_customer'] = (int)$_GET['id'];

	}
        $id_customer = isset($_GET['id'])?(int)$_GET['id']:0;
	//On récupère UN SEUL utilisateur ( en fonction de l'id choisit )
	$xml = $webService->get($opt);
	$resources = $xml->children()->children();
	$xml2 = $webService->get(array(
        'resource' => 'customers',
        'display' => '[id,id_lang,firstname,lastname,email,company]', //Les informations que l'ont veut obtenir
        'filter[id]'=>  $id_customer,  
        'limit' => 1 // Pour n'avoir qu'un seul résultat
	));
	$resources2 = $xml2->children()->children()->children();
        
        

    $xmlOrder = $webService->get($optOrder);
    $resourcesOrder = $xmlOrder->children()->children();
    //var_dump($resourcesOrder);
    $xmlOrderTab = $webService->get(array(
    	'resource' => 'orders',
    	'display' => '[id,id_customer,total_paid,reference]',
    	'filter[id_customer]'=>$id_customer
    	
    ));

    $resourcesOrder2 = $xmlOrderTab->children();
    //var_dump($resourcesOrder2);
}
catch (PrestaShopWebServiceExeption $ex)
{
	$trace = $ex->getTrace(); // Récupère toutes les Informations sur l'erreur
	$errorCode = $trace[0]['args'][0]; // Récupération du code d'erreur
	if ($errorCode == 401)
		echo 'Bad auth key'; else
		echo 'Other error : <br />'.$ex->getMessage();
	// Affiche un message associé à l’erreur
}

echo '<h1>Liste des utilisateurs ';
if (isset($_GET['id']))
{
	echo 'Details';
}
else
{ 
	echo 'List';
}
echo '</h1>';
// We set a link to go back to list if we are in customer's details
if (isset($_GET['id'])){
	echo '<a href="?">Retour</a>';
}
echo '<table border="5">';
//Si $resources est définie, on liste les éléments. Sinon, afficher erreur 
if (isset($resources))
{
	if (!isset($_GET['id']))
	{
		echo '<tr><th>Id</th><th>Détails</th></tr>';
		foreach ($resources as $resource)
		{
			
			echo '<tr><td>'.$resource->attributes().'</td><td>'.
			'<a href="?id='.$resource->attributes().'">Voir les détails</a>'.
			'</td></tr>';
		}
	}
	else
	{
		foreach ($resources2 as $key => $resource2)
		{
			echo '<tr>';
			echo '<th>'.$key.'</th><td>'.$resource2.'</td>';
			echo '</tr>';
		}
		foreach($resourcesOrder2->children() as $node_key=>$node){
                    echo '<tr>';
                    echo '<td>Commande Nu'.$node->id.'</td>';
                    foreach ($node->children() as $key2 => $resourceOrder2)
                    {
                            if($key2!='id')
                            echo '<td>'.$key2.':'.$resourceOrder2.'</td>';

                    }
                    echo '</tr>';
                }
	}
}
else
{
	echo 'erreur';
}
echo '</table>';

?>


Link to comment
Share on other sites

Bonjour ! Hé bien merci beaucoup à toi,

 

ça fonctionne aussi de mon côté, je commençais à perdre espoir de pouvoir faire ça !! Je vais étudier un peut plus ton code pour comprendre ce que tu a fais.

 

Merci encore !!

 

PS : Pour le var dump, rien ne s'affichait justement .... :

object(SimpleXMLElement)#137 (1) { ["orders"]=> object(SimpleXMLElement)#134 (1) { [0]=> string(1) " " } } 

Tu viens de résoudre environs 2-3 jours de recherches :D ! Merci encore & encore !

  • Like 1
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...