problem z xml do allegro webapi

0

Zacząłem pisać aplikację do allegro webapi w bcb 2006 i od razu schody. Wygenerowałem pliki cpp i h za pomocą WSDLIMP z tego: https://webapi.allegro.pl/uploader.php?wsdl i zauważyłem, że nazwy pól, które zawierają znak myślnika "-" zamieniane są na podkreślenie "_". W związku z tym webapi wywala błąd o zgubionych parametrach.

Przykładowy komunikat (dane pozmieniałem), który generuje HTTPRIO:

 
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><NS1:doGetUserID xmlns:NS1="urn:AllegroWebApi">
<country_id xsi:type="xsd:int">1</country_id>
<user_login xsi:type="xsd:string">login</user_login>
<user_email xsi:type="xsd:string"></user_email>
<webapi_key xsi:type="xsd:string">123456789</webapi_key>
</NS1:doGetUserID></SOAP-ENV:Body></SOAP-ENV:Envelope>

zamiast user_login powinno być user-login

i to co zwraca allegro:

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>ERR_INPUT_COUNTRY_ERROR</faultcode><faultstring>Country code is missing or is incorrect.</faultstring><faultactor>doGetUserID - Invalid country.</faultactor><detail><soapVal><ERRNO xsi:type="xsd:string">415:1362683822:61</ERRNO></soapVal></detail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>

Czy da się coś z tym fantem zrobić?

0

Ja ten problem (pisząc w delphi7) wyeliminowałam w źródle SOAP.

W pliku borland/src/soap/OPToSoapDomConv.pas, w linii 971 (w zależności od wersji) jest:

 if MD.Params[J].Name = ExtractLocalName(Node.NodeName) then<code class="delphi"> 

powinno być:

if StringReplace(MD.Params[J].Name,'_', '', [rfReplaceAll]) = StringReplace(ExtractLocalName(Node.NodeName), '-', '', [rfReplaceAll]) then

Proponuję pracować na nowym https://webapi.allegro.pl/service.php?wsdl
Zmieniły się: nazwy zmiennych. Obecnie są już bez myślników. Więc problem masz rozwiązany.
Zastosowano również kodowanie document/literal, z którym osobiście walczę i polegam w swoim D7:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1