用PHP从WSDL web服务检索数据


Retrieving data from WSDL webservice in PHP

我首先要说的是,我根本不知道我到底在做什么。我的PHP技能是初级的,我的webservices经验是零。

有一个WSDL URL http://example.com/ws/3.1/NNE?WSDL。我想从PHP脚本调用searchTargetGroup方法,这样我就可以循环通过答案并将数据保存到我的数据库。

无论如何,我不知道如何从PHP创建调用。: - (我已经看过PHP的NuSOAP和内置的SoapClient,但没有运气。我认为问题是我试图调用一个复杂的方法,而没有完全理解我所搞乱的青蛙是什么。

所以我使用SoapUI来检索定义文件并创建一个请求,它工作得很好,我得到了我想要的所有信息。问题是,我有没有线索我应该如何使PHP文件创建与SoapUI完全相同的请求(从而获得正确的答案)。

SoapUI为我生成的XML请求如下所示:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:nne="http://example.com/ws/NNE">
    <soapenv:Header/>
    <soapenv:Body>
        <nne:searchTargetGroup soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <QuestionTargetGroup_1 xsi:type="nne:QuestionTargetGroup" xmlns:nne="http://example.com/ws/NNE">
                <companyFormCodeList xsi:type="xsd:string">10,60,80</companyFormCodeList>
                <companyStatus xsi:type="xsd:string">0</companyStatus>
                <hasPhoneOnly xsi:type="xsd:boolean">true</hasPhoneOnly>
            </QuestionTargetGroup_1>
            <int_2 xsi:type="xsd:int">500</int_2>
            <int_3 xsi:type="xsd:int">1</int_3>
            <int_4 xsi:type="xsd:int">1</int_4>
            <String_5 xsi:type="xsd:string">passstring</String_5>
        </nne:searchTargetGroup>
    </soapenv:Body>
</soapenv:Envelope>
有谁能帮我个忙吗?最好是正确的那个。: -)

我知道你不能对URL进行测试,因为它是IP保护的,但我真的很想知道如何从PHP文件/函数中进行上述调用。

首先,我自己也是一个初学者,所以我不能保证一个完全正确的答案,但我至少可以给你一些提示。

使用SoapClient代替nussoap。SoapClient是用C语言编写的,而nussoap是用PHP编写的,所以SoapClient速度更快。

如果您的WSDL文件很好,那么您所要做的应该是:

$client = new SoapClient("[URL to wsdl]");

之后,SoapClient将负责其余的工作,并使WSDL中定义的所有过程直接可用。

$result = $client->name_of_procedure($arg1, $arg2, ...);

结果将是stdClass类型的,或者是包含stdClass类型元素的数组。

如果没有WSDL,您将不得不自己指定所有细节,参数类型,名称空间等。并通过__soapCall()直接调用。

你可以用var_dump() &有限公司

正如rafael所说,您最好使用PHP SOAP EXTENSION提供的SoapClient。

测试你的服务:

首先声明一个选项数组,您可以告诉例如不要更改WSDL(它在开发环境中很有用)

$options = array(
                'soap_version'=>SOAP_1_1,
                'exceptions'=>true,
                'trace'=>1,
                'cache_wsdl'=>WSDL_CACHE_NONE
            ); 

然后从WSDL开始构建客户端:

$client = new SoapClient("http://service.nnerhverv.dk/nne-ws/3.1/NNE?WSDL", $options);

像这样调用searchTargetGroup方法。这里的重点是正确构建questionTargetGroup参数,这应该可以工作:

//build the parameters for the SearchTargetGroup
$questionTargetGroup = array (
    "companyFormCodeList" => "10,60,80",
    "companyStatus" => "0",
    "hasPhoneOnly" => "true"
);
$response = $client->searchTargetGroup($questionTargetGroup, 500, 1, 1, "passstring"); 

最后打印您从服务返回的响应

print_r($response);

我写了一篇关于如何从PHP调用Serena webservices的文章。但它可以为任何web服务工作:http://www.geekmindsthinkalike.com/php-and-serena-web-services/

希望有所帮助