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 = <<
         
          
            
                *******
                *******
            
          
          
                
                  test
                
           
         
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文件的数据格式,错了一点点都是不行的,包括数据的请求格式

你可能感兴趣的:(PHP soap soapClient的两种方式)