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]:''; }
PHP的客户端:
$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();
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《PHP的soapheader问题》
发表评论