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新手上路(十四)
Oct 09 PHP
PHP 各种排序算法实现代码
Aug 20 PHP
php 文件缓存函数
Oct 08 PHP
php中大括号作用介绍
Mar 22 PHP
几个有用的php字符串过滤,转换函数代码
May 01 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
php头像上传预览实例代码
May 02 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 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
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
js对数字的格式化使用说明
2011/01/12 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
python实现括号匹配的思路详解
2018/08/23 Python
django连接oracle时setting 配置方法
2019/08/29 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Python使用re模块验证危险字符
2020/05/21 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
密封类可以有虚函数吗
2014/08/11 面试题
智能电子应届生求职信
2013/11/10 职场文书
社团活动总结模板
2014/06/30 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
全国助残日活动总结
2015/05/11 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
毕业典礼致辞
2015/07/29 职场文书
Mysql 文件配置解析介绍
2022/05/06 MySQL
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers