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下MYSQL limit的优化
Jan 10 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
php对mongodb的扩展(初出茅庐)
Nov 11 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
PHP使用文件锁解决高并发问题示例
Mar 29 PHP
PHP实现的解汉诺塔问题算法示例
Aug 06 PHP
微信推送功能实现方式图文详解
Jul 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
php ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
一个简单的php路由类
2016/05/29 PHP
简单实现PHP留言板功能
2016/12/21 PHP
php实现数字补零的方法总结
2018/09/12 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
js left,right,mid函数
2008/06/10 Javascript
几个javascript操作word的参考代码
2009/10/26 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
Angularjs基础知识及示例汇总
2015/01/22 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
如何用Python破解wifi密码过程详解
2019/07/12 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
市政施工员自我鉴定
2014/01/15 职场文书
投资协议书范本
2014/04/21 职场文书
教师自荐信范文
2015/03/06 职场文书
学校安全管理制度
2015/08/06 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
在Django中使用MQTT的方法
2021/05/10 Python