POST请求XML格式错误

时间:2017-01-21 14:41:54

标签: php xml

我的EPP XML请求有问题。我已经从API获得Command Syntax Error响应已有一段时间了。我一直与技术部门保持联系,他刚刚回复说我的XML收到的格式不正确,正在中间拆分。我不知道为什么。

我使用DOMDocument类将PHP编译为XML。我使用__toString()返回每个XML构建方法,返回$this->saveXML();,将树转储为字符串。然后我发送一个POST请求。其他方法都可以,但不是这样。

代码在这里:

https://github.com/OssiPesonen/epp_depo

我实际上使用以下方式转储我的XML:

header('Content-type: text/plain');
echo $xml;
die();

每次它都给我:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <create>
      <contact:create xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>1</contact:id>
        <contact:role>5</contact:role>
        <contact:type>1</contact:type>
        <contact:postalInfo type="loc">
          <contact:isfinnish>1</contact:isfinnish>
          <contact:firstname>Essi</contact:firstname>
          <contact:lastname>Esimerkki Oy</contact:lastname>
          <contact:name>HR</contact:name>
          <contact:org>Esimerkki Oy</contact:org>
          <contact:birthDate>2005-04-03T00:00:00.0Z</contact:birthDate>
          <contact:identity>123423A123F</contact:identity>
          <contact:registernumber>20824760</contact:registernumber>
          <contact:addr>
            <contact:street>Test Street</contact:street>
            <contact:pc>00000</contact:pc>
            <contact:cc>FI</contact:cc>
            <contact:city>City</contact:city>
          </contact:addr>
        </contact:postalInfo>
        <contact:voice x="1234">+358401234567</contact:voice>
        <contact:email>testi@testi.fi</contact:email>
        <contact:legalemail>testi@testi.fi</contact:legalemail>
        <contact:disclose flag="0">
          <contact:addr/>
          <contact:email/>
        </contact:disclose>
      </contact:create>
    </create>
    <clTRID>E1144-588371f25ab80</clTRID>
  </command>
</epp>

这看起来不正常,对吗?然而,技术支持回应了我,在<contact:city>之后在结束标记之前拆分:

contact:city>
            <contact:sp>VA</contact:sp>
            <contact:pc>20166-6503</contact:pc>
            <contact:cc>US</contact:cc>
          </contact:addr>
        </contact:postalInfo>
        <contact:voice x="1234">+3581231234</contact:voice>
        <contact:fax>+04040as</contact:fax>
        <contact:email>jdoe@example.com</contact:email>
        <contact:legalemail>jdoe@example.com</contact:legalemail>
        <contact:disclose flag="0">
          <contact:addr/>
          <contact:email/>
        </contact:disclose>
      </contact:create>
    </create>
    <clTRID>E1144-5867f93f6503a</clTRID>
  </command>
</epp>
05-04-03T22:00:00.0Z</contact:birthDate>
          <contact:identity>010188-123A</contact:identity>
          <contact:registernumber>123456-7</contact:registernumber>
          <contact:addr>
            <contact:street>123 Example Dr.</contact:street>
            <contact:street></contact:street>
            <contact:street></contact:street>
            <contact:city>Dulles</

任何可能导致此问题的想法?因为我看不到它。

修改

在用完我的选项后,我已将代码上传到Github进行查看。

https://github.com/OssiPesonen/epp_depo

1 个答案:

答案 0 :(得分:0)

嗯,答案很简单,但我无法理解为什么它是解决方案。

我基本上从send()方法中删除了所有的失败者,只剩下这个:

private function send($buffer)
{
    if(fwrite($this->socket, $buffer)) {
        return true;
    }

    return false;
}

我真的不知道削减上一个XML字符串是什么,但这对我们的平台有用。