Php 过帐XML订单:检索查询字符串参数失败

Php 过帐XML订单:检索查询字符串参数失败,php,xml,post,curl,Php,Xml,Post,Curl,我正在从数据库创建一个XML文件。随后,我将获取该XML文件并尝试将其发布到外部网站。在处理了与解析错误相关的严重问题后,我认识到问题是使用DOMDocument造成的,因此我将其转换为simpleXML 我收到的错误是: Obj:SimpleXMLElement对象([@attributes]=>数组([Reason]=>检索查询字符串参数失败))引用= //Save XML $xmlDoc->save("file.xml"); //Convert DOMDocument to Sim

我正在从数据库创建一个XML文件。随后,我将获取该XML文件并尝试将其发布到外部网站。在处理了与解析错误相关的严重问题后,我认识到问题是使用DOMDocument造成的,因此我将其转换为simpleXML

我收到的错误是: Obj:SimpleXMLElement对象([@attributes]=>数组([Reason]=>检索查询字符串参数失败))引用=

//Save XML
$xmlDoc->save("file.xml");

//Convert DOMDocument to SimpleXML
$sxmlDoc = simplexml_load_file("file.xml");
print_r($sxmlDoc);

//Posting Order XML with PHP
$PartnerNumber = '1111'; 
$PartnerReference = $row['id'];
$OrderXml = '<Order Test="true">'.$sxmlDoc.'</Order>';
$urlConn = curl_init ("https://website.com/PostXmlOrder.axd?
   PartnerNumber=".$PartnerNumber."&PartnerReference=".urlencode($PartnerReference));
curl_setopt ($urlConn, CURLOPT_POST, 1);
curl_setopt ($urlConn, CURLOPT_HTTPHEADER, array("Content-type", "text/xml"));
curl_setopt ($urlConn, CURLOPT_POSTFIELDS, $sxmlDoc);
curl_setopt ($urlConn, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($urlConn, CURLOPT_SSL_VERIFYPEER, 0);
$result = curl_exec($urlConn);
if (empty($result)) {
  print "ERROR: " . curl_error($urlConn) . "\n";
  exit;
}
// Parse the response
$xml = simplexml_load_string($result);
echo "Obj:\r\n";
print_r($xml);
echo "Reference=";
echo $xml->attributes()->Reference;
//保存XML
$xmlDoc->save(“file.xml”);
//将DOMDocument转换为SimpleXML
$sxmlDoc=simplexml_load_文件(“file.xml”);
打印费用($sxmlDoc);
//用PHP发布订单XML
$PartnerNumber='1111';
$PartnerReference=$row['id'];
$OrderXml='.$sxmlDoc';
$urlConn=curl\u init(“https://website.com/PostXmlOrder.axd?
PartnerNumber=“.$PartnerNumber.”&PartnerReference=“.urlencode($PartnerReference));
curl_setopt($urlConn,CURLOPT_POST,1);
curl_setopt($urlConn,CURLOPT_HTTPHEADER,数组(“内容类型”,“文本/xml”));
curl_setopt($urlConn,CURLOPT_POSTFIELDS,$sxmlDoc);
curl_setopt($urlConn,CURLOPT_RETURNTRANSFER,1);
curl_setopt($urlConn,CURLOPT_SSL_VERIFYPEER,0);
$result=curl\u exec($urlConn);
if(空($result)){
打印“错误:”.curl\u错误($urlConn)。“\n”;
出口
}
//解析响应
$xml=simplexml\u load\u字符串($result);
回显“Obj:\r\n”;
打印(xml);
echo“Reference=”;
echo$xml->attributes()->Reference;

XML文件以SimpleXML格式输出到屏幕。有什么想法吗?

你在做一些额外的循环,但没有任何效果

让我们稍微回顾一下:您很可能需要将XML作为字符串发布,因此不需要将DOMDocument转换为SimpleXML,只需将其作为字符串输出即可:

curl_setopt ($urlConn, CURLOPT_POSTFIELDS, $xmlDoc->saveXML());
我也看到了

注意不要将
$xmlDoc
转换为
SimpleXMLElement
,因此请从上面删除该代码

// Create XML String
$xml = $xmlDoc->saveXML();

// Posting Order XML with Curl
$PartnerNumber    = '1111'; 
$PartnerReference = $row['id'];

$url = sprintf(
  "https://example.com/PostXmlOrder.axd?PartnerNumber=%s&PartnerReference=%s", 
   urlencode($PartnerNumber), 
   urlencode($PartnerReference)
);

$urlConn = curl_init($url);
curl_setopt_array(
    $urlConn, 
    array(
        CURLOPT_POST           => 1,
        CURLOPT_HTTPHEADER     => array("Content-type", "text/xml"),
        CURLOPT_POSTFIELDS     => $xml,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_SSL_VERIFYPEER => 0,    
   )
);


$result = curl_exec($urlConn);
if (empty($result)) {
  print "ERROR: " . curl_error($urlConn) . "\n";
  exit;
}

// Parse the response
$sxml = simplexml_load_string($result);

echo "Obj:\r\n", print_r($sxml);
echo "Reference=", $sxml->attributes()->Reference;

谢谢你,哈克雷。现在我明白了,没有理由将DOMDocument转换为SimpleXML,因为我可以使用saveXML()函数输出字符串。不幸的是,我的问题仍然存在,但问题似乎与发布格式有关。是的,可以。如果您看到较长的示例,我也将其更改,并首先将其放在
$xml
变量中,以便更容易调试。您可以
echo'',htmlspecialchars($xml);死亡然后验证具体的XML是否符合您的期望。