Ошибка 2001 при использовании simplexml_loadfile для отправки XML

В последнее время я делаю PHP для соединения с сервером EPP. Когда я отправляю xml на сервер EPP через переменную, например

$nxml ='<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0
epp-1.0.xsd">
<command>
<login>
<clID>XXXX</clID>
<pw>XXXX<pw>
<options>
<version>1.0</version>
<lang>en</lang>
</options>
<svcs>
<objURI>urn:ietf:params:xml:ns:host-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
</svcs>
</login>
<clTRID>nick-12345</clTRID>
</command>
</epp>';

Сервер хорошо отвечает правильным XML. Хотя теперь, когда я пытаюсь передать XML через Simplexml_loadfile, как это

    $nxml = simplexml_load_file('login.xml');

Я получаю ответ от сервера

<response>
  <result code="2001">
       <msg lang="en">Command syntax error</msg>
  </result>
  <extension>
       <extcommon:resdata xmlns:extcommon="urn:ics-forth:params:xml:ns:extcommon-1.0" xsi:schemalocation="urn:ics-forth:params:xml:ns:extcommon-1.0 extcommon-1.0.xsd">
  </extension>
  <trid>
       <svtrid>607c6b1f-2093-4eef-9756-8d9e9f0689cb-72387</svtrid>
</trid>
</response>

Есть идеи?

1 ответ

Решение

Согласно RFC 5730,

2001 - Ошибка синтаксиса команды

Этот код ответа ДОЛЖЕН быть возвращен, когда сервер получает неправильно сформированный элемент команды.

Это означает, что ваш XML недействителен. Если вы посмотрите поближе, вы увидите, что ваш открывающий тег не соответствует закрывающему тегу в следующей строке:

<pw>XXXXpw>
        ^

Измените это на:

<pw>XXXX</pw>

и ты должен быть в порядке.


ОБНОВИТЬ:

Кажется, это происходит, когда вы используете simplexml_load_file который интерпретирует файл XML как объект. Мне кажется, что сервер нуждается в необработанном XML в качестве входных данных, и с simplexml_load_file Вы отправляете объект.

Чтобы решить эту проблему, вы можете просто file_get_contents чтобы получить содержимое вашего XML-файла, а затем отправить его, как обычно.

Обратите внимание, что это может быть не лучшим подходом, но это может решить вашу проблему.

Удачи!

Другие вопросы по тегам