用base64二进制数据多次填充编码的肥皂消息

时间:2019-03-27 08:38:16

标签: soap binary base64 rfc

最近,我有一个新项目可以处理SOAP服务,并可以基于XML将消息获取和发布到ASP.NET服务。 问题是我设法提出了要求并获得消息。 消息看起来像这样:

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

该消息是RFC 4648上的Base64 Binary,上面带有多个xml文档。 我如何从php中的代码构建此文档? 此请求中加密的文档是3个xml文件。 我设法从一个名为freeformatter的具有下载功能的在线decriptor中获得了它们。 如果我尝试解码结果,我会得到类似的东西:

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

有解决方案吗? 我是SOAP的新手,所以我不太了解它。 非常感谢。

1 个答案:

答案 0 :(得分:0)

谢谢,但我竭力解决。 我将在这里发布解决方案,以便每个遇到相同问题的人都能得到答复。 在base64二进制字符串中包含.zip文件时,您需要做的第一件事是捕获对txt文件的响应。 假设来自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 Binary字符串。 接下来,我们需要创建文档(在本例中为.zip fille)

`$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存档了,我们要做的就是创建一个空文档,然后将二进制数据发送给它。 干杯,祝你好运!