MAPVince Posted July 22, 2016 Share Posted July 22, 2016 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 More sharing options...
tarek.fellah Posted July 22, 2016 Share Posted July 22, 2016 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 More sharing options...
tarek.fellah Posted July 22, 2016 Share Posted July 22, 2016 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 More sharing options...
MAPVince Posted July 22, 2016 Author Share Posted July 22, 2016 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 ! Merci encore & encore ! 1 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now