Retrieving data from WSDL webservice in PHP
I'll start out by saying I have no idea what so ever about what I am trying to do. My PHP skills is -beginner- and my experience with webservices is NULL.
I have a WSDL URL http://example.com/ws/3.1/NNE?WSDL. I would like to call the searchTargetGroup method from a PHP script, so I can loop through the answer and save the data to my database.
Anywho, I have no idea how to create the call from PHP. :-( I've looked at NuSOAP for PHP and also the built in SoapClient, but without luck. I think the problem is that I'm trying to call a complex method without fully understanding what the frog I'm messing around with.
So I used SoapUI to retrieve the definition file and creating a request, which works perfectly and I'm getting all the info I want. Problem is, I have no clue how I should make a PHP file creating exact same request as SoapUI (and thereby getting the correct answer).
The XML request SoapUI generates for me looks like this:
<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>
Can a开发者_Go百科nyone help me in some direction? Preferably the right one. :-)
I'm aware that you can't test on the URL, since it's IP protected, but I would really just like to know how to make above call from a PHP file/function.
First of all I am a beginner here myself, so I cannot guarantee a fully correct answer but I can give you at least some hints.
Use SoapClient instead of NuSoap. SoapClient is written in C, NuSoap in PHP, so SoapClient is faster.
If your WSDL file is fine, then all that you have to do should be:
$client = new SoapClient("[URL to wsdl]");
After that SoapClient will take care of the rest and makes all procedures defined in the WSDL directly available.
$result = $client->name_of_procedure($arg1, $arg2, ...);
The result will be of type stdClass or an array with elements of type stdClass.
Without a WSDL you would have to specify all the details yourself, type of parameters, namespaces, ... and to invoke via __soapCall() directly.
Either way you can inspect the structure of $result with var_dump() & Co.
As Raffael said you'd better use SoapClient offered by PHP SOAP EXTENSION.
To test your service:
first declare an options array where you can tell for example not to chace the wsdl (it's useful in development environment )
$options = array(
'soap_version'=>SOAP_1_1,
'exceptions'=>true,
'trace'=>1,
'cache_wsdl'=>WSDL_CACHE_NONE
);
then build the client starting from the wsdl you have:
$client = new SoapClient("http://service.nnerhverv.dk/nne-ws/3.1/NNE?WSDL", $options);
call the method searchTargetGroup like this. The point here is tu build correctly the questionTargetGroup param, this should work:
//build the parameters for the SearchTargetGroup
$questionTargetGroup = array (
"companyFormCodeList" => "10,60,80",
"companyStatus" => "0",
"hasPhoneOnly" => "true"
);
$response = $client->searchTargetGroup($questionTargetGroup, 500, 1, 1, "passstring");
finally print the response you have back from the service
print_r($response);
I wrote an article on how to call Serena webservices from PHP. But it could work for any webservices: http://www.geekmindsthinkalike.com/php-and-serena-web-services/
Hope it helps
精彩评论