0

我有一个小 PHP 脚本正在侦听 POST 请求。我一直在期待 xml。通常我是发送 xml 请求的人。但今天我在接收方。

我认为这将是一个简单的监听 $_POST 的案例,但我想我可能是不正确的——我什么也没得到。

这是我等待任何 xml 的脚本:

<?php
if(isset($_POST)) {
    mail("me@myemail.com","some title i want", print_r($_POST, true)); 
}else{
    die("uh, what happened?");
}
?>

这是我从另一个地方发送的一个简单的 xml 字符串:

<?php
$xml_data ='
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don\'t forget me this weekend!</body>
</note>
';

function sendXML2Server($URL,$XML){
    $xml_data = trim($XML);
    $ch = curl_init($URL);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);

    return $output;
}

echo sendXML2Server('https://someurl.com/inboundxml.php',$xml_data)
?>

这是我在电子邮件中收到的内容:

大批 ( )

我猜我没有正确使用数组,但也许在这一切中我还缺少其他东西。我期待取回实际的 xml 字符串。

4

2 回答 2

1

您只发送数据,这就是为什么 PHP 不能将此数据解释为某些键和值的原因。因此,您需要将其作为变量值发送:

curl_setopt($ch, CURLOPT_POSTFIELDS, array('xml_data' => $xml_data));

或作为原始帖子数据接收:

<?php
if(isset($HTTP_RAW_POST_DATA)) {
    mail("me@myemail.com","some title i want", print_r($HTTP_RAW_POST_DATA, true)); 
}else{
    die("uh, what happened?");
}
?>
于 2012-07-10T01:22:22.643 回答
0

CURLOPT_POSTFIELDS 需要一个数组:

curl_setopt($ch, CURLOPT_POSTFIELDS, array('content'=>$xml_data));

然后像这样检索它:

<?php
if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['content'])) {
    mail("me@myemail.com","some title i want", print_r($_POST['content'], true)); 
}else{
    die("uh, what happened?");
}
?>
于 2012-07-10T01:23:24.873 回答