PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → Utilisation de SOAPprépare()
Utilisation de SOAPprépare()
Débuté par YANNICK LARDOUX, 14 mar. 2019 15:28 - 4 réponses
Membre enregistré
2 messages
Posté le 14 mars 2019 - 15:28
Bonjour à tous,

Pour un développement interne, J'ai besoin de me connecter à un webservice tiers, SOAP sécurisé par login et mot de passe.

je pars de zéro, n'ayant jamais fait cela !

Après avoir lu la doc sur le sujet sur le site de PCSoft et me documenter sur le fonctionnement des webservices SAOP, je me mis au travail !

J'ai donc utilisé la fonction SOAPPrépare() qui permet de créer la chaîne de connexion et la requête en XML.
Mais malheureusement, cela ne fonctionnait pas : Connexion impossible au serveur.

Je parcours le forum, et je vois que le problème est connu mais personne ne donne la solution.
Et certains créent eux-mêmes le XML. Solution qui ne me convient pas car la fonction existe.

alors je cherche... je fais un test de connexion et de requête avec le programme SoapUI et tout fonctionne... bizarre

J'ai donc comparé le XML venant de SoapUI et celui généré par SOAPPrépare()... et j'ai trouvé 3 différences.

la première :
SOAPPrépare() ajoute une entête : <?xml version="1.0" encoding="UTF-8"?>

la deuxième et la troisième sont liées : erreur de balise :
SOAPPrépare : <wsu:UsernameToken
SoapUI : <wsse:UsernameToken
et
SOAPPrépare : </wsu:UsernameToken>
SoapUI : </wsse:UsernameToken>


Donc j'ai créé une petite procédure qui modifie la sortie de SOAPPrépare() et maintenant ça fonctionne !

Voici la procédure :

Procedure ModifierXML(bufFerXML est un Buffer)

sEntête_à_enlever est une chaîne = ...
[
<?xml version="1.0" encoding="UTF-8"?>
]

bufFerXML = Remplace(bufFerXML,sEntête_à_enlever,"")
bufFerXML = Remplace(bufFerXML,"<wsu:UsernameToken","<wsse:UsernameToken")
bufFerXML = Remplace(bufFerXML,"</wsu:UsernameToken>","</wsse:UsernameToken>")

RENVOYER bufFerXML


Si cela peut aider quelqu'un ou faire remonter l'info au développeur de windev.
Posté le 15 mars 2019 - 11:38
YANNICK LARDOUX a utilisé son clavier pour écrire :
Si cela peut aider quelqu'un ou faire remonter l'info au développeur de
windev.


je te suggère de remonter cela à PCSOFT sous forme d'un incident.

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com
Membre enregistré
2 messages
Posté le 15 mars 2019 - 12:02
Roumegou Eric a écrit :
YANNICK LARDOUX a utilisé son clavier pour écrire :
Si cela peut aider quelqu'un ou faire remonter l'info au développeur de
windev.


je te suggère de remonter cela à PCSOFT sous forme d'un incident.

---



ok merci, je le ferais :merci:


petite modification :

j'ai enlever l'entête du xml
<?xml version="1.0" encoding="UTF-8"?>


mais en fait le serveur prend des xml codés en ISO-8859-1

au lieu de retirer l'entête, je remplace l'encodage du xml par :
<?xml version="1.0" encoding="ISO-8859-1"?>



mise à jour de la fonction :

Procedure ModifierXML(bufFerXML est un Buffer)

sEntête_à_enlever est une chaîne = ...
[
<?xml version="1.0" encoding="UTF-8"?>
]

sEnteteXML est une chaîne = ...
[
<?xml version="1.0" encoding="ISO-8859-1"?>
]

bufFerXML = Remplace(bufFerXML,sEntête_à_enlever,sEnteteXML)
bufFerXML = Remplace(bufFerXML,"<wsu:UsernameToken","<wsse:UsernameToken")
bufFerXML = Remplace(bufFerXML,"</wsu:UsernameToken>","</wsse:UsernameToken>")

RENVOYER bufFerXML
Posté le 22 juillet 2019 - 20:15
Bonjour,

J'ai utilisé ta procédure parce que je rencontre le même problème que tu a évoqué. Mais je suis toujours bloqué au niveau de SOAPExécuteXML (renvoi Faux sans explication dans ErreurInfo()). Peux-tu me dire STP ce qui ne va pas dans mon code ?

bufMyBuffer est un Buffer
param1 est WSI4_PointRelais_Recherche
result1 est un WSI4_PointRelais_RechercheResponse
param1.Enseigne = "BDTEST13"
param1.Pays = "FR"
param1.NumPointRelais = ""
param1.Ville = ""
param1.CP = "03200"
param1.Latitude = ""
param1.Longitude = ""
param1.Taille = ""
param1.Poids = "5"
param1.Action = "24R"
param1.DelaiEnvoi = ""
param1.RayonRecherche = "100"
param1.NombreResultats = "10"
param1.Security = Majuscule("33da5f122daa40241087cc7845bea4b1")


bufMyBuffer = SOAPPrépare(WSI4_PointRelais_Recherche,param1)
bufMyBuffer = ModifierXML(bufMyBuffer)


SOAPExécuteXML("http://api.mondialrelay.com/Web_Services.asmx",bufMyBuffer,"WSI4_PointRelais_Recherche")
Posté le 23 juillet 2019 - 15:58
Bonjour Yannick

Je formate mieux ma préoccupation

J'ai utilisé ta procédure parce que je rencontre le même problème que tu a évoqué. Mais je suis toujours bloqué au niveau de SOAPExécuteXML (renvoi Faux sans explication dans ErreurInfo()). Peux-tu me dire STP ce qui ne va pas dans mon code ?

bufMyBuffer est un Buffer
param1 est WSI4_PointRelais_Recherche
result1 est un WSI4_PointRelais_RechercheResponse
param1.Enseigne = "BDTEST13"
param1.Pays = "FR"
param1.NumPointRelais = ""
param1.Ville = ""
param1.CP = "03200"
param1.Latitude = ""
param1.Longitude = ""
param1.Taille = ""
param1.Poids = "5"
param1.Action = "24R"
param1.DelaiEnvoi = ""
param1.RayonRecherche = "100"
param1.NombreResultats = "10"
param1.Security = Majuscule("33da5f122daa40241087cc7845bea4b1")

bufMyBuffer = SOAPPrepare(WSI4_PointRelais_Recherche,param1)
bufMyBuffer = ModifierXML(bufMyBuffer)

SOAPExécuteXML("http://api.mondialrelay.com/Web_Services.asmx",bufMyBuffer,"WSI4_PointRelais_Recherche")


Merci d'avance

Cdt
Stan