Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]SoapClient
Randallmaster
post 16.01.2015, 11:54:11
Post #1





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


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 ;/

Ten post edytował Randallmaster 16.01.2015, 11:54:35
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
Pyton_000
post 16.01.2015, 12:36:42
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Duży skrót
  1. $soap = new SoapClient(...);
  2. $soap->nazwaMetody(array('username' =>'klocek', 'password'=>'lego'));
Go to the top of the page
+Quote Post
Randallmaster
post 16.01.2015, 12:46:55
Post #3





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


NazwaMetody?? co w tym miejscu powinno się znajdować?

Podpowiedź cena ale mało z niej rozumiem smile.gif

Ten post edytował Randallmaster 16.01.2015, 12:52:18
Go to the top of the page
+Quote Post
Pyton_000
post 16.01.2015, 13:05:56
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


może AuthenticationTicket ? Nie wiem, zerknij w dokumentacje SoapClient tam masz metodę do podglądu dostępnych metod dla WS
Go to the top of the page
+Quote Post
Randallmaster
post 16.01.2015, 15:43:26
Post #5





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował Randallmaster 16.01.2015, 15:42:23
Go to the top of the page
+Quote Post
noche
post 20.02.2015, 09:04:27
Post #6





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 20.02.2015

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Randallmaster
post 20.02.2015, 09:06:33
Post #7





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Problem został już dawno rozwiązany
Go to the top of the page
+Quote Post
noche
post 23.02.2015, 08:04:17
Post #8





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 20.02.2015

Ostrzeżenie: (0%)
-----


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?

Ten post edytował noche 20.02.2015, 12:29:27
Go to the top of the page
+Quote Post
ilidir
post 23.02.2015, 08:16:45
Post #9





Grupa: Zarejestrowani
Postów: 183
Pomógł: 14
Dołączył: 27.09.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
noche
post 23.02.2015, 12:54:08
Post #10





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 20.02.2015

Ostrzeżenie: (0%)
-----


a jakieś sprawdzone tutoriale ? smile.gif
czytałem o nusoap ale chciałem przetestować na standardowym soapcliencie, wdrozyc sie troche w ten temat
Go to the top of the page
+Quote Post
b4rt3kk
post 23.02.2015, 12:59:18
Post #11





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Randallmaster
post 23.02.2015, 13:18:22
Post #12





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Korzystam już z klienta SOAP i jest o wiele wygodniejszy smile.gif
Go to the top of the page
+Quote Post
noche
post 2.03.2015, 14:54:36
Post #13





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 20.02.2015

Ostrzeżenie: (0%)
-----


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?

Ten post edytował noche 3.03.2015, 10:05:20
Go to the top of the page
+Quote Post
ilidir
post 2.03.2015, 18:00:18
Post #14





Grupa: Zarejestrowani
Postów: 183
Pomógł: 14
Dołączył: 27.09.2014

Ostrzeżenie: (0%)
-----


pokaz kod serwera
Go to the top of the page
+Quote Post
noche
post 3.03.2015, 07:55:16
Post #15





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 20.02.2015

Ostrzeżenie: (0%)
-----


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


Ten post edytował noche 3.03.2015, 10:07:07
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 15:42