У меня сейчас нет ответа, но сначала вам нужно отделить curl от обработки XML. Вы должны начать с регистрации результатов curl и убедиться, что они вменяемы и соответствуют вашим ожиданиям. Если это так, , тогда переходите к его синтаксическому анализу. curl никогда не должен нарушать / изменять ваши данные каким-либо образом, но сам запрос (заголовки, et c.) может изменить ответ сервера.
Поскольку я не могу проверить ваш сервер, я просто собирается на go от того, что вы предоставили. Я закрыл тег <SOAP-ENV:Body>
и преобразовал XML в читаемый, но в остальном он остался нетронутым. Этот код без проблем анализирует XML и затем выдает его точно так, как ожидалось.
$response =
HV+/cOkUjNCdH5xuiLlGSHVgkUo=
MCwCFHXmoMrDUOScwMQ5g76OfxouICjBAhQtGKAorJLUQ0bA0UaKIe1gtmQPgA==
TAG;
$xml = simplexml_load_string(html_entity_decode($response), 'SimpleXMLElement', LIBXML_NOCDATA);
echo '';
print_r(htmlspecialchars($xml->asXML()));
echo '
';
Вывод точно такой же, как и ввод, за исключением того, что он включает директиву XML и преобразует тег тела в самозакрывающийся:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Header>
<SOAP-SEC:Signature xmlns:SOAP-SEC="http://schemas.xmlsoap.org/soap/security/2000-12">
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>
<ds:Reference URI="#Body">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>HV+/cOkUjNCdH5xuiLlGSHVgkUo=</ds:DigestValue>
</ds:Reference>
<ds:SignatureValue>MCwCFHXmoMrDUOScwMQ5g76OfxouICjBAhQtGKAorJLUQ0bA0UaKIe1gtmQPgA==</ds:SignatureValue>
</ds:SignedInfo>
</ds:Signature>
</SOAP-SEC:Signature>
</SOAP-ENV:Header>
<SOAP-ENV:Body xmlns:SOAP-SEC="http://schemas.xmlsoap.org/soap/security/2000-12" SOAP-SEC:id="Body"/>
</SOAP-ENV:Envelope>
Так что используйте это как базовый уровень. Напишите свой ответ curl в текстовый файл, прежде чем делать что-либо еще, а затем прочитайте этот текстовый файл и выполните logi c. Любое преобразование, которое вы применяете к строке XML, также следует регистрировать и сравнивать, чтобы убедиться, что оно делает то, что вы ожидали. При производстве вы бы пропустили это, но это просто помогает во время отладки.
Кроме того, я не совсем уверен, в чем смысл html_entity_decode
. Если вы получаете XML (как указано в mime-типе вашего запроса), то к нему не должно применяться никаких управляющих последовательностей, но, возможно, у вас тоже есть исключительный случай.