PHP写的服务端,如果通过header验证需要注意一下
soapui工具里添加的header是放在$_SERVER数组中的。
而PHP的soapheader添加的,是放在soap原始请求中的,需要通过获取
MessageServer::soaputils_autoFindSoapRequest();
部分服务端解析:
$username=isset($_SERVER['HTTP_USERNAME'])?$_SERVER['HTTP_USERNAME']:'';
$token=isset($_SERVER['HTTP_TOKEN'])?$_SERVER['HTTP_TOKEN']:'';
if($username=='' && $token=='')
{
//从原始请求中匹配
$region_msg=MessageServer::soaputils_autoFindSoapRequest();
preg_match('~<username>([^<]*)</username>~Uis',$region_msg,$u);
$_SERVER['HTTP_USERNAME']=$username=isset($u[1])?$u[1]:'';
preg_match('~<token>([^<]*)</token>~Uis',$region_msg,$t);
$_SERVER['HTTP_TOKEN']=$token=isset($t[1])?$t[1]:'';
}
$client = new SoapClient('http://localhost/test.wsdl',array("trace"=>true,'soap_version' => SOAP_1_2));
$authvalues = new SoapVar(array('username'=>'aaaa','token'=>$token),SOAP_ENC_OBJECT);
$u = new SoapHeader('http://www.144d.com/','Authentication',$authvalues,false);
//添加soapheader
$client->__setSoapHeaders($u);
$result = $client->HIPMessageServer(array('action'=>"****", 'message'=>$xml));
echo $client->__getLastResponse();