2011-07-21 50 views
4

我会开始说我不知道​​我试图做什么。我的PHP技能是-beginner,而我对webservices的使用经验是NULL。从PHP中的WSDL webservice检索数据

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

Anywho,我不知道如何创建来自PHP的调用。 :-( 我看了NuSOAP的PHP和内置的SoapClient,但没有运气。我认为问题是,我试图调用一个复杂的方法,但没有完全理解什么青蛙我搞乱周围。

所以我用了SoapUI检索定义文件并创建一个请求,这完美的作品,我让所有我想要的信息。问题是,我有不知道我应该怎么做一个PHP文件创建与SoapUI完全相同的请求(从而得到正确答案)

XML请求SoapUI为我生成的代码如下所示:

<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文件/函数进行上述调用。

回答

3

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

使用SoapClient而不是NuSoap。 SoapClient是用PHP编写的C,NuSoap,所以SoapClient更快。

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

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

之后SoapClient的会照顾休息,使得直接使用WSDL中定义的所有过程。

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

结果将是类型为stdClass的类型或具有stdClass类型的元素的数组。

如果没有WSDL,您必须自己指定所有细节,参数类型,命名空间......并通过__soapCall()直接调用。

无论哪种方式,您可以检查的$的结构导致的var_dump()&有限公司

+0

其实我试过这个较早,但它返回一个致命的错误:“未捕获的SOAPFault异常:[客户] SOAP的错误:编码:对象不是招” t'区“财产”。 WSDL服务的所有者告诉我,我应该忽略我没有问过的字段,例如“区域”字段。我只是尝试了调用中定义的所有字段,对于那些我不想问的人来说只是空的,现在它可以工作。一双清新的眼睛正是我所需要的。谢谢Raffael :) – kasperwf

0

由于拉斐尔说你会更好地利用PHP SOAP扩展提供SoapClient的。

测试您的服务:

首先声明一个选项数组,其中你可以告诉例如不CHACE的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 PARAM,这应该工作:

//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);