Próbuję użyć usługi sieciowej do wyszukiwania określonych użytkowników z mojej aplikacji PHP. Użyłem tego samego tego samego serwisu w ASP.NET z powodzeniem.PHP 5 Klient SOAP zwraca NULL, gdy funkcja dostarczana przez WSDL nazywa się
Zasadniczo robię wszystko, co dokumentacja PHP mówi mi, i używam tych samych metod/zmiennych, których użyłem w ASP.NET (dla samej usługi), ale nie mogę uzyskać wyniku.
Funkcja jest wymieniony w __getFunctions() i powinien wrócić anyType
, które, jeśli dobrze rozumiem, to odpowiednik mixed
w PHP:
array(1) { [0]=> string(63) "anyType basicSearch(string $sharedSecret, string $searchParams)" }
Kiedy mów basicSearch(), choć wydaje się, zwraca NULL .
Funkcja basicSearch() ma zwrócić dokument XML zawierający te informacje. W ASP.NET zwykłem po prostu rzutować odpowiedź na, jak sądzę, i XmlDocument. Czy powinienem to zrobić również w PHP? Z jaką reprezentacją dokumentu XML (SimpleXML, DOM, itp.)?
Czy może być wyświetlany jako NULL tylko dlatego, że PHP nie może zrozumieć formatu?
Czy robię coś złego w PHP? A może powinienem zajrzeć do samej usługi i spróbować debugować po tej stronie?
<?php
$client = new SoapClient($wsdl_url);
echo $client->__getFunctions();
echo "<br />\n";
echo $client->basicSearch($key, $req);
?>
PS: Używam biblioteki PHP 5. Może mogłoby pomóc użycie innej biblioteki, takiej jak nu-soap? Wygląda na to, że jest więcej dokumentów online na ten temat.
Aktualizacja:
Korzystanie tablicę przejść parametr nie działa, SOAP przewiduje osobne argumenty. Wywołanie __getLastRequest() zwraca ciąg znaków konkatenacji $ key i $ req bez żadnego innego XML. Wywołanie __getLastResponse() zwraca pusty łańcuch. Żadne wyjątki nie są wrzucane. Wygląda na to, że PHP nie wie, co zrobić z argumentami, które mu podaję, mimo że przetworzył plik WSDL, ponieważ dostaję funkcję, której używam na liście, kiedy wywołuję __getFunctions().
Każda pomoc zostanie doceniona.
Aktualizacja ": Nadal nie działa żadne rozwiązanie. Jestem zdziwiony ...
Zauważ, że powtarzając tablicę zawsze daje „Array”, bo to jest jak tablica konwertuje ciąg znaków. spróbuj użyć funkcji print_r() lub var_dump(). –
Tak, teraz dostaję prawidłową funkcję. Dziękuję, naprawdę to wiedziałem i tęskniłem za tym. Problem został zaktualizowany. –
Twój przykład kodu nie sprawdza wyjątków, które mogą zostać odrzucone przez klienta - czy anulowałeś to dla uproszczenia przykładu? Jeśli nie, sugeruję dodanie tego testu za pomocą try/catch, ponieważ może to dać przydatne komunikaty o błędach. –