当前位置:首页 > 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. } 
  22. $dataPos = strpos($header, "Content-Length: ") + 16; 
  23. $dataEnd = strpos($header, "\n", $dataPos); 
  24. $dataLength = substr($header, $dataPos, $dataEnd - $dataPos); 
  25. $data = ""; 
  26. if($dataLength > 0) { 
  27. $data = fread($fp, $dataLength); 
  28. } 
  29. fclose($fp); 
  30. if(strlen($data) != $dataLength || $dataLength <= 0) { 
  31. return FALSE; 
  32. } 
  33. return $data; 
  34. } 
  35. } 
  36. function ConstructData($namespace, $action, $data) { 
  37. $soapData = " 
  38. <?xml version="1.0\" encoding=\"utf-8\"?> 
  39. \r\n"; 
  40. $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"; 
  41. $soapData .= " <soap:Body>\r\n"; 
  42. $soapData .= " <$action xmlns=\"$namespace\">\r\n"; 
  43. foreach($data as $name => $value) { 
  44. $name = iconv("GBK","UTF-8",$name); 
  45. $value= iconv("GBK","UTF-8",$value); 
  46. $soapData .= " <$name>$value</$name>\r\n"; 
  47. } 
  48. $soapData .= " </$action>\r\n"; 
  49. $soapData .= " </soap:Body>\r\n"; 
  50. $soapData .= "</soap:Envelope>"; 
  51. return $soapData; 
  52. }//www.phpfensi.com 
  53. <? 
  54. $data=array( 
  55. 'user'=>'测试', //如果需要输入二进制数据请采用BASE64编码 
  56. 'pass'=>'test' 
  57. ); 
  58. echo HttpSoap('sample.anyhost.com', 80, '/sampleSoap.asmx', 'http://tempuri.org/', 'logIn', $data); 
  59. ?> 

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

Tags: Soap通讯

分享到: