Мыльное сообщение, закодированное в двоичные данные base64, несколько файлов - PullRequest
0 голосов
/ 27 марта 2019

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

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

Это сообщение Base64 Binary в 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 Ответ

0 голосов
/ 28 марта 2019

Спасибо, но я решил ее решить. Я опубликую здесь решение, чтобы каждый, кто столкнулся с той же проблемой, получил ответ. Первое, что вам нужно сделать, когда у вас есть файл .zip в двоичной строке base64, - это перехватить ответ на текстовый файл. Допустим, ответ от мыла называется «$ 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-архив, все, что нам нужно сделать, - это создать пустой документ и затем отправить в него двоичные данные. Приветствие и удача!

...