【问题标题】:PHP sending XML with soap returns unknown rerrorPHP用soap发送XML返回未知错误
【发布时间】:2013-09-27 21:05:05
【问题描述】:

我正在尝试将用户注册信息发送到另一台服务器。我正在使用 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() 获取内容。但结果是一样的。

【问题讨论】:

    标签: php xml soap


    【解决方案1】:

    你应该可以做这样的事情:

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

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

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

    您可以使用 $client-&gt;__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());
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2014-01-13
      相关资源
      最近更新 更多