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统计目录下的文件总数及代码行数(去除注释及空行)
Jan 17 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
php编写批量生成不重复的卡号密码代码
May 14 PHP
PHP内核探索之变量
Dec 22 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
php实现PDO中捕获SQL语句错误的方法
Feb 16 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
PHP基于递归算法解决兔子生兔子问题
May 11 PHP
php统计数组不同元素的个数的实例方法
Sep 26 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 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
基于mysql的论坛(4)
2006/10/09 PHP
PHP时间戳使用实例代码
2008/06/07 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
用Python实现一个简单的线程池
2015/04/07 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
python无序链表删除重复项的方法
2020/01/17 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
C语言笔试集
2012/07/24 面试题
教导处工作制度
2014/01/18 职场文书
妇产医师自荐信
2014/01/29 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
2016党员入党决心书
2015/09/22 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
mongoDB数据库索引快速入门指南
2022/03/23 MongoDB
Moment的feature导致线上bug解决分析
2022/09/23 Javascript