erreur api soap php

Eléphanteau du PHP | 28 Messages

03 févr. 2022, 16:14

J'ai un soucis avec une api soap. Si je mets pas wsdl au bout de mon url, j'ai cette erreur

"SOAP-ERROR: Parsing WSDL: Couldn't load from '' : failed to load external entity """

si je mets le wsdl au bout de mon url

J'obtiens cette erreur " Unauthorized"

Peut etre que j'ai mal écris mon pai par rapport à la documentation fourni car j'ai beau vérifié concernant les mots de passe, je me suis pas trompé coté authentification.

Code : Tout sélectionner

<?php try{ $soapclient=new SoapClient('url',array('Username'=>'username','Password'=>'password')); $param=array( 'isoLangage'=>'EN', 'utilisateurID'=>'LABEO', 'applicationID'=>'WSDNA', 'identID'=>'526797', 'identKey'=>'T'); $response= $soapclient->getInformationPreleveur($param); var_dump($response); echo'<br><br><br>'; $array=json_encode($response,true); print_r($array); // echo'<br><br><br>'; // echo'<br><br><br>'; // foreach ($array as $item){ // echo '<pre>'; // var_dump($item); // } }catch(Exception $e){ echo $e->getMessage(); } ?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 févr. 2022, 19:59

"Unauthorized" : il faut que tu vérifies l'url et tes identifiants, et vu que tu passes en paramètres d'autres ID ça pourrait aussi venir de là.

Mon conseil, ce serait déjà de vérifier que tout fonctionne avec Postman, c'est un super outil qui permet de vérifier que l'API fonctionne bien avec les identifiants et paramètres que tu veux, et il peut même exporter le code PHP pour faire la requête.
https://www.postman.com/
https://learning.postman.com/docs/sendi ... -requests/
Si avec Postman ça ne fonctionne pas => contacte le responsable de ce webservice car c'est qu'il te manque quelque chose.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 28 Messages

04 févr. 2022, 09:43

Tout fonction dans postman.
Mon url et mon mot de passe sont bien les bons.

Je savais pas que postman pouvait faire ceci " il peut même exporter le code PHP pour faire la requête", peux-tu m'éclairer?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

04 févr. 2022, 11:28

Je savais pas que postman pouvait faire ceci " il peut même exporter le code PHP pour faire la requête", peux-tu m'éclairer?
Dans la barre de droite tu as une icone </> pour générer le code dans différents langages.
Je n'ai pas testé avec des requêtes SOAP mais sur une API REST JSON c'est redoutablement efficace.

Voici la doc :
https://learning.postman.com/docs/sendi ... -snippets/
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 28 Messages

04 févr. 2022, 11:41

J avais trouvé une vidéo qui m explique sauf que maintenant j ai cette erreur là.

"En :ServerUnsupported content type : application/x-www-form-urlencoded"

Si je comprend c est que mon résultat n est pas en format json.
J ai vu que il fallait mettre curlopt_postfields => json_encode() mais étant donné mon exportation,j ai déjà une donné, je ne vois pas.comment la rajouter.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

04 févr. 2022, 13:27

Non, ce message d'erreur dit que l'entête HTTP "Content-type" que tu envoies n'est pas acceptée par le serveur distant.

Pour des requêtes SOAP, il faut que l'entête Content-type soit "application/soap+xml".
Si le serveur distant ne respecte pas la norme, tu peux essayer aussi de mettre le Content-type text/xml

Avec curl pour indiquer les entêtes il faut que tu utilises curl_setopt() et CURLOPT_HTTPHEADER
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 28 Messages

04 févr. 2022, 16:41

@rthur merci C'est bon ca marche, je récupère bien mes données.

" PLACE DE L'EGLISEMME62128CROISILLES2013-11-1475880@ifae.frGENTY52679772880ANNE+33 (0)555555555+33 (0)606060606"

Sauf que je ne peux pas travailler avec ca , y' a pas d'espace entre les données et j'ai besoin de ses données pour pouvoir les réinsérer dans un tableau pour les coordonnées et concernant le numéro d'identification, je l'ai rentré en dur et non via le formulaire client .

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 févr. 2022, 18:20

Pour debuguer il faut utiliser var_dump() et non pas echo ou print.
Car je parierai que ce que tu reçois est bien séparé par des balises ;-)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 28 Messages

07 févr. 2022, 10:17

Même avec un var_dump, je reçois la même chose, sauf que devant cette chaine de caractère j 'ai ceci " string(676)" et dans ma console je recois bien toutes les balises, j'aimerai recevoir celle ci dans mon navigateur
Sinon je vais essayer de reprendre les mm balises de ma console pour voir ... c'est la première fois que je dois travaillé avec les api soap et xml

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 févr. 2022, 11:23

Regarde la source de ta page (Ctrl+u)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 28 Messages

07 févr. 2022, 16:05

En mettant

Code : Tout sélectionner

var_dump(json_encode($response)) ;
j'obtiens bien les balises dans mon navigateur par contrec'est pas lisible

string(705) ""<\/env:Header>4 PLACE DE L'EGLISE<\/adresse1>MME<\/civilite>62128<\/codePostal>CROISILLES<\/commune>2013-11-14<\/dateDebutFonction>[email protected]<\/mail>GENTY<\/nom>526797<\/nuIdentificateur>72880<\/nuperso>ANNE<\/prenom>+33 (0)555555555<\/telFixe>+33 (0)606060606<\/telPortable><\/informationPreleveur><\/ns2:getInformationPreleveurResponse><\/env:Body><\/env:Envelope>""

Dans un premier temps, je dois comparer l'identification rentré par le client dans le formulaire et verifié que cette identification existe bien et si oui, le formulaire peut etre validé sinon message d'erreur et impossible de valider le formulmaire si cette réponse n'est pas bonne.
Dans un deuxieme temps, il faudrai que je récupère les coordonnes de la réponse direct dans le formulaire mais le client pourra modifie l'adresse.
Je n'arrive pas a appeller en php ses résultats.
Voici mon code

Code : Tout sélectionner

<?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'http://wsdnarec.haras-nationaux.fr/dnaservices/DiffusionServices', CURLOPT_USERNAME=>'labeo', CURLOPT_PASSWORD=>'78t!m#0.', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS =>'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webServices.server.ifce.fr/"> <soapenv:Header/> <soapenv:Body> <web:getInformationPreleveur> <!--Optional:--> <infoPreleveurIn> <!--Optional:--> <contextHn> <!--Optional:--> <isoLangage>EN</isoLangage> <!--Optional:--> <utilisateurID>LABEO</utilisateurID> <!--Optional:--> <applicationID>WSDNA</applicationID> </contextHn> <!--Optional:--> <identID>526797</identID> <!--Optional:--> <identKey>T</identKey> </infoPreleveurIn> </web:getInformationPreleveur> </soapenv:Body> </soapenv:Envelope>', CURLOPT_HTTPHEADER => array( 'Content-Type:application/soap+xml' // 'Content-type: text/xml' ), )); $response = curl_exec($curl); curl_close($curl); // var_dump($response);// affiche string (676) + la chaine de caractère // echo $response; // affiche la chaine de caractère // var_dump(json_decode($response)) ; // reponse :null var_dump(json_encode($response)) ; echo '<br><br><br>'; // problème, il affiche également le status 200 même si erreur dans l'identKey var_dump(http_response_code());//affichage du code erreur echo'<br><br><br>';

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 févr. 2022, 16:35

Tu reçois du XML en réponse, donc tu peux utiliser la librairie SimpleXML en PHP pour interpréter les résultats et faire les traitements que tu veux
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 28 Messages

07 févr. 2022, 17:08

Merci, je vais aller donc chercher des informations sur cette librairie

Eléphanteau du PHP | 28 Messages

07 févr. 2022, 17:20

Par contre, ce qui me choque c'est que je n'ai que des balises fermantes dans l'affichage de mon navigateur

Invité
Invité n'ayant pas de compte PHPfrance

08 févr. 2022, 18:04

Pourrais tu m'éclairer un peu? 12h de recherche ,j 'ai beau lire la documentation et tout ce qui est indiqué ne marche pas . je me demande si c'est pas ma réception de données qui n'est pas bonne :-)