如何在 PHP 响应中获取 XML



我正在尝试使用以下代码从服务器获取响应:

<?php
$url = "http://pgtest.redserfinsa.com:2027/WebPubTransactor/TransactorWS?WSDL";
$post_string = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:web="http://webservices.serfinsa.sysdots.com/">
<soapenv:Header/>
<soapenv:Body>
<web:cardtransaction>
<!--Optional:-->
<security>{"comid":"comid","key":"$!@!@!@!@!@","comwrkstation":"comwrkstation"}</security>
<!--Optional:-->
<txn>MAN</txn>
<!--Optional:-->
<message>{"CLIENT":"9999994570392223"}
</message>
</web:cardtransaction>
</soapenv:Body>
</soapenv:Envelope>';

$post_data = array('xml' => $post_string);
$stream_options = array(
'http' => array(
'method'  => 'POST',
'header'  => 'Content-type: text/xml' . "rn",
'content' =>  http_build_query($post_data)));

$context  = stream_context_create($stream_options);
$response = file_get_contents($url, null, $context);
?>

但是,我仍然得到空洞的回复,有人知道吗?

我不知道为什么你的代码返回空,但你可以尝试使用curl

法典:

$url = "http://pgtest.redserfinsa.com:2027/WebPubTransactor/TransactorWS?WSDL";
$xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:web="http://webservices.serfinsa.sysdots.com/">
<soapenv:Header/>
<soapenv:Body>
<web:cardtransaction>
<security>{"comid":"comid","key":"$!@!@!@!@!@","comwrkstation":"comwrkstation"}</security>
<txn>MAN</txn>
<message>{"CLIENT":"9999994570392223"}
</message>
</web:cardtransaction>
</soapenv:Body>
</soapenv:Envelope>';
$headers = array(
"Content-type: text/xml",
"Content-length: " . strlen($xml),
"Connection: close",
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($curl);
$error = curl_error($curl);

print_r($response);
print_r($error);

结果:

记录失败:对等方重置连接

最新更新