Сообщение Soap, закодированное в нескольких файлах двоичных данных base64

#soap #binary #base64 #rfc

#soap #двоичный #base64 #rfc

Вопрос:

Недавно я получил новый проект для работы над сервисом SOAP и для получения и отправки сообщений в ASP.NET сервис, основанный на xml. Проблема в том, что мне удалось выполнить запрос soap и получить сообщение. Сообщение выглядит следующим образом:

 UEsDBBQAAAAIAAdUe06 NXE0kR4AADLSAQALAAAAUHJvZHVzZS54bWzUXW1z48YN5k/h5EMnmbMsvomSpmkzFCXbjERJoSTb52/p9dq5mbxN2svczy/........
  

Сообщение является двоичным файлом Base64 в RFC 4648 с несколькими XML-документами в нем.
Как я могу создать эти документы из кода на php?
Документы, зашифрованные в этом запросе, представляют собой 3 XML-файла.
Мне удалось получить их из онлайн-дешифратора под названием freeformatter с функцией загрузки.
Если я попытаюсь декодировать результат, я получу что-то вроде:

 PKT{N�5q4�2�Produse.xml�]ms��
�O��C'��,����i3%یDI�$��o��ڹ��M����/�,��|vL�O�$�/�xv,,�u�s>9?;?....
  

Есть ли решение для этого?
Я новичок в SOAP, поэтому я не слишком много понимаю в этом.

Комментарии:

1. Ваша проблема не имеет ничего общего с SOAP собой. Base64 — это двоичная кодировка. Если вы расшифруете его в двоичный файл (11010110 11010001 ..), вы все равно получите двоичные файлы. Эти двоичные файлы могут быть файлом или чем-то еще. Вы должны спросить себя, что бы вы сделали с файлом, прочитанным с жесткого диска потоком или чем-то еще, что дало вам некоторый двоичный массив. Если вы хотите настроить SOAP-клиент, нам нужна дополнительная информация о том, как вы хотите..

Ответ №1:

Спасибо, но я решил это решить. Я собираюсь опубликовать здесь решение, чтобы все, кто столкнулся с такой же проблемой, получили ответ. Первое, что вам нужно сделать, когда у вас есть zip-файл в двоичной строке base64, — это перехватить ответ на текстовый файл. Допустим, ответ от soap называется ‘ $response’, и нам нужно перевести это в файл. Мы делаем вот так : $response = $client -> _getLastResponse();
$fille = "response.xml";
fille_put_contents($fille,$response);

Теперь мы получили ответ на XML-файл. Следующее, что нужно сделать, это получить ответ из значений xml. Допустим, наше значение равно <ResponseFromServer> .

 `$b64 = "b64.txt";
 $dom = new DomDocument();
 $dom = load("response.xml");
 $data = $dom->getElementByTagName("ResponseFromServer");
 $catchb64 = $data;
 fille_put_content($b64,$catchb64);`
  

Теперь мы получили чистую двоичную строку Base64 в одном файле.
Следующее, что нам нужно, это создать документ (в данном случае файл .zip)

 `$input_fille = "response.txt"; // the fille with clean base64 binary data on it
 $output_fille = "result.zip"; //the fille we need to create on system with the 
 documents decrypted
 $content = fille_get_contents($input_fille); // Reading the content of input fille
 $binary = base64_decode($content); // Decoding to binary
 fille_put_contents($output_fille,$binary); // Writing to fille the vallues`
  

Нам не нужна ZipArchive() функция, потому что это уже zip-архив, все, что нам нужно сделать, это создать пустой документ и после отправить в него двоичные данные.
Приветствую и желаю удачи!