PHP soap soapClient的两种方式

方式1:

    //字段的详细说明 请参考方式2的请求数据$xmlData
    $wsdl='wsdl的远程地址或者本地文件地址'
    $soap = new SoapClient($wsdl,array("trace" => 1));
    //请求头里的字段值
    $param['userName']='*****';
    $param['password']='*****';
    $header = new SoapHeader('命名空间', '请求头名称,参考对应的wsdl文件', $param, false, SOAP_ACTOR_NEXT); //生成请求头
  //发送请求的参数,请参考wsdl文件,一定要注意格式       
    $methodParams = array(
        'userInfo'=>array('username'=>'test')
    ); 
    // UserInfo 代表请求的wsdl节点里面的某一个方法
    $result = $soap->__soapCall('UserInfo',$methodParams,null,$header);
 
   if(is_soap_fault($result)){
       trigger_error("SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faultstring})", E_USER_ERROR);
   }else{
      
      //这里返回的是类,必须使用->得到元素的值
      $result = $result->UserInfoResult;//根据请求的方法名加上Result即可 
      //具体字段可能需要转Xml为数组,请自行百度xml转数组方法
      $result = $this->xmlToArray($result);
   }

方式2:

      // Header    MySoapHeader 代表请求头名称 xmlns的值代表命名空间 请求头里面的userName password 代表要头部信息的字段,请根据自己的替换对应的字段值
      // Body    UserInfo就是要请求的方法名字 xmlns同样代表命名空间,username 代表发送请求的字段 方式一的数据拼接可以参考以下数据
   
       $xmldata = <<<EOT
         <?xml version="1.0" encoding="utf-8"?>
         <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"     xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
          <soap12:Header>
            <MySoapHeader xmlns="http://tempuri.org/">
                <userName>*******</userName>
                <password>*******</password>
            </MySoapHeader>
          </soap12:Header>
          <soap12:Body>
                <UserInfo xmlns="http://tempuri.org/">
                  <username>test</username>
                </UserInfo>
           </soap12:Body>
         </soap12:Envelope>
EOT;
   $wsdl='wsdl地址';
  //注意 __doRequest 里面的2  代表soap的版本 我这里是2 
    try{
        $params = array('track' => 1);
        $client = new SoapClient($wsdl,$params);
        $result = $client->__doRequest($xmldata,$wsdl,'UserInfo',2,0);

    }catch (SoapFault $e){
        echo $e->getMessage();
    }catch(Exception $e){
        echo $e->getMessage();
    }

总结:主要是一定要注意好版本,对应wsdl文件的数据格式,错了一点点都是不行的,包括数据的请求格式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。