• 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来做,我就不多说了。

  • 相关阅读:
    CentOS随笔
    CentOS随笔
    CentOS随笔
    CentOS随笔
    产品从生到死的N宗罪
    即将结束的2015。
    Mvvm
    android 热补丁修复框架
    反编译APK
    关于短视频
  • 原文地址:https://www.cnblogs.com/lbnnbs/p/9052986.html
Copyright © 2020-2023  润新知