使用PHP调用具有复杂数据类型的SOAP Web服务

时间:2010-10-12 04:37:42

标签: php soap wsdl

我正在尝试编写PHP来调用Web服务。使用SoapUI,我构建了对服务的以下调用,它起作用:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://gmo.ws.client.np.z2.com/xsd">
   <soapenv:Header/>
   <soapenv:Body>
      <xsd:login>
         <xsd:auth>
            <xsd:password>myPwd</xsd:password>
            <xsd:userName>myUsername</xsd:userName>
            <xsd:version>1.0</xsd:version>
         </xsd:auth>
         <xsd:applicationName>wnp</xsd:applicationName>
      </xsd:login>
   </soapenv:Body>
</soapenv:Envelope>

我正在使用以下PHP来调用相同的服务:

<?php
$client = new soapclient('http://www.z2systems.com:8888/neonws/services/GMOService');

$auth_array = array(
    'auth' => array(
      'password' => 'myPwd',
      'userName' => 'myUsername',
      'version' => '1.0'
    ),
    'applicationName' => 'wnp'
 );

$login_results = $client->__soapcall('login', $auth_array);
?>

当我拨打电话时,我收到错误回复“解析WSDL:找不到”。

网络服务的提供商一直没有帮助,所以任何建议都将非常感谢!

2 个答案:

答案 0 :(得分:2)

我认为您需要向PHP提供WSDL URL,而不是某些指向HTML错误页面的URL。尝试在浏览器中打开http://www.z2systems.com:8888/neonws/services/GMOService

修改

给你评论:尝试将你的auth-array包装在另一个数组中:

$login_results = $client->__soapcall('login', array($auth_array));

参数必须是一个数组,你给出的数组是第一个参数(如果我正确理解了esdl)。

答案 1 :(得分:1)

将正确的URL放到你的soapclient中的wsdl中它应该可以工作。

http://www.z2systems.com:8888/neonws/services/GMOService &LT;这只是指向错误页面

http://www.z2systems.com:8888/neonws/services/GMOService?wsdl&lt;我认为这是你正在寻找的网址