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
Google Voice 短信发送接口PHP开源版(2010.5更新)
Jul 22 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
Aug 06 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
thinkPHP5实现的查询数据库并返回json数据实例
Oct 23 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
laravel 事件/监听器实例代码
Apr 12 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
php 发送带附件邮件示例
2014/01/23 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
超清晰的document对象详解
2007/02/27 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
Python线程中对join方法的运用的教程
2015/04/09 Python
Python中join和split用法实例
2015/04/14 Python
Flask之flask-script模块使用
2018/07/26 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Python 绘制可视化折线图
2020/07/22 Python
Python接口自动化测试的实现
2020/08/28 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
美容院店长岗位职责
2014/04/08 职场文书
一年级学生期末评语
2014/04/21 职场文书
大学生就业意向书
2015/05/11 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
人力资源部工作计划
2019/05/14 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS
Nginx内网单机反向代理的实现
2021/11/07 Servers
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers