PHP SoapClient 调用与鉴权,以及对Java和C# 的webservice的兼容处理

SoapClient使用注意事项:

第一要加上 cache_wsdl参数,以防服务器调用的是缓存的wsdl文件

然后是参数传递,如果是使用PHP自己写的WebService,参数传递按正常方式即可

1、$client->FunctionName($param1,$param2);

2、$client->__soapCall("FunctionName",array($param1,$param2));

3、$client->__soapCall("FunctionName",array("param1"=>$param1,"param2"=>$param2));

而如果是调用Java或者C#写的WebService,参数应该使用二维数组传递,否则Java或C#会接受不到PHP提交的参数

       try {
            $client = new SoapClient("http://www.xxx.com/api?wsdl", array('cache_wsdl' => 0));
            $xml = "
                <Xml>
                <Data>
                    ...
                </Data>
            </Xml>";

//            print_r($client->__getFunctions());
//            print_r($client->__getTypes());

//           $client->__soapCall('接口函数名称', array(array("参数名" => 参数值)));

            // 针对Java或者C#做兼容处理,使用二维数组,如果是PHP写的webservice,可直接使用$client->GetData($xml);
            print_r($client->__soapCall('GetData', array(array("xml" => $xml))));
        } catch (SOAPFault $e) {
            print $e;
        }

鉴权:

如果WebService使用HTTP认证:

如果你使用的是NuSOAP的话,大致代码如下:

$client = new nusoap_client("http://{$login}@{$password}:www.domain.com/wsdl", true);
$client->setCredentials($login, $password);

如果你使用的是PHP内置的SOAP扩展的话:

$client = new SoapClient("http://www.domain.com/wsdl", array(
    'login'    => $login,
    'password' => $password
));

如果WebService使用SOAP Header做验证,这个可以通过PHP内建SOAP扩展的SoapHeader来做,我就不多说了。

猜你喜欢

转载自www.cnblogs.com/lbnnbs/p/9052986.html