4 pièce(s) jointe(s)
Consommation Web service - problème d'authentifcation - Problème avec SOAPAjouteEntête ?
Bonjour la Communauté.
Je me tourne vers vous car après de mutliples tentatives, je n'arrive pas à consommer un web service.
Pour donner le contexte, ce web service permet d'interroger une base de données de l'administration belge. La connexion est sécurisée.
Il convient de préciser que j'ai testé ce web service via un outil tiers : SoapUI
Pas de soucis avec cet outil : le retour se fait parfaitement.
Voir print-screen
Pièce jointe 567457
Par ailleurs, je me suis assuré que j'appréhendais correctement la consommation d'un web service dans Windev en utilisant ce web service http://www.dneonline.com/calculator.asmx
La consommation de ce web service ne pose aucun soucis.
Voici mon code dans Windev
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
lSPFDemande est un checkEnterpriseNumbers
WITH lSPFDemande
.contactInformation.identifier.enterpriseNumber="blabla"
.contactInformation.contactPerson.emailAddress="blabla"
.contactInformation.contactPerson.firtname="blabla"
.contactInformation.contactPerson.lastname="blabla"
.contactInformation.contactPerson.phoneNumber="blabla"
.contactInformation.mainEmailAddress="blabla"
.contactInformation.mainPhoneNumber="blabla"
.enterpriseNumber="blabla"
.requesterEnterpriseNumber="blabla"
END
SOAPAjouteEntête(crassusService,"Username","blabla","http://minfin.fgov.be/dad/services/crassus")
SOAPAjouteEntête(crassusService,"Password","blabla","http://minfin.fgov.be/dad/services/crassus")
lbufByBuffer est un Buffer = SOAPPrépare(checkEnterpriseNumbers,lSPFDemande)
SI PAS SOAPExécuteXML("https://ccff-test1.minfin.be/services/dadCrassusPublic",lbufByBuffer,"") ALORS ErreurInfo(errMessage)
Trace(SOAPDonneRésultat(SOAPRésultatXML)) |
Je mets en pièce jointe le xml du SOAPPrépare et du SOAPDonneRésulat : Pièce jointe 567460Pièce jointe 567464
La balise <message>User or password invalid</message> ne laisse aucun doute sur le problème...
Je joints également le wsdl du web service : Pièce jointe 567467
J'avoue que je me sens à bout de ressources...
D'avance merci pour vos précieux retours.
1 pièce(s) jointe(s)
Contournement avec les fonctions HTTP
Je continue d'avancer sur mon problème...
J'avais l'intuition que Windev ne construisait pas la requête HTTP correctement et n'allait pas placer le "Username" et le "Password" au bon endroit.
Grâce à WireShark, j'ai analysé la structure envoyée par SoapUI.
On voit clairement que les Username et Password ne se trouvent pas dans le contenu xml, mais bien plus haut.
Pièce jointe 567669
En fouillant l'aide de Windev, j'ai trouvé la propriété Entête des variables httpRequête.
Je me suis dit : soyons fou, et codons tout de bout en bout.
C'est donc un mix de soap et de http
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
lCrassus_SPF est une httpRequête
lCrassusResponse est une httpRéponse
lSPFDemande est un checkEnterpriseNumbers
AVEC lSPFDemande
.contactInformation.identifier.enterpriseNumber="blabla"
.contactInformation.contactPerson.emailAddress="blabla"
.contactInformation.contactPerson.firtname="Xavier"
.contactInformation.contactPerson.lastname="NINANE"
.contactInformation.contactPerson.phoneNumber="blabla"
.contactInformation.mainEmailAddress="blabla"
.contactInformation.mainPhoneNumber="blabla"
.enterpriseNumber="blabla"
.requesterEnterpriseNumber="blabla"
FIN
lbufByBuffer est un Buffer = SOAPPrépare(checkEnterpriseNumbers,lSPFDemande)
lCrassus_SPF.ContentType=typeMimeTexteXML
lCrassus_SPF.Entête["SOAPAction"] = ""
lCrassus_SPF.Entête["Username"] = "MyUsername"
lCrassus_SPF.Entête["Password"]="MyPassword"
lCrassus_SPF.Contenu=lbufByBuffer
lCrassus_SPF.URL="https://ccff-test1.minfin.be/services/dadCrassusPublic"
lCrassusResponse = HTTPEnvoie(lCrassus_SPF)
Trace(lCrassusResponse..Contenu) |
Et bingo, ça fonctionne.
La question subsidiaire que je laisse à une âme charitable de la communauté : est-il possible d'arriver à ce résultat en restant dans les fonctions soap et sans devoir employer ce subterfuge ?
Bonne fin de WE.