当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP实现Soap通讯的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-22 11:20:52 浏览: 评论:0 

这篇文章主要介绍了PHP实现Soap通讯的方法,是web service的一个典型应用,需要的朋友可以参考下

本文实例讲述了PHP实现Soap通讯的方法。分享给大家供大家参考。具体实现方法如下:

  1. <?php 
  2. function HttpSoap($server$port$url$namespace$action$data) { 
  3. $fp = @fsockopen($server$port); 
  4. if (!$fp) { 
  5. return FALSE; 
  6. else { 
  7. $soapData = ConstructData($namespace$action$data); 
  8. $length = strlen($soapData); 
  9. $out = "POST $url HTTP/1.1\r\n"
  10. $out .= "Host: $server\r\n"
  11. $out .= "Content-Type: text/xml; charset=utf-8\r\n"
  12. $out .= "Content-Length: $length\r\n"
  13. $out .= "SOAPAction: \"$namespace$action\"\r\n\r\n"
  14. $out .= $soapData
  15. $out .= "\r\n\r\n"
  16. fputs($fp$out); 
  17. stream_set_timeout($fp, 2); 
  18. $header = ""
  19. while($line = trim(fgets($fp))) { 
  20. $header .= $line."\n"
  21. $dataPos = strpos($header"Content-Length: ") + 16; 
  22. $dataEnd = strpos($header"\n"$dataPos); 
  23. $dataLength = substr($header$dataPos$dataEnd - $dataPos); 
  24. $data = ""
  25. if($dataLength > 0) { 
  26. $data = fread($fp$dataLength); 
  27. fclose($fp); 
  28. if(strlen($data) != $dataLength || $dataLength <= 0) { 
  29. return FALSE; 
  30. return $data
  31. function ConstructData($namespace$action$data) { 
  32. $soapData = " 
  33. <?xml version="1.0\" encoding=\"utf-8\"?> 
  34. \r\n"; 
  35. $soapData .= "<soap:Envelope xmlns: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"
  36. $soapData .= " <soap:Body>\r\n"
  37. $soapData .= " <$action xmlns=\"$namespace\">\r\n"
  38. foreach($data as $name => $value) { 
  39. $name = iconv("GBK","UTF-8",$name); 
  40. $value= iconv("GBK","UTF-8",$value); 
  41. $soapData .= " <$name>$value</$name>\r\n"
  42. $soapData .= " </$action>\r\n"
  43. $soapData .= " </soap:Body>\r\n"
  44. $soapData .= "</soap:Envelope>"
  45. return $soapData
  46. }//www.phpfensi.com 
  47. <? 
  48. $data=array
  49. 'user'=>'测试'//如果需要输入二进制数据请采用BASE64编码 
  50. 'pass'=>'test' 
  51. ); 
  52. echo HttpSoap('sample.anyhost.com', 80, '/sampleSoap.asmx''http://tempuri.org/''logIn'$data); 
  53. ?> 

希望本文所述对大家的PHP程序设计有所帮助。

Tags: Soap通讯

分享到: