Próbuję przetworzyć odpowiedź SOAP z globalnej bramki First Data. Używałem wcześniej SoapClient, ale nie ma w nim pliku wsdl - a firma twierdzi, że go nie dostarcza.Przetwarzanie odpowiedzi SOAP
Próbowałem różnych innych podejść, takich jak SimpleXMLElement na podstawie przykładów tutaj i podręcznika PHP, ale nie mogę dostać nic do pracy. Podejrzewam, że przestrzenie nazw są częścią mojego problemu. Czy ktoś może zaproponować podejście lub wskazać mi podobny przykład - moje wysiłki Google były jak dotąd bezowocne.
pomocą PHP 5.
Częściowa odpowiedź SOAP (z wszystkich rzeczy nagłówka HTML, który poprzedza go zdjął) wygląda następująco:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<fdggwsapi:FDGGWSApiOrderResponse xmlns:fdggwsapi="http://secure.linkpt.net/fdggwsapi/schemas_us/fdggwsapi">
<fdggwsapi:CommercialServiceProvider/>
<fdggwsapi:TransactionTime>Thu Nov 29 17:03:18 2012</fdggwsapi:TransactionTime>
<fdggwsapi:TransactionID/>
<fdggwsapi:ProcessorReferenceNumber/>
<fdggwsapi:ProcessorResponseMessage/>
<fdggwsapi:ErrorMessage>SGS-005005: Duplicate transaction.</fdggwsapi:ErrorMessage>
<fdggwsapi:OrderId>A-e833606a-5197-45d6-b990-81e52df41274</fdggwsapi:OrderId>
...
<snip>
ja również muszą być w stanie określić, czy SOAP zakłócenie zostało zasygnalizowane. XML, który wygląda tak:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:FaultX>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring xml:lang="en">MerchantException</faultstring>
<detail>
cvc-pattern-valid: Value '9999185.00' is not facet-valid with respect to pattern '([1-9]([0-9]{0,3}))?[0-9](\.[0-9]{1,2})?' for type '#AnonType_ChargeTotalAmount'.
cvc-type.3.1.3: The value '9999185.00' of element 'v1:ChargeTotal' is not valid.
</detail>
</SOAP-ENV:FaultX>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Korzystanie odpowiedź pana kodeksu byłem w stanie odzyskać dane z odpowiedziami bez usterek. Ale muszę określić, jakiego typu pakiet mam do czynienia i wyodrębnić dane z obu typów. Byłoby o wiele łatwiej, gdyby tylko dostarczały wsdl!
Dzięki - dokładnie to, czego potrzebowałem - nie widziałem przykład, w którym obie te przestrzenie nazwano w ten sposób. – JonP
Przykład działa pięknie, gdy otrzymam poprawną odpowiedź, ale odkryłem dodatkową "zmarszczkę", gdy sygnalizowana jest usterka mydła. W takim przypadku oczywiście nie ma drugiej przestrzeni nazw i nie mogę znaleźć prostej metody określenia, czy występuje element błędu i jego zawartość. Czy możesz coś zasugerować? – JonP
Zaktualizuj pytanie, podając przykład odpowiedzi na błąd związany z mydłem i niech się przyjrzy. – MrCode