Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [kalsa] SOAP - tworzenie requesta
czesio159
post 7.10.2014, 12:54:41
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 10.06.2007

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


Witam,
mam problem ze skonstruowaniem wywołania funkcji SOAP.
Mam przykładowego XMLa, kiedy wywołuję go z programu SoapUI, dostaję prawidłową odpowiedź, więc XML wygląda na dobry.
Klienta SOAP na poziomie PHP mam też dobrze skonfigurowanrgo - inne funkcje dają dobre odpowiedzi.
Podejrzewam, że problem pojawia się na próbie przełożenia XML do parametru wywołania funkcji.
Zawartość XML:
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:big="http://bik.pl/cc/big">
  2. <soapenv:Header/>
  3. <soapenv:Body>
  4. <zapytanie-fin xmlns="http://bik.pl/cc/big" xmlns:ns2="http://bik.pl/cc/big/internal">
  5. <naglowek>
  6. <dane-id nr-ref="111111" id-kli-im="1111111" id-jed-org-kli="1111111" id-operatora="QAZ123456" haslo-operatora="haslo" zn-danych-test="true" zn-powt-operacji="false"/>
  7. <typ-zapyt kod-rodz-zapyt="62" czas-zapyt="2014-10-07T08:18:00"/>
  8. </naglowek>
  9. <dane>
  10. <forma-pr-podm forma-pr-podm="01"/>
  11. <dane-id-kons seria-nr-dok-tozs="ab123456" rodz-dok-tozs="DO" pesel="78542125695" nazw="nazwisko" imie="imie" form-przek-nazw-i-im="01"/>
  12. <daty-upow data-up-24-1="2014-10-07T00:00:00" data-up-bik="2014-10-07T00:00:00" data-up-zbp="2014-10-07T00:00:00"/>
  13. </dane>
  14. </zapytanie-fin>
  15. </soapenv:Body>
  16. </soapenv:Envelope>



Kod PHP z próbą wywołania funkcji:
  1. $nag = array
  2. (
  3. "dane-id"=>array
  4. (
  5. "nr-ref" => "111111",
  6. "id-kli-im"=>"1111111",
  7. "id-jed-org-kli"=>"1111111",
  8. "id-operatora"=>"QAZ123456",
  9. "haslo-operatora"=>"haslo",
  10. "zn-danych-test"=>"true",
  11. "zn-powt-operacji"=>"false"
  12. ),
  13. "typ-zapyt"=>array
  14. (
  15. "kod-rodz-zapyt" => "62",
  16. "czas-zapyt" => "2014-10-07T08:18:00"
  17.  
  18. )
  19.  
  20. );
  21.  
  22. $dane = array
  23. (
  24. "forma-pr-podm" => array
  25. (
  26. "forma-pr-podm" => "01"
  27. ),
  28. "dane-id-kons" => array
  29. (
  30. "seria-nr-dok-tozs" => "ab123456",
  31. "rodz-dok-tozs" => "DO",
  32. "pesel" => "78542125695",
  33. "nazw" => "nazwisko",
  34. "imie" => "Imie",
  35. "form-przek-nazw-i-im" => "01"
  36. ),
  37. "daty-upow" => array
  38. (
  39. "data-up-24-1" => "2014-10-07T00:00:00",
  40. "data-up-bik" => "2014-10-07T00:00:00",
  41. "data-up-zbp" => "2014-10-07T00:00:00"
  42. )
  43. );
  44.  
  45. $param3 = array("naglowek"=>$nag ,"dane"=>$dane);
  46.  
  47. try {
  48. $result = $client->__soapCall("nazwa_funkcji",array($param3));
  49. print_r($result);
  50.  
  51. } catch (SoapFault $exception) {
  52. echo $exception;
  53. }
  54.  


Wywołąnie funkcji w ten sposób daje w odpowiedzi błąd.
Wydaje mi się, że parametr array($param3) wywołania funkcji nie odpowiada plikowi XML.
Proszę o pomoc w prawidłowym zbudowaniu tego parametru.
Z góry dziękuję.

Ten post edytował czesio159 7.10.2014, 12:56:40
Go to the top of the page
+Quote Post
Pyton_000
post 7.10.2014, 13:02:02
Post #2





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

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


http://stackoverflow.com/questions/1530084...ith-an-xml-body
Go to the top of the page
+Quote Post
czesio159
post 7.10.2014, 13:38:23
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 10.06.2007

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


Dzięki za szybką odpowiedź.
Więc zrobiłem tak:


  1. $xml = "<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:big="http://bik.pl/cc/big">
  2. <soapenv:Header/>
  3. <soapenv:Body>
  4. <zapytanie-fin xmlns="http://bik.pl/cc/big" xmlns:ns2="http://bik.pl/cc/big/internal">
  5. <naglowek>
  6. <dane-id nr-ref="111111" id-kli-im="1111111" id-jed-org-kli="1111111" id-operatora="QAZ123456" haslo-operatora="haslo" zn-danych-test="true" zn-powt-operacji="false"/>
  7. <typ-zapyt kod-rodz-zapyt="62" czas-zapyt="2014-10-07T08:18:00"/>
  8. </naglowek>
  9. <dane>
  10. <forma-pr-podm forma-pr-podm="01"/>
  11. <dane-id-kons seria-nr-dok-tozs="ab123456" rodz-dok-tozs="DO" pesel="78542125695" nazw="nazwisko" imie="imie" form-przek-nazw-i-im="01"/>
  12. <daty-upow data-up-24-1="2014-10-07T00:00:00" data-up-bik="2014-10-07T00:00:00" data-up-zbp="2014-10-07T00:00:00"/>
  13. </dane>
  14. </zapytanie-fin>
  15. </soapenv:Body>
  16. </soapenv:Envelope>";
  17.  
  18.  
  19. $params = new \SoapVar($xml, XSD_ANYXML);
  20.  
  21. try {
  22.  
  23. $result = $client->__soapCall("nazwa_funkcji",array($params));
  24. //$result = $client->Echo($params);
  25. print_r($result);
  26.  
  27. } catch (SoapFault $exception) {
  28. echo $exception;
  29. }
  30.  


Może to coś pomoże?

teraz w odpowiedzi dotrzymuję błąd:
  1. SoapFault exception: [soap:Client] Parameter {http://schemas.xmlsoap.org/soap/envelope/}Envelope does not exist! in /var/strony/testy/soa/index.php:116 Stack trace: #0 /var/strony/testy/soa/index.php(116): SoapClient->__soapCall('nazwa_funkcji', Array) #1 {main}


Go to the top of the page
+Quote Post
Pyton_000
post 7.10.2014, 13:51:27
Post #4





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

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


$xml ujmij w ' zamiasj "
Go to the top of the page
+Quote Post
czesio159
post 7.10.2014, 14:11:05
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 10.06.2007

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


Cytat
$xml ujmij w ' zamiasj "


Nie pomogło, ten sam błąd.
Kurcze, cały dzień kombinuje, przeszukuje internet i nie mam już pomysłu jak to przejść.

Może ta informacja na coś was naprowadzi.
Otórz wcześniej wywoływałem inną funkcję ze znacznie mniej skomplikowanym parametrem.
Przykładowy XML do jej wywołania:
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:big="http://bik.pl/cc/big">
  2. <soapenv:Header/>
  3. <soapenv:Body>
  4. <big:status-systemu>
  5. <big:typ-komunikatu>5</big:typ-komunikatu>
  6. </big:status-systemu>
  7. </soapenv:Body>
  8. </soapenv:Envelope>


Więc robiłem tak:
  1. $param = array("typ-komunikatu"=>5);
  2.  
  3. $options = array( 'SOAPAction' => 'http://bik.pl/binari/ws/pobranie-rap-fin' );
  4. try {
  5. $result = $client->__soapCall("status-systemu", array($param));
  6.  
  7. print_r($result);
  8.  
  9. } catch (SoapFault $exception) {
  10. echo $exception;
  11. }


Odpowiedź tą metodą dostaje prawidłową.
Natomiast jak wywołam funkcję metodą jak post wyżej, tzn tak:

  1. $xml2 = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:big="http://bik.pl/cc/big">
  2. <soapenv:Header/>
  3. <soapenv:Body>
  4. <big:status-systemu>
  5. <big:typ-komunikatu>5</big:typ-komunikatu>
  6. </big:status-systemu>
  7. </soapenv:Body>
  8. </soapenv:Envelope>';
  9.  
  10. $param1 = new \SoapVar($xml2, XSD_ANYXML);
  11.  
  12. try {
  13. $result = $client->__soapCall("status-systemu", array($param1));
  14.  
  15. print_r($result);
  16.  
  17. } catch (SoapFault $exception) {
  18. echo $exception;
  19. }


Nadal dostaje w odpowiedzi błąd:
  1. SoapFault exception: [soap:Client] Parameter {http://schemas.xmlsoap.org/soap/envelope/}Envelope does not exist! in /var/strony/testy/soa/index.php:122 Stack trace: #0 /var/strony/testy/soa/index.php(122): SoapClient->__soapCall('status-systemu', Array) #1 {main}


Wygląda na to, że podany parametr jest źle zbudowany.
Proszę o wszelką pomoc.
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: 28.03.2024 - 23:19