Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]SoapClient
Forum PHP.pl > Forum > Przedszkole
Randallmaster
Witam,

Mam problem z odczytaniem takiego nagłówka:

<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
<s:element name="AuthenticationTicket" type="tns:AuthenticationTicket"/>
<s:complexType name="AuthenticationTicket">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
</s:sequence>
<s:anyAttribute/>
</s:complexType>
</s:schema>
</wsdl:types>

W ogóle nie wiem jak wysłać user i password. W internecie znalazłem niby sposoby ale ciągle mam błąd ;/
Pyton_000
Duży skrót
  1. $soap = new SoapClient(...);
  2. $soap->nazwaMetody(array('username' =>'klocek', 'password'=>'lego'));
Randallmaster
NazwaMetody?? co w tym miejscu powinno się znajdować?

Podpowiedź cena ale mało z niej rozumiem smile.gif
Pyton_000
może AuthenticationTicket ? Nie wiem, zerknij w dokumentacje SoapClient tam masz metodę do podglądu dostępnych metod dla WS
Randallmaster
Nie wiem jak dokładnie to sprawdzić:

Poniżej skrócona wersja xml:

  1. <wsdl:types>
  2. <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
  3. <s:element name="AuthenticationTicket" type="tns:AuthenticationTicket"/>
  4. <s:complexType name="AuthenticationTicket">
  5. <s:sequence>
  6. <s:element minOccurs="0" maxOccurs="1" name="user" type="s:string"/>
  7. <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
  8. </s:sequence>
  9. <s:anyAttribute/>
  10. </s:complexType>
  11. </s:schema>
  12. </wsdl:types>
  13. <wsdl:message name="A1SoapIn">
  14. <wsdl:part name="parameters" element="tns:A1"/>
  15. </wsdl:message>
  16. <wsdl:message name="A1SoapOut">
  17. <wsdl:part name="parameters" element="tns:A1Response"/>
  18. </wsdl:message>
  19. <wsdl:message name="A1AuthenticationTicket">
  20. <wsdl:part name="AuthenticationTicket" element="tns:AuthenticationTicket"/>
  21. </wsdl:message>
  22. <wsdl:portType name="SoapSoap">
  23. <wsdl:operation name="A1">
  24. <wsdl:input message="tns:A1SoapIn"/>
  25. <wsdl:output message="tns:A1SoapOut"/>
  26. </wsdl:operation>
  27. </wsdl:portType>
  28. <wsdl:binding name="SoapSoap12" type="tns:SoapSoap">
  29. <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
  30. <wsdl:operation name="A1">
  31. <soap12:operation soapAction="http://tempuri.org/A1" style="document"/>
  32. <wsdl:input>
  33. <soap12:body use="literal"/>
  34. <soap12:header message="tns:A1AuthenticationTicket" part="AuthenticationTicket" use="literal"/>
  35. </wsdl:input>
  36. <wsdl:output>
  37. <soap12:body use="literal"/>
  38. </wsdl:output>
  39. </wsdl:operation>
  40. </wsdl:operation>
  41. </wsdl:binding>


Jeżeli chodzi o funkcję wywołuje ją następująco:

  1. $wsdl="link to wsdl";
  2. $client = new SoapClient($wsdl);
  3.  
  4. $params = array(
  5. "company" => "5555",
  6. "userName" => "login",
  7. "password" => "pass",
  8. );
  9.  
  10. $response = $client->__soapCall("A1", $params);
  11. print_r($response);


jak do tego wywołania dodać AuthenticationTicket ?

Wywołanie funkcji działa poprawnie ale niestety dostaję za każdym razem pusty zwrot ponieważ nic nie dodałem w header
noche
poproszę o podpowiedz według wujka googla sprawa powiną być bardzo prosta ale dla mnie nie bardzo
nie chce tworzyć nowego tematu wiec napisze tutaj

przykładowe zapytanie

<body>
<p : NumerK xmlns:p="http://adres/model/dane">
<p:NumerK>4001</p:NumerK>
</p:NumerK>
</body>


odpowiedz
<NumerKOdpowiedz xmls="http://adres/model/dane">
<DaneK>
<NumerK>4001</NumerK>
<imie>abc</imie>
<nazwisko>abc</nazwisko>
</DaneK>
</NumerKOdpowiedz>

WSDL: http://192.168.22.6:8280/services/numerk?wsdl
Adres serwisu: http://192.168.22.6:8280/services/numerk

$wsdl_link = 'http://192.168.22.6:8280/services/numerk?wsdl';
$client = new SoapClient($wsdl_link);

echo "<BR /> var dump <BR />";
var_dump($client->__getFunctions()); // wynik array(24) { [0]=> string(63) "..........numerk(numerk$parameters)" }
echo "<BR /> prnt f <BR />";
print_r($client); //SoapClient Object ( [_soap_version] => 1 [sdl] => Resource id #4 )
echo "<BR /> cos <BR />";

i to działa nic pyzatym z manualni php nie chce wyjść
chodzi głownie o zadanie pytania podaj 'imie' dla 'numerk' = 4001
jakakolwiek podpowiedz będzie mile widziana
Randallmaster
Problem został już dawno rozwiązany
noche
a możesz mi coś podpowiedzieć z moim xml'em ?

to co mi się udało zrobić

<?php

$metoda = "NumerK";
$request = 'p:NumerK xmlns:p="http://nazwa/model/dane" ';
$request1 = 'p:NumerK';
try {
$options = array(
'soap_version'=>SOAP_1_2,
'exceptions'=>true,
'trace'=>1,
'cache_wsdl'=>WSDL_CACHE_NONE
);
$client = new SoapClient('http://192.168.22.6:8280/services/numer?wsdl', $options);

$results = $client-> $metoda(array( $request1 =>array('NumerK'=>'4001')));
} catch (Exception $e) {
echo "<h2>Exception Error!</h2>";
echo $e->getMessage();
}

var_dump ($results); // object(stdClass)#2 (0) { }
echo "<BR /> var dump typy<BR />";
echo '<pre>';
var_dump($client->__getTypes());
echo '</pre>';
echo "<BR /> var dump funkcje<BR />";
echo '<pre>';
var_dump($client->__getFunctions());
echo '</pre>';
echo "<BR /> print_r <BR />";
echo '<pre>';
print_r($client);
echo '</pre>';


?>


<body>
<p:NumerK xmlns:p="http://nazwa/model/dane">
<!--Exactly 1 occurrence-->
<p:NumerK>4001</p:NumerK>
</p:NumerK>
</body>

<NumerK_Odpowiedz xmlns="http://nazwa/model/dane">
<DaneK>
<NumerK>4001</NumerK>
<Imie>Piotr</Imie>
<Nazwisko>Nowak</Nazwisko>
</DaneK>
</NumerK_Odpowiedz>

sa typy, funkcje
SoapClient Object
(
[trace] => 1
[_soap_version] => 2
[sdl] => Resource id #4
[__last_request] =>


[httpsocket] => Resource id #5
[_use_proxy] => 0
[httpurl] => Resource id #6
[__last_request_headers] => POST /services/NumerK.SOAP11Endpoint HTTP/1.1
Host: 192.168.22.6:8280
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.4.27
Content-Type: application/soap+xml; charset=utf-8; action="urn:NumerK"
Content-Length: 323


[__last_response_headers] => HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8; action="urn:NumerK_Response"
Date: Fri, 20 Feb 2015 11:21:42 GMT
Server: Synapse-HttpComponents-NIO
Transfer-Encoding: chunked
Connection: Keep-Alive

[__last_response] =>
)

ale jak mogę wyświetlić imię numeru 4001 questionmark.gif 'Piotr'


jakakolwiek podpowiedz?
ilidir
polecam skorzystać z gotowca jakim jest NUSOAP są tam gotowi clienci oraz serwery smile.gif Sam teraz pracujewłaśnie na tymrozwiązaniu i jestem zadowolony.
noche
a jakieś sprawdzone tutoriale ? smile.gif
czytałem o nusoap ale chciałem przetestować na standardowym soapcliencie, wdrozyc sie troche w ten temat
b4rt3kk
Cytat(noche @ 23.02.2015, 12:54:08 ) *
a jakieś sprawdzone tutoriale ? smile.gif
czytałem o nusoap ale chciałem przetestować na standardowym soapcliencie, wdrozyc sie troche w ten temat


Klient SOAP jest tak prostym narzędziem, że wg mnie szkoda czasu na jakieś udziwnienia w rodzaju nusoap.
Randallmaster
Korzystam już z klienta SOAP i jest o wiele wygodniejszy smile.gif
noche
udało mi się wymordować coś takiego

$URL = "http://192.168.2.6:8280/services/MSSQL2008_TEST?wsdl";
$option = array("trace"=>true);
$client = new SOAPClient($URL, $option);
$functions = $client->__getFunctions();
$employeeId_key = '';
$bodyoptions = array();
$response = $client->__soapCall("Lista" , $bodyoptions);

----> dodane po rozwiązaniu problemu smile.gif echo $response->Element[0]->Nazwa;

<Slownik xmlns="http://www.pl/services/mssql2008">
<Element>
<IDSlownik>1</IDSlownik>
<IDFormularz>1</IDFormularz>
<Nazwa>info1</Nazwa>
<Aktywnosc>1</Aktywnosc>
</Element>
<Element>
<IDSlownik>2</IDSlownik>
<IDFormularz>1</IDFormularz>
<Nazwa>info2</Nazwa>
<Aktywnosc>1</Aktywnosc>
</Element>
</Slownik>


ale niestety nie wiem jak wyświetlić obie odpowiedzi z "Nazwa"
podpowiecie?
ilidir
pokaz kod serwera
noche
hmm
nie tworzyłem żadnej części serwera gdzieś wyczytałem ze jak jest wsdl to nie ma takiej konieczności ale soap to zupełnie nowy temat dla mnie wiec zaraz poczytam na ten temat
chyba ze chodzi o to ?
.
.
<xs:element name="Lista">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="Slownik" type="ns2:Slownik"/>
<xs:complexType name="Slownik">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="Element" type="ns2:Element"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Element">
<xs:sequence>
<xs:element name="IDSlownik" nillable="true" type="xs:integer"/>
<xs:element name="IDFormularz" nillable="true" type="xs:integer"/>
<xs:element name="Nazwa" nillable="true" type="xs:string"/>
<xs:element name="Aktywnosc" nillable="true" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
.
.
<wsdl:message name="ListaRequest">
<wsdl:part name="parameters" element="ns2:Lista"/>
</wsdl:message>
<wsdl:message name="ListaResponse">
<wsdl:part name="parameters" element="ns2:Slownik"/>
</wsdl:message>
.
.
<wsdl:operation name="Lista">
<wsdl:documentation/>
<wsdl:input message="ns2:ListaRequest" wsaw:Action="urn:Lista"/>
<wsdl:output message="ns2:ListaResponse" wsaw:Action="urn:ListaResponse"/>
<wsdl:fault message="ns2:DataServiceFault" name="DataServiceFault" wsaw:Action="urn:ListaDataServiceFault"/>
</wsdl:operation
.
.
<wsdl:operation name="Lista">
<soap:operation soapAction="urn:Lista" style="document"/>
.
.
<wsdl:operation name="Lista">
<soap12:operation soapAction="urn:Lista" style="document"/>
.
.
<wsdl:operation name="Lista">
<http:operation location="Lista"/>
<wsdl:input>
<mime:content type="text/xml" part="parameters"/>
</wsdl:input>
<wsdl:output>
<mime:content type="text/xml" part="parameters"/>
</wsdl:output>
</wsdl:operation>


nie kopiowałem całości bo sporo tego jest

print_r($response);
stdClass Object
(
[Element] => Array
(
[0] => stdClass Object
(
[IDSlownik] => 1
[IDFormularz] => 1
[Nazwa] => info1
[Aktywnosc] => 1
)

[1] => stdClass Object
(
[IDSlownik] => 3
[IDFormularz] => 1
[Nazwa] => info2
[Aktywnosc] => 1
)

)

)

smile.gif rozwiązanie dodałem w kodzie php post wyżej
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.