Artur Lasota

Artur Lasota Programista php

Temat: Integracja z dom.gratka.pl

Obecnie korzystam z api dom.gratka.pl do wystawiania nieruchomości.
Co ciekawe przy wystawianiu nieruchomości pobieram kategorie, na bazie wybranej kategorii pola do formularza, słowniki jeżeli trzeba. Wypełniam formularz, wysyłam i otrzymuje głupi komunikat:

SOAP Fault: (faultcode: Client, faultstring: SOAP-ERROR: Encoding: object hasn't 'aktywne' property)


Nie wiem czemu jeżeli wysyłam wszystkie wymagane pola do gratki (pobrane wcześniej przez api) to czemu otrzymuje informacje ze brakuje pól.

Dodałem te niby brakujące pole do formularza, jednak pojawia się błąd że brakuje innego pola i tak w kółko macieju.

A tutaj kod który wykorzystuje w skrócie.


class ogloszenie
{
public $cena;
public $gmina;
public $id_kategoria;
public $id_liczba_pieter;
public $id_liczba_pokoi;
public $id_pietro;
public $id_region;
public $kontakt_email;
public $kontakt_numer_licencji;
public $kontakt_osoba;
public $kontakt_telefon;
public $miejscowosc;
public $powiat;
public $powierzchnia;
}

$login="lo@gin.pl";
$haslo="haslo";
$kluczapi="kluczapi";
$id_dom="382";

try
{
$client = new SoapClient("http://soaptest.webapi.gratka.pl/webapi.html?wsdl");
}
catch (SoapFault $fault)
{
trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
exit;
}

$ogloszenie = new ogloszenie();
$ogloszenie->cena = 1000000;
$ogloszenie->gmina = 'gmina';
$ogloszenie->id_kategoria = 397;
$ogloszenie->id_liczba_pieter=4;
$ogloszenie->id_liczba_pokoi = 4;
$ogloszenie->id_pietro=2;
$ogloszenie->id_region=10;
$ogloszenie->kontakt_email='adres@edma.ad';
$ogloszenie->kontakt_numer_licencji='1234567';
$ogloszenie->kontakt_osoba='imie nazwisko';
$ogloszenie->kontakt_telefon='400 132 141';
$ogloszenie->miejscowosc='miejscwowc';
$ogloszenie->powiat='powiat';
$ogloszenie->powierzchnia=110;

try
{
$insertionID = $client->dodaj_ogloszenie($login, $haslo, $kluczapi, $id_dom, $ogloszenie);
echo $insertionID;
}
catch (SoapFault $fault)
{
trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
exit;
}
Artur Lasota edytował(a) ten post dnia 20.03.11 o godzinie 10:10
Artur Lasota

Artur Lasota Programista php

Temat: Integracja z dom.gratka.pl

Co tu taka bida z nędzą, nikt nie da rady pomóc ?:)
Marcin Molga

Marcin Molga Senior Solution
Architect, IBM.

Temat: Integracja z dom.gratka.pl

Artur Lasota:
Co tu taka bida z nędzą, nikt nie da rady pomóc ?:)

Zapewne szklane kule są zepsute. Podrzuć WSDLa.

Strzelam, że wsdl definiuje pole 'aktywne', w typie 'ogloszenie', którego nie ma w twojej klasie 'ogloszenie'.

Edit: wyświetliłem sobie WSDLa, nie był chroniony. Oczywiście w type 'ogloszenie' pierwsze pole to:
<code>
<xsd:complexType name="ogloszenie">
<xsd:all>
<xsd:element name="aktywne" type="xsd:integer" />
...
</xsd:all>
</xsd:complexType>
</code>

Ponieważ w definicji pola 'aktywne' nie występuje deklaracja 'minOccurs, domyślnie obowiązuje 'minOccurs = 1', zatem musisz dodać to pole do swojej klasy 'ogloszenie'.

Porada: wykorzystaj gotowe albo napisz swoje narzędzie do generowania klas z WSDLa.

Pozdrawiam.Marcin MOLGA edytował(a) ten post dnia 25.03.11 o godzinie 09:32
Artur Lasota

Artur Lasota Programista php

Temat: Integracja z dom.gratka.pl

Marcin MOLGA:

Ponieważ w definicji pola 'aktywne' nie występuje deklaracja 'minOccurs, domyślnie obowiązuje 'minOccurs = 1', zatem musisz dodać to pole do swojej klasy 'ogloszenie'.

Porada: wykorzystaj gotowe albo napisz swoje narzędzie do generowania klas z WSDLa.

Wyszło na to że szereg pól nie jest pobieranych przez metodę api gratki

->pobierz_pola($categoryId);


Najpierw należy z WSDLa pobrać wszystkie pola, połączyć je z polami pobranymi przez wyżej wymienioną metoda, wypełnić wymagane i tak stworzony obiekt ogłoszenia metodą

->dodaj_ogloszenie(....);


Niestety nic nie było na temat zamieszczania WSZYSTKICH PÓL w obiekcie podczas dodawania ogłoszenia.

Dzięki Marcin za podpowiedź.

Teraz dochodzi problem taki że nie mogę dodać ogłoszenia z KAŻDEJ KATEGORII. Możliwe że na testowym WSDLu są ograniczenia.

PS.
Support techniczny z gratka.pl jak zwykle się spisał. Od tygodnia nie ma od nich odpowiedzi.
Marcin Molga

Marcin Molga Senior Solution
Architect, IBM.

Temat: Integracja z dom.gratka.pl

Artur Lasota:
Wyszło na to że szereg pól nie jest pobieranych przez metodę api gratki

->pobierz_pola($categoryId);

Bo ta metoda pobiera wyłącznie listę pól wymaganych w danej kategorii. Klasa 'ogloszenie' MUSI zawierać wszystkie pola, tak jest zadeklarowana w WSDLu. Polecam: http://www.w3schools.com/schema/el_element.asp

Pewnie jak dodałeś pole 'aktywne', dostałeś identyczny wyjątek na polu 'bufor'?

Najpierw należy z WSDLa pobrać wszystkie pola, połączyć je z polami pobranymi przez wyżej wymienioną metoda, wypełnić wymagane i tak stworzony obiekt ogłoszenia metodą

Wygeneruj sobie klasę 'ogloszenie' zawierającą wszystkie pola wg definicji, a potem wypełniaj wymagane w zależności od kategorii.

W jednym projekcie musieliśmy integrować m. in. aplikację w PHP z ESB przez webservices - napisaliśmy własne narzędzie do generowania klas na podstawie plików XSD, z restrykcjami (phpDoc) i ich obsługą. Jak masz automat - wtedy odpadają błędy walidacji.
Niestety nic nie było na temat zamieszczania WSZYSTKICH PÓL w obiekcie podczas dodawania ogłoszenia.

Bo nie musi być, to wynika z 'XML Schema Reference'.

Dzięki Marcin za podpowiedź.

Teraz dochodzi problem taki że nie mogę dodać ogłoszenia z KAŻDEJ KATEGORII. Możliwe że na testowym WSDLu są ograniczenia.

Rozwiń, proszę.
PS.
Support techniczny z gratka.pl jak zwykle się spisał. Od tygodnia nie ma od nich odpowiedzi.

I za to płacisz??

Pozdrawiam.
Artur Lasota

Artur Lasota Programista php

Temat: Integracja z dom.gratka.pl

Po wybraniu przykładowo kategorii "mieszkanie -> rynek pierwotny -> sprzedam", wysłaniu wszystkich pól (uzupełniając prawidłowo wymagane) otrzymuję komunikat "Nie możesz dodawac ogłoszeń do tej kategorii".

Może tą są jakieś ograniczenia na soap testowy??
Nie wiadomo bo ze strony gratki jak zwykle cisza.
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Integracja z dom.gratka.pl

Artur Lasota:
Po wybraniu przykładowo kategorii "mieszkanie -> rynek pierwotny -> sprzedam", wysłaniu wszystkich pól (uzupełniając prawidłowo wymagane) otrzymuję komunikat "Nie możesz dodawac ogłoszeń do tej kategorii".

Może tą są jakieś ograniczenia na soap testowy??
Nie wiadomo bo ze strony gratki jak zwykle cisza.

Być może ogłoszenia rynku pierwotnego mogą dodawać tylko deweloperzy - ograniczenia. Inaczej byłoby to już rynek wtórny.
Marcin Molga

Marcin Molga Senior Solution
Architect, IBM.

Temat: Integracja z dom.gratka.pl

Artur Świerc:
Może tą są jakieś ograniczenia na soap testowy??
Nie wiadomo bo ze strony gratki jak zwykle cisza.

Być może ogłoszenia rynku pierwotnego mogą dodawać tylko deweloperzy - ograniczenia. Inaczej byłoby to już rynek wtórny.

Zgadzam się. Komunikacja działa poprawnie, to ograniczenia wynikające już z zaimplementowanej (nie)logiki biznesowej[1] po stronie gratki.

Nie wiem, czy korzystasz z zewnętrznych narzędzi - użyj SOAP UI (http://sourceforge.net/projects/soapui/files/) albo WebServices Explorera (http://www.eclipse.org/webtools/ws/). Sprawdzają się zwłaszcza wtedy, kiedy nie wiesz, czy sama komunikacja działa.

W każdym razie ja spróbowałbym wysłać przy pomocy WSE ogłoszenie o parametrach podanych w przykładach, używając twojego loginu, hasła itp. Zakładam, że chociaż przykłady z gratki działają :)

[1] Obejrzałem dokładniej WSDLa. Tak kretyńskiego modelu dawno nie wdziałem - jedna klasa 'ogloszenie' trzyma parametry domów, łodzi, samochodów i sw. Intel wie, czego jeszcze, tak, jakby dziedziczenie nie istniało...

Pozdrawiam.
Tomek Galiński

Tomek Galiński Analityk aplikacji
webowych

Temat: Integracja z dom.gratka.pl

Witajcie,

Opisywane tutaj problemy dotyczą WebAPI 1.0. W tej chwili jest już wersja WebAPI 2.0 dla serwisów Gratka.pl. Więcej informacji na temat nowej wersji na stronie http://pomoc.webapi-beta.gratka.pl/.
Wersja 2.0 posiada inny WSDL, zróżnicowany na produkty i bardziej uporządkowany.
W razie pytań zapraszam na forum http://sugestie.webapi.gratka.pl/Webapi?order=new

Pozdrawiam.
Przemysław Kalicki

Przemysław Kalicki Business Strategy,
New Media

Temat: Integracja z dom.gratka.pl

dziękuje Tomek

Następna dyskusja:

[SAP & PHP] Integracja i mi...




Wyślij zaproszenie do