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下escape解码函数的实现方法
Aug 08 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
php将html转成wml的WAP标记语言实例
Jul 08 PHP
PHP学习笔记之php文件操作
Jun 03 PHP
PHP对象相关知识总结
Apr 09 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 PHP
浅谈PHP封装CURL
Mar 06 PHP
Laravel 自带的Auth验证登录方法
Sep 30 PHP
laravel框架实现去掉URL中index.php的方法
Oct 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的FTP学习(三)
2006/10/09 PHP
Memcache 在PHP中的使用技巧
2010/02/08 PHP
php旋转图片90度的方法
2013/11/07 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
script标签属性用type还是language
2015/01/21 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
vue里input根据value改变背景色的实例
2018/09/29 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
Python3中的2to3转换工具使用示例
2015/06/12 Python
Python 探针的实现原理
2016/04/23 Python
Python global全局变量函数详解
2018/09/18 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
2014年扶贫帮困工作总结
2014/12/09 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫