Uwielbiam framework Guzzle, który właśnie odkryłem. Używam go do agregowania danych z wielu interfejsów API przy użyciu różnych struktur odpowiedzi. Udało się znaleźć z JSON i XML, ale jedna z usług, które muszę zużyć, używa SOAP. Czy istnieje wbudowany sposób korzystania z usług SOAP przy użyciu Guzzle?Używanie Guzzle do używania SOAP
Odpowiedz
IMHO Guzzle nie ma pełnej obsługi SOAP i działa tylko z żądaniami HTTP. src/chlać/HTTP/ClientInterface.php Line: 76
public function createRequest(
$method = RequestInterface::GET,
$uri = null,
$headers = null,
$body = null,
array $options = array()
);
Nawet jeśli serwer SOAP jest skonfigurowany do negocjacji na porcie 80 myślę php SoapClient jest bardziej odpowiednie rozwiązanie tutaj, ponieważ obsługuje WSDL
Myślę, że teraz brzmi to w wersji 6. Czy wiesz, czy wprowadzono jakieś zmiany w celu obsługi SOAP? – gmponos
stary temat , ale gdy szukałem tej samej odpowiedzi, wygląda na to, że wykonywana jest praca async-soap-guzzle.
Możesz pobrać Guzzle, aby wysłać żądania SOAP. Należy pamiętać, że SOAP ma zawsze kopertę, nagłówek i treść.
<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/">
<soapenv:Header/>
<soapenv:Body>
<NormalXmlGoesHere>
<Data>Test</Data>
</NormalXmlGoesHere>
</soapenv:Body>
Pierwszą rzeczą, którą robię jest budować ciało xml z SimpleXML:
$xml = new SimpleXMLElement('<NormalXmlGoesHere xmlns="https://api.xyz.com/DataService/"></NormalXmlGoesHere>');
$xml->addChild('Data', 'Test');
// Removing xml declaration node
$customXML = new SimpleXMLElement($xml->asXML());
$dom = dom_import_simplexml($customXML);
$cleanXml = $dom->ownerDocument->saveXML($dom->ownerDocument->documentElement);
Następnie owinąć nasze ciało xml z kopertą mydło, nagłówka i ciała.
$soapHeader = '<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>';
$soapFooter = '</soapenv:Body></soapenv:Envelope>';
$xmlRequest = $soapheader . $cleanXml . $soapFooter; // Full SOAP Request
Następnie musimy dowiedzieć się, jaki jest nasz punkt końcowy w dokumentach api.
Następnie zbudować klienta w chlać:
$client = new Client([
'base_url' => 'https://api.xyz.com',
]);
try {
$response = $client->post(
'/DataServiceEndpoint.svc',
[
'body' => $xmlRequest,
'headers' => [
'Content-Type' => 'text/xml',
'SOAPAction' => 'https://api.xyz.com/DataService/PostData' // SOAP Method to post to
]
]
);
var_dump($response);
} catch (\Exception $e) {
echo 'Exception:' . $e->getMessage();
}
if ($response->getStatusCode() === 200) {
// Success!
$xmlResponse = simplexml_load_string($response->getBody()); // Convert response into object for easier parsing
} else {
echo 'Response Failure !!!';
}
- 1. Używanie Finlipsa do prostego klienta SOAP Scala
- 2. Używanie CORS + SOAP + WCF do usługi HTTPS
- 3. PHP: Guzzle 6 + Guzzle-cache-middleware
- 4. Instalacja Guzzle w Laravel 5
- 5. Guzzle nieprzesyłania ciała POST PSR-7 poprawnie
- 6. Jak profilować żądania Guzzle 6?
- 7. Przetłumacz prośbę cURL na Guzzle
- 8. Dodawanie załącznika do żądania SOAP
- 9. xmlns: atrybut mydła elementu SOAP
- 10. Guzzle nie zachowuje się jak CURL
- 11. Budowanie ciągów zapytań progamowo w Guzzle?
- 12. Jak ustawić domyślny nagłówek w Guzzle?
- 13. HTTP SOAP \ GET \ POST
- 14. Extract ciało SOAP z komunikatem SOAP
- 15. Dodaj nagłówek WSSE SOAP do referencji WWW
- 16. Przekazywanie tablicy do funkcji SOAP w PHP
- 17. Jak dodać nagłówek do żądania SOAP?
- 18. Używanie literałów łańcuchowych bez używania przestrzeni nazw std
- 19. Używanie łącznika LLVM podczas używania Clanga i CMake'a
- 20. Wymuszanie używania div dla dzieci do używania stylu rodzica
- 21. Używanie jQuery do echo tekstu
- 22. Podnoszenie uprawnień do używania mach_inject
- 23. Ustawienie Django do używania MySQL
- 24. Konfigurowanie Django do używania SQLAlchemy
- 25. Generowanie ostrzeżeń do używania autoboxing
- 26. Tworzenie komunikatu SOAP z łańcucha znaków XML całego komunikatu SOAP
- 27. Biblioteki SOAP dla PHP
- 28. Log SOAP Wiadomości
- 29. SOAP 1.2 daje złe żądanie, podczas gdy SOAP 1.1 działa
- 30. Komunikat SOAP 1.2 jest niepoprawny, gdy jest wysyłany do punktu końcowego SOAP 1.1 tylko
ja też chciałby uzyskać więcej informacji na ten temat. Dokumentacja Guzzle nie wspomina nic o plikach .wsdl ani SOAP. – Rvanlaak