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中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
php把数组值转换成键的方法
Jul 13 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
使用PHP+MySql实现微信投票功能实例代码
Sep 29 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
解决laravel id非自增 模型取回为0 的问题
Oct 11 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 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 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
深入理解JavaScript中Ajax
2016/08/02 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
Python中List.count()方法的使用教程
2015/05/20 Python
python关键字and和or用法实例
2015/05/28 Python
使用python实现BLAST
2018/02/12 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
基于Python实现用户管理系统
2019/02/26 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
python中selenium操作下拉滚动条的几种方法汇总
2019/07/14 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
Python中zip函数如何使用
2020/06/04 Python
利用python 读写csv文件
2020/09/10 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
Python类型转换的魔术方法详解
2020/12/23 Python
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
大学生毕业的自我鉴定
2013/11/13 职场文书
求职信写作要突出重点
2014/01/01 职场文书
消防安全检查制度
2014/02/04 职场文书
环保倡议书400字
2014/05/15 职场文书
小区推广策划方案
2014/06/06 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
组织委员竞选稿
2015/11/21 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript