PHP实现Soap通讯的方法


Posted in PHP onNovember 03, 2014

本文实例讲述了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 .= "<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";

$soapData .= " <soap:Body>\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</$name>\r\n";

}

$soapData .= " </$action>\r\n";

$soapData .= " </soap:Body>\r\n";

$soapData .= "</soap:Envelope>";

return $soapData;

}

<?

$data=array(

'user'=>'测试', //如果需要输入二进制数据请采用BASE64编码

'pass'=>'test'

); 

echo HttpSoap('sample.anyhost.com', 80, '/sampleSoap.asmx', 'http://tempuri.org/', 'logIn', $data);

?>

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

PHP 相关文章推荐
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
Oct 31 PHP
探讨php中header的用法详解
Jun 07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
php实现的debug log日志操作类实例
Jul 12 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 PHP
PHP生成word文档的三种实现方式
Nov 14 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
PHP耦合设计模式实例分析
Aug 08 PHP
php和vue配合使用技巧和方法
May 09 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 #PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 #PHP
ThinkPHP有变量的where条件分页实例
Nov 03 #PHP
PHP的拦截器实例分析
Nov 03 #PHP
php类中的各种拦截器用法分析
Nov 03 #PHP
PHP类的反射用法实例
Nov 03 #PHP
php之curl设置超时实例
Nov 03 #PHP
You might like
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
python将ip地址转换成整数的方法
2015/03/17 Python
python 容器总结整理
2017/04/04 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python实现一个猜拳游戏
2020/04/05 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
竞选班长演讲稿400字
2014/08/22 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
docker 制作mysql镜像并自动安装
2022/05/20 Servers