Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour à tous,
J'essaye de contrôler un numéro de TVA en utilisant le webservice CHECKVAT mais je reçois une erreur , j'ai beau contrôler mon code et chercher sur le NET je n'arrive pas à trouver la cause de cette erreur, avez-vous une idée ?
Pour info j'utilise Powerbuilder version 9.0.3 Build 8784 sur windows 7
Voici le code powerbuilder:
// WebService SoapConnection lsoap_conn checkvatport lws_vat // long ll_retval String ls_errmsg //Instantiate SOAP connection lws_vat = create checkvatport lsoap_conn = create SoapConnection // Set trace file to record soap interchange data, ll_retval = lsoap_conn.SetOptions('SoapLog=' + '"C:\TMP\mySoapLog.log"') ll_retval = lsoap_conn.CreateInstance(lws_vat,"checkvatport") if ll_retval <> 0 then ls_errmsg = "Unable to create proxy. " + & "Error Code: " + String(ll_retval) MessageBox("WS","Soap Create instance: "+ls_errmsg) DESTROY lsoap_conn DESTROY lws_vat Return -1 end if // Appel fonction du webservice String ls_id_pays,ls_id_tva Date ld_today Boolean lb_ok String ls_nom String ls_retval ls_id_pays = 'BE' ls_id_tva = '0880778905' ld_today = Today() try ls_retval = lws_vat.checkvat(ls_id_pays,ls_id_tva, ld_today, lb_ok, ls_nom) if lb_ok then MessageBox("Checkvat","vat Ok") else MessageBox("WS","vat pas ok") MessageBox("CheckVat",ls_nom) catch ( SoapException e ) MessageBox("Checkvat",ls_retval+" Login: Soap Exception, Cannot invoke Web Service: " + e.text) end try if isvalid(lsoap_conn) then DESTROY lsoap_conn if isvalid(lws_vat) then DESTROY lws_vat Return 1
un print screen de mon projet:
Et voici le contenu du fichier MySoapLog.log:
CLOSED
REQUEST:
CLOSED
POST /taxation_customs/vies/services/checkVatService HTTP/1.1
Host: ec.europa.eu
Connection: Keep-Alive
User-Agent: EasySoap++/0.6
Content-Type: text/xml; charset=utf-8
SOAPAction: "urn:ec.europa.eu:taxud:vies:services:checkVat#checkVat"
Content-Length: 654
<E:Envelope
xmlns:E="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:A="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:s="http://www.w3.org/2001/XMLSchema-instance"
xmlns:y="http://www.w3.org/2001/XMLSchema"
E:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<E:Body>
<m:checkVat
xmlns:m="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
<ns1:countryCode
xmlns:ns1="urn:ec.europa.eu:taxud:vies:services:checkVat"
s:type="y:string">BE</ns1:countryCode>
<ns2:vatNumber
xmlns:ns2="urn:ec.europa.eu:taxud:vies:services:checkVat"
s:type="y:string">0880778905</ns2:vatNumber>
</m:checkVat>
</E:Body>
</E:Envelope>
RESPONSE:
HTTP/1.1 500 Internal Server Error
Date: Tue, 02 Oct 2012 10:29:25 GMT
Content-Type: text/xml; charset=UTF-8
Server: Europa
Transfer-Encoding: chunked
Connection: Keep-Alive
01d7
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>Unmarshalling Error: unexpected element (uri:"urn:ec.europa.eu:taxud:vies:services:checkVat", local:"countryCode"). Expected elements are <{urn:ec.europa.eu:taxud:vies:services:checkVat:types}vatNumber>,<{urn:ec.europa.eu:taxud:vies:services:checkVat:types}countryCode> </faultstring></soap:Fault></soap:Body></soap:Envelope>
0000
Transfer is Chunked!
GetChunkLength: 01d7 = 471
Connection Disconnected
D'avance merci pour votre aide
Dernière modification par bewan (04-10-2012 08:07:36)
Hors ligne
Bonjour,
Il semblerait que ton proxy PB soit mal généré et je sais pas si c'est possible de le "corriger", le namespace des tags countryCode et vatNumber ne sont pas correcte.
J'ai rencontré exactement le même problème il y a quelque temps sur ce même webservice (lorsqu'il à changé de spécification notamment)
Un rapide test pour montrer que çà fonctionne :
pbperl115 -MSOAP::Lite -e "$s=SOAP::Lite->uri('urn:ec.europa.eu:taxud:vies:services:checkVat:types')->proxy('http://ec.europa.eu/taxation_customs/vies/services/checkVatService', timeout => 5 ); $som=$s->checkVat(SOAP::Data->name('countryCode' => 'BE'), SOAP::Data->name('vatNumber' => '0880778905') ); print join $/, $som->result,$som->paramsout"
ce qui génère l’enveloppe suivante pour la requête :
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <checkVat xmlns="urn:ec.europa.eu:taxud:vies:services:checkVat:types"> <countryCode xsi:type="xsd:string">BE</countryCode> <vatNumber xsi:type="xsd:string">0880778905</vatNumber> </checkVat> </soap:Body> </soap:Envelope>
Le résultat étant :
BE 0880778905 2012-10-02+02:00 true M LANGENAKENS GUY RUE DE THORICOURT 2 7850 ENGHIEN1
J’espère que ça peux te donner une piste...
Hors ligne
Puissant le Perl
Hors ligne
Merci , c'est une très bonne piste , je vais voir ce qu'on peut faire en PB
Hors ligne
Houra , j'ai enfin réussi à utiliser ce webservice grace à la piste donnée par xlat .
La solution est tirée par les cheveux mais ca fonctionne:
- en powerbuilder il faut exporter l'objet checkvatport
- Editer le fichier checkvatport.srx et changer:
- BindingStyle = "document" par BindingStyle = "rpc"
- address@urn:ec.europa.eu:taxud:vies:services:checkVat*checkVat*urn:ec.europa.eu:taxud:vies:services:checkVat:types
par
address@urn:ec.europa.eu:taxud:vies:services:checkVat:types*checkVat*urn:ec.europa.eu:taxud:vies:services:checkVat:types
- Importer le fichier checkvatport.srx en powerbuilder
- Fin
Après cette modif , quand on fait un appel du webservice le fichier Mysoaplog contient maintenant ceci:
CLOSED
REQUEST:
CLOSED
POST /taxation_customs/vies/services/checkVatService HTTP/1.1
Host: ec.europa.eu
Connection: Keep-Alive
User-Agent: EasySoap++/0.6
Content-Type: text/xml; charset=utf-8
SOAPAction: "urn:ec.europa.eu:taxud:vies:services:checkVat:types#checkVat"
Content-Length: 527
<E:Envelope
xmlns:E="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:A="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:s="http://www.w3.org/2001/XMLSchema-instance"
xmlns:y="http://www.w3.org/2001/XMLSchema"
E:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<E:Body>
<m:checkVat
xmlns:m="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
<m:countryCode
s:type="y:string">IT</m:countryCode>
<m:vatNumber
s:type="y:string">06601831008</m:vatNumber>
</m:checkVat>
</E:Body>
</E:Envelope>
RESPONSE:
HTTP/1.1 200 OK
Date: Thu, 04 Oct 2012 07:55:42 GMT
Content-Type: text/xml; charset=UTF-8
Server: Europa
Transfer-Encoding: chunked
Connection: Keep-Alive
01a5
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><checkVatResponse xmlns="urn:ec.europa.eu:taxud:vies:services:checkVat:types"><countryCode>IT</countryCode><vatNumber>06601831008</vatNumber><requestDate>2012-10-04+02:00</requestDate><valid>true</valid><name>ACI GLOBAL SPA</name><address>VIA STANISLAO CANNIZZARO 83/A
00156 ROMA RM</address></checkVatResponse></soap:Body></soap:Envelope>
0000
Transfer is Chunked!
GetChunkLength: 01a5 = 421
Connection Disconnected
Hors ligne
Pages: 1