我正在尝试使用电信运营商的API文档与他们联系。
我需要向他们发送XML请求(在POST中)以及GET方法中的一些凭据。
我构建了我的脚本并发布了XML,但他们说他们没有收到任何XML。
<?php
$url = "http://<IP>:<PORT>/C2SReceiver?LOGIN=abc&PASSWORD=123";
$xml = '<?xml version="1.0"?>
<COMMAND>
<TYPE>k59</TYPE>
<DATE>19/03/2015 23:20:20</DATE>
<PIN>11000009</PIN>
<LOGINID>abc</LOGINID>
<PASSWORD>123</PASSWORD>
<EXTCODE>0100</EXTCODE>
<EXTREFNUM>1230567890</EXTREFNUM>
</COMMAND>';
$headers = array(
"Content-type: text/xml",
"Content-length: " . strlen($xml),
"Connection: close",
);
// configure
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// requesting
$data = curl_exec($ch);
// displaying response in XML
echo $data;
if(curl_errno($ch))
print curl_error($ch);
else
curl_close($ch);
?>
当我发送请求时,他们的系统会说:"HashMap的无效消息格式"
他们说,他们只是通过get方法来获取参数。他们没有收到任何XML。
请注意:如果我更改xml格式,他们的系统响应为"无效xml"
如果他们没有得到我的XML,他们怎么能说它无效呢。
我浪费了一整天的时间来解决这个问题。不知道出了什么问题。请看一看,并建议我从我的末端可以做些什么。
谢谢。
尝试将标头内容类型从text/xml->application/xml更改。在我的CURLOPT_HTTPHEADER上执行HTTP请求时:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
您的代码没有任何错误。我对它进行了测试,并在C2SReceiver.php文件中获得了xml格式的数据。
<?php $x = new SimpleXmlElement(file_get_contents('php://input')); print_r($x);die(); ?>
或
<?php $x = new SimpleXmlElement(file_get_contents('php://input')); print_r($x);die(); ?>
用于获取curl 传递的C2SReceiver.php中的xml数据