如何从 PHP 发布 SOAP 请求

2022-08-30 09:58:34

有谁知道我如何从PHP发布SOAP请求?


答案 1

根据我的经验,这并不是那么简单。内置的 PHP SOAP 客户端无法与 .我们必须使用基于NET的SOAP服务器。它抱怨架构定义无效。即使.NET客户端与该服务器一起工作也很好。顺便说一句,让我声明 SOAP 互操作性是一个神话。

下一步是NuSOAP。这工作了很长一段时间。顺便说一句,看在上帝的份上,不要忘记缓存WSDL!但是,即使使用WSDL缓存用户,该死的事情也很慢。

然后,我们决定使用裸HTTP,组装请求并读取响应,如下所示:SimpleXMLElemnt

$request_info = array();

$full_response = @http_post_data(
    'http://example.com/OTA_WS.asmx',
    $REQUEST_BODY,
    array(
        'headers' => array(
            'Content-Type' => 'text/xml; charset=UTF-8',
            'SOAPAction'   => 'HotelAvail',
        ),
        'timeout' => 60,

    ),
    $request_info
);

$response_xml = new SimpleXMLElement(strstr($full_response, '<?xml'));

foreach ($response_xml->xpath('//@HotelName') as $HotelName) {
    echo strval($HotelName) . "\n";
}

请注意,在 PHP 5.2 中,您需要pecl_http,因为(surprise-surpise!) 没有内置 HTTP 客户端。

使用裸HTTP在SOAP请求时间内为我们赢得了超过30%的时间。从那时起,我们将所有性能投诉重定向到服务器人员。

最后,我会推荐后一种方法,而不是因为性能。我认为,一般来说,在像PHP这样的动态语言中,WSDL/type-control没有任何好处。您不需要一个花哨的库来读取和编写XML,以及所有存根生成和动态代理。您的语言已经是动态的,并且工作正常,并且非常易于使用。此外,您将拥有更少的代码,这总是好的。SimpleXMLElement


答案 2

PHP 支持 SOAP。只需致电

$client = new SoapClient($url);

连接到 SoapServer,然后你可以获取函数列表并调用函数,只需执行...

$client->__getTypes();      
$client->__getFunctions();  

$result = $client->functionName();  

更多 http://www.php.net/manual/en/soapclient.soapclient.php


推荐