PHP实现Soap通讯的方法
本文实例讲述了PHP实现Soap通讯的方法。分享给大家供大家参考。具体实现方法如下:
<?php
functionHttpSoap($server,$port,$url,$namespace,$action,$data){
$fp=@fsockopen($server,$port);
if(!$fp){
returnFALSE;
}else{
$soapData=ConstructData($namespace,$action,$data);
$length=strlen($soapData);
$out="POST$urlHTTP/1.1\r\n";
$out.="Host:$server\r\n";
$out.="Content-Type:text/xml;charset=utf-8\r\n";
$out.="Content-Length:$length\r\n";
$out.="SOAPAction:\"$namespace$action\"\r\n\r\n";
$out.=$soapData;
$out.="\r\n\r\n";
fputs($fp,$out);
stream_set_timeout($fp,2);
$header="";
while($line=trim(fgets($fp))){
$header.=$line."\n";
}
$dataPos=strpos($header,"Content-Length:")+16;
$dataEnd=strpos($header,"\n",$dataPos);
$dataLength=substr($header,$dataPos,$dataEnd-$dataPos);
$data="";
if($dataLength>0){
$data=fread($fp,$dataLength);
}
fclose($fp);
if(strlen($data)!=$dataLength||$dataLength<=0){
returnFALSE;
}
return$data;
}
}
functionConstructData($namespace,$action,$data){
$soapData="
<?xmlversion="1.0\"encoding=\"utf-8\"?>
\r\n";
$soapData.="<soap:Envelopexmlns:xsi=\http://www.w3.org/2001/XMLSchema-instance\xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"xmlns:soap=\"\r\n'>http://schemas.xmlsoap.org/soap/envelope/\">\r\n";
$soapData.="<soap:Body>\r\n";
$soapData.="<$actionxmlns=\"$namespace\">\r\n";
foreach($dataas$name=>$value){
$name=iconv("GBK","UTF-8",$name);
$value=iconv("GBK","UTF-8",$value);
$soapData.="<$name>$value</$name>\r\n";
}
$soapData.="</$action>\r\n";
$soapData.="</soap:Body>\r\n";
$soapData.="</soap:Envelope>";
return$soapData;
}
<?
$data=array(
'user'=>'测试',//如果需要输入二进制数据请采用BASE64编码
'pass'=>'test'
);
echoHttpSoap('sample.anyhost.com',80,'/sampleSoap.asmx','http://tempuri.org/','logIn',$data);
?>
希望本文所述对大家的PHP程序设计有所帮助。