我正在尝试将用户注册用soap发送到另一台服务器。我正在使用DOMdocument创建一个xml,而不是在saveXML之后,我正在运行soap,它应该返回一个带注册ID的xml以及我在xml中发送的所有数据。
但肥皂会返回未知错误。确切地说:stdClass Object ( [RegisztracioInsResult] => stdClass Object ( [any] => 5Unknown error ) )
这就是我发送xml的方式。
/*xml creation with DOMdocument*/
$xml = saveXML();
$url = 'http://mx.biopont.com/services/Vision.asmx?wsdl';
$trace = '1';
$client = new SoapClient($url, array('trace' => $trace, "exceptions" => 0, 'features' => SOAP_SINGLE_ELEMENT_ARRAYS));
$params = $client->RegisztracioIns(array('xml' => $xml));
$print_r($params);
如果我点击此网址http://mx.biopont.com/services/Vision.asmx上的RegisztracioIns服务说明,则会向我显示:
POST /services/Vision.asmx HTTP/1.1
Host: mx.biopont.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://mx.biopont.com/services/RegisztracioIns"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<RegisztracioIns xmlns="http://mx.biopont.com/services/">
<xml>string</xml>
</RegisztracioIns>
</soap:Body>
</soap:Envelope>
根据这个,我认为我正在正确上传,但也许不是我没有太多使用肥皂的经验。
有什么我想念的吗?我还尝试将xml保存到我的服务器而不是使用file_get_contents()获取内容。但结果是一样的。
答案 0 :(得分:0)
你应该可以这样做:
$res = $client->__soapCall( 'RegisztracioIns', array('xml'=>'my string to send'));
让wsdl将'my string to send'
包裹在正确的标签中。
你正在做类似的事情,但我不认为wsdl实际上正在包装你想要传递的字符串,而不是传递任何内容,导致未知错误。
您可以使用$client->__getLastRequest();
检查传出的xml。
(另外,最后一行代码中的小错误应为print_r($params);
。)
如果你没有尝试使用SoapVar() and setting the type to XSD_ANYXML自己编写xml。
当wsdl为你包裹一切时,对我来说似乎更干净,但它比把头撞到墙上要好得多。
我试图用你的wsdl做到这一点。试一试:
$wsdl = "http://mx.biopont.com/services/Vision.asmx?wsdl";
$client = new SoapClient($wsdl, array( 'soap_version' => SOAP_1_1,
'trace' => true,
));
try {
$xml = "<RegisztracioIns xmlns='http://mx.biopont.com/services/'>
<xml>string</xml>
</RegisztracioIns>";
$args= array(new SoapVar($xml, XSD_ANYXML));
$res = $client->__soapCall( 'RegisztracioIns', $args );
var_dump($res);
} catch (SoapFault $e) {
echo "Error: {$e}";
}
print_r($client->__getLastRequest());
print_r($client->__getLastResponse());
鉴于它是匈牙利语(我认为?),我无法完全阅读我得到的回应。如果这对您有用,请告诉我。