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
php URL跳转代码 减少外链
Jun 25 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
Oct 15 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
Feb 06 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
用PHP的反射实现委托模式的讲解
Mar 22 PHP
php xhprof使用实例详解
Apr 15 PHP
PHP数组访问常用方法解析
Sep 05 PHP
PHP数组实际占用内存大小原理解析
Dec 11 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学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
php微信开发之关注事件
2018/06/14 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
js控制表单操作的常用代码小结
2013/08/15 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
vuex的简单使用教程
2018/02/02 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
python爬虫实现获取下一页代码
2020/03/13 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
python如何安装下载后的模块
2020/07/03 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
党员四风问题对照检查材料
2014/09/27 职场文书
入股合作协议书
2014/10/12 职场文书
公司停电通知
2015/04/15 职场文书
2015年端午节活动方案
2015/05/05 职场文书
企业战略合作意向书
2015/05/08 职场文书
法制教育观后感
2015/06/17 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书