这篇文章主要介绍了 PHP 实现 Soap 通讯的方法, 是 webservice 的一个典型应用, 需要的朋友可以参考下
本文实例讲述了 PHP 实现 Soap 通讯的方法分享给大家供大家参考具体实现方法如下:
代码如下:
- <?php
- function HttpSoap($server, $port, $url, $namespace, $action, $data) {
- $fp = @fsockopen($server, $port);
- if (!$fp) {
- return FALSE;
- } else {
- $soapData = ConstructData($namespace, $action, $data);
- $length = strlen($soapData);
- $out = "POST $url HTTP/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) {
- return FALSE;
- }
- return $data;
- }
- }
- function ConstructData($namespace, $action, $data) {
- $soapData = "<?xml version="1.0\"encoding=\"utf-8\"?>
- \r\n";
- $soapData .= "http://schemas.xmlsoap.org/soap/envelope/\">\r\n";
- $soapData .= "\r\n";
- $soapData .= "<$action xmlns=\"$namespace\">\r\n";
- foreach($data as $name => $value) {
- $name = iconv("GBK","UTF-8",$name);
- $value= iconv("GBK","UTF-8",$value);
- $soapData .= "<$name>$value\r\n";
- }
- $soapData .= "\r\n";
- $soapData .= "\r\n";
- $soapData .= "";
- return $soapData;
- }
- <?
- $data=array(
- 'user'=>'测试', // 如果需要输入二进制数据请采用 BASE64 编码
- 'pass'=>'test'
- );
- echo HttpSoap('sample.anyhost.com', 80, '/sampleSoap.asmx', 'http://tempuri.org/', 'logIn', $data);
- ?>
来源: https://www.php1.cn/detail/php-83f0d0d643.html