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程序设计有所帮助。