Sto tentando di elaborare una risposta SOAP dal gateway globale di First Data. Ho già usato SoapClient, ma non c'è wsdl e la società dice che non ne fornisce uno.Elaborazione della risposta SOAP
Ho provato vari altri approcci, come SimpleXMLElement basato su esempi trovati qui e nel manuale PHP, ma non riesco a far funzionare nulla. Sospetto che gli spazi dei nomi facciano parte del mio problema. Qualcuno può suggerire un approccio o indicarmi un esempio simile - i miei sforzi di Google sono stati infruttuosi fino ad oggi.
Utilizzo di PHP 5.
risposta SOAP parziale (con tutte le cose di intestazione HTML che lo precede spogliò) si presenta così:
<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>
Ho anche bisogno di essere in grado di determinare se un SOAP colpa è stata segnalata. XML per che assomiglia a questo:
<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>
Utilizzando la risposta di Mr. Codice sono stato in grado di recuperare i dati dalle risposte non-fault. Ma ho bisogno di determinare il tipo di pacchetto con cui sto trattando ed estrarre i dati da entrambi i tipi. Sarebbe molto più semplice se solo fornissero un wsdl!
Grazie - che è esattamente quello che mi serviva - non avevo visto un esempio in cui entrambi i namespace sono state utilizzate in quel modo. – JonP
L'esempio funziona perfettamente se ottengo una risposta valida, ma ho scoperto un'ulteriore "ruga" quando viene segnalato un errore di sapone. In questo caso ovviamente non esiste un secondo spazio dei nomi e non riesco a trovare un metodo semplice per determinare se esiste un elemento di errore e il suo contenuto. Puoi suggerire qualcosa? – JonP
Aggiornare la domanda con un esempio della risposta di errore del sapone e dare un'occhiata. – MrCode