如何在 php 响应中获取 xml
how to get the xml in php response
我正在尝试使用以下代码从服务器获取响应:
<?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' . "\r\n",
'content' => http_build_query($post_data)));
$context = stream_context_create($stream_options);
$response = file_get_contents($url, null, $context);
?>
但是,我仍然收到空洞的回复,有人知道吗?
我不知道为什么你的代码 returns 是空的,但你可以尝试使用 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);
结果:
Recv failure: Connection reset by peer
我正在尝试使用以下代码从服务器获取响应:
<?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' . "\r\n",
'content' => http_build_query($post_data)));
$context = stream_context_create($stream_options);
$response = file_get_contents($url, null, $context);
?>
但是,我仍然收到空洞的回复,有人知道吗?
我不知道为什么你的代码 returns 是空的,但你可以尝试使用 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);
结果:
Recv failure: Connection reset by peer