我首先要说的是,我根本不知道我到底在做什么。我的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/
希望有所帮助