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 相关文章推荐
一个用于网络的工具函数库
Oct 09 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
php与php MySQL 之间的关系
Jul 17 PHP
php 带逗号千位符数字的处理方法
Jan 10 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
php通过获取头信息判断图片类型的方法
Jun 26 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
php实现的微信红包算法分析(非官方)
Sep 25 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中如何定义和使用常量
2013/02/28 PHP
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
一个超级简单的python web程序
2014/09/11 Python
python的unittest测试类代码实例
2017/12/07 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
python super用法及原理详解
2020/01/20 Python
python中使用np.delete()的实例方法
2021/02/01 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
旅游业大学生创业计划书
2014/01/31 职场文书
国窖1573广告词
2014/03/21 职场文书
单位未婚证明范本
2014/11/25 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
承诺保证书格式
2015/02/28 职场文书
三下乡个人总结
2015/03/04 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
2015年工程师工作总结
2015/04/30 职场文书
重阳节座谈会主持词
2015/07/03 职场文书