0

我正在尝试使用肥皂将用户注册发送到另一台服务器。我正在使用 DOMdocument 创建一个 xml,而不是在 saveXML 之后我正在运行肥皂,它应该返回一个带有注册 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);

如果我单击此 URL 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() 获取内容。但结果是一样的。

4

1 回答 1

0

你应该能够做这样的事情:

$res = $client->__soapCall( 'RegisztracioIns', array('xml'=>'my string to send'));

让 wsdl 包含'my string to send'在正确的标签中。

您正在做类似的事情,但我认为 wsdl 实际上并没有包装您尝试传递的字符串,而是什么都不传递,从而导致未知错误。

您可以使用 . 检查传出的 xml $client->__getLastRequest();

(另外,你的代码最后一行应该是一个小错字print_r($params);。)

如果您无法尝试使用SoapVar() 自己编写 xml 并将类型设置为 XSD_ANYXML

当 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());

鉴于它是匈牙利语(我认为?),我无法准确阅读我得到的回复。所以让我知道这是否适合你。

于 2013-09-27T02:50:21.213 回答