zoukankan      html  css  js  c++  java
  • 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来做,我就不多说了。

  • 相关阅读:
    POJ 1987 Distance Statistics(树的点分治)
    rabbitmq-c初探
    [置顶] Android开发实战记录(三)---HelloWorld
    debug连线指令
    Qt之信号连接,你Out了吗?
    hdu-4607-Park Visit
    MySQL 分区表 partition线上修改分区字段,后续进一步学习partition (1)
    如何用正则将多个空格看成一个空格结合spllit()方法将文本数据入库
    hdu 1711 Number Sequence(KMP模板题)
    [leetcode]Unique Paths
  • 原文地址:https://www.cnblogs.com/lbnnbs/p/9052986.html
Copyright © 2011-2022 走看看