Soap – dati base64binary in PHP

Ho un client SOAP in PHP che effettua chiamate a un servizio WSDL. Una delle funzioni restituisce un dato base64binary . Ho cercato di decodificarlo senza fortuna.

base64_decode ($ encoded_base64data) non functionrà. Ho provato a utilizzare base_convert () e mv_convert_encoding () con vari parametri, ma non ho potuto get un risultato corretto.

I dati dei risultati codificati iniziano con:

  `I %&/m {J J  t  `$ؐ@       iG#) *  eVe][email protected] 흼  {    {    ; N'   ?\fdl  J ɞ!   ?~|?" 

(i dati sono molto più lunghi, questa è solo una piccola parte della string)

Qualche idea su come potrebbe essere fatto?

Grazie

MODIFICARE

Ho esteso SoapClient con un nuovo metodo __doRequest () per verificare che i dati ricevuti siano una string base64 corretta. Ho ottenuto una corretta string codificata in base64, e il risultato mostrato sopra è la risposta decodificata.

Ad each modo, la string è stata decodificata automaticamente da SoapClient da base64 a binario (come suggerito da @hakre), quindi devo solo gestire la risposta binaria.

Ora quello di cui ho bisogno è decodificare la string binaria in qualcosa che sembrerebbe un formato leggibile. La risposta finale dovrebbe contenere l'output georgiano, quindi sto cercando di capire la codifica originale (ma questa è una domanda diversa).

Da base64Binary (XML Schema Part 2: Datatypes 3.2.16) :

[Definizione:] base64Binary rappresenta i dati binari arbitrari con codifica Base64. Lo spazio valore di base64Binary è l'insieme di sequenze di lunghezza finita di ottetti binari. Per i dati base64Binary l'integer stream binario viene codificato utilizzando il Base64 Transfer-Transfer-Encoding definito nella Sezione 6.8 di [RFC 2045] .

Quindi commenta:

Quando un WSDL ha xsd: base64binary dovrei get una risposta base64 o una risposta binaria o una string codificata base64?

Dovresti get una string codificata in base64. Quella string codificata in base64 rappresenta i dati binari. Se conosci le specifiche XML, questo potrebbe essere più ovvio perché non puoi passare informazioni binarie con XML, puoi solo passare le informazioni che rientrano nell'intervallo di caratteri di XML. E tale intervallo esclude i caratteri che fanno parte di dati binari, in particolare i caratteri di controllo e il riquadro superiore se si divide l'ottetto binario in uno più basso e più alto. Vedi Caratteri (Extensible Markup Language (XML) 1.0 (Fifth Edition) 2.2) che mostra che XML riguarda caratteri, non dati binari. E che mostra anche quali dati binari formano quei personaggi (e che non possono formare).

Pertanto la codifica base64Binary è stata definita come un modo per trasportre dati binari all'interno di un documento XML. Quindi, ciò che hai nella risposta XML non elaborata alla tua richiesta SOAP non è mai binario, ma dati binari codificati in base 64.

Accertarsi che il proprio client SOAP possa già gestire questa codifica e fornire i dati decodificati.

Sebbene la risposta precedente sia assolutamente corretta, ritengo che ciò possa essere d'aiuto per get una soluzione rapida.

Quando controlliamo in risposta xml, vediamo i dati codificati in base 64 e proviamo a decodificarlo nel nostro codice per get i dati reali ma non è richiesto.

Rimuovi base64_decode .

Perché il client SOAP si decodifica internamente.