Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Połączenie się z oAuth z SOAP, wsdl
Forum PHP.pl > Forum > PHP
bialko0019
Cześć. Nie mogę rozkminić - jak mogę wykonać zapytania przez SOAP, dodatkowo autoryzując się prze oAuth? Mam w dokuemtnacji podane:
oAuthClient / oauth_consumer_key
oAuthClientSecret / oauth_consumer_secret
oauth_token
oauth_token_secret

i jak to uzyć w zapytaniu soap (wysłać xml) ? Mam też podany adres wsdl..

Sam soap, bym zrobił na zasadzie:
  1. $client = new \SoapClient('https://example.pl/plik.asmx?wsdl');
  2. $soapmessage = [
  3. 'request' => [
  4. 'Credentials' => [
  5. 'login' => 'login',
  6. 'pass' => 'password'
  7. ]
  8. ]
  9. ];
  10. $ListaRatePlans = $client->GetMethodJakas($soapmessage);



a do tego jeszcze oAuth i wykorzystując podane dane? Czy mogę liczyć na jakieś wskazówki? Czy muszę na serwerze zainstlować oAuth?
Puszy
Z tego co się orientuję to oAuth wykonujesz na HTTP. Więc musisz ustawić headery w HTTP przed wysłaniem samego SOAPa, ten wpis ze stacka powinien Ci pomóc: http://stackoverflow.com/a/6691848/2621852
bialko0019
Hej. Dzięki za odpowiedz. A jak to wszystko zebrać w załość? w headerze ustawiam te outk_key(...) i dalej zapytanie soap? W dokumentacji mam napisane tak jak na zdjęciu, a robię tak jak poniżej:

  1. $client = new SOAPClient('https://XXXXX.pl/2012A/PlanningService.asmx?wsdl',
  2. 'trace' => 1,
  3. 'style' => SOAP_RPC,
  4. 'use' => 'utf-8',
  5. 'stream_context' => stream_context_create(array(
  6. 'http' => array(
  7. 'header' => [
  8. 'oauth_consumer_key' => 'XXX',
  9. 'oauth_consumer_secret' => 'XXX',
  10. 'oauth_token' => 'XX',
  11. 'oauth_token_secret' => 'XX',
  12. ]
  13. ),
  14. )),
  15. )
  16. );
  17.  
  18. $request = '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><Test xmlns="XXXX/planning/2012A" /></soap:Body>
  19. </soap:Envelope>';
  20. $result = array();
  21. $params = array("infoRequestXml" => $request);
  22. try {
  23. $result = $client->__soapCall('Test', array("parameters"=>$params));
  24. } catch (SoapFault $e) {
  25. echo "SOAP Fault: ".$e->getMessage()."<br />\n";
  26. }
  27.  


no i cały czas dostaje info, że serwer nie może zrealizowac tego żądania: SOAP Fault: Server was unable to process request.

Gdzie robię błąd? Rozumiem, że w tym przypadku muszę wykonać zapytanie soap, ustawiając w headerze te oauth?




Puszy
Jak dla mnie masz źle skonstruowaną tablicę 'http'. Spróbuj to zrobić tak jak jest w przykładzie pierwszym tutaj: http://www.php.net/stream_context_create

z oAuthem pracowałem tylko raz i ustawiałem tam header: 'Authorization: Bearer tutaj_token_oauth'.
bialko0019
Hej. Dzięki za odpowiedź - przez święta troch temat u mnie zamilkł, ale znów powrócił. Zobacz, zrobiłem sobie za pomocą curl zapytanie, które działa mi idealnie dla method, które nie potrzebują autoryzacji. Kod:

  1. <?php
  2.  
  3. $xml_post_string = '<?xml version="1.0" encoding="utf-8"?>
  4. <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  5. <soap:Body>
  6. <AAA xmlns="XXXXX">
  7. <login></login>
  8. <password></password>
  9. <beginDate>2017-01-10</beginDate>
  10. <endDate>2017-01-15</endDate>
  11. <currency></currency>
  12. <rateFilter></rateFilter>
  13. <options></options>
  14. </AAA>
  15. </soap:Body>
  16. </soap:Envelope>';
  17. $soapUrl = 'XXXXService.asmx?WSDL';
  18. $soap_do = curl_init();
  19. curl_setopt($soap_do, CURLOPT_URL, $soapUrl );
  20. curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 90);
  21. curl_setopt($soap_do, CURLOPT_TIMEOUT, 90);
  22. curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
  23. curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
  24. curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
  25. curl_setopt($soap_do, CURLOPT_SSLVERSION,4);
  26. curl_setopt($soap_do, CURLOPT_POST, true );
  27. curl_setopt($soap_do, CURLOPT_POSTFIELDS, $xml_post_string);
  28. curl_setopt($soap_do, CURLOPT_HTTPHEADER, ['Content-Type: text/xml; charset=utf-8', 'Content-Length: '.strlen($xml_post_string) ]);
  29. $data = curl_exec($soap_do);
  30. print_r($data);
  31.  
  32.  
  33.  
  34. ?>


Jeśli chcę użyć metod, które już tego potrzebują, to dostaję informacje, że muszę podać login i hasło albo uwierzytelnić się z pomocą oAuth. Loginu i hasła w tej chwili nie mogę dostać, to jak do tego dodać oAuth? Czy mogę dodać do header te dodatkowe parametry, tj. oAuthClient / oauth_consumer_key, oAuthClientSecret / oauth_consumer_secret, oauth_token, oauth_token_secret czy muszę jednak jakoś zrobić tak, że wygenerować zapytanie samo oAuth, otrzymać token i ten token jakoś wysłać już w normalnym zapytaniu z kodem, który wyżej podałem?

Dziękuję za wskazówki..
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.