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