#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-архив, все, что нам нужно сделать, это создать пустой документ и после отправить в него двоичные данные.
Приветствую и желаю удачи!