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 编写的 25个游戏脚本
May 11 PHP
PHP程序员最常犯的11个MySQL错误小结
Nov 20 PHP
让你成为更出色的PHP开发者的10个技巧
Feb 25 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
解析php如何将日志写进syslog
Jun 28 PHP
php批量更改数据库表前缀实现方法
Oct 26 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
php版阿里云OSS图片上传类详解
Dec 01 PHP
PHP图片水印类的封装
Jul 06 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
php 数据结构之链表队列
Oct 17 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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
第十五节--Zend引擎的发展
2006/11/16 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
深入理解vue Render函数
2017/07/19 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
mac系统安装Python3初体验
2018/01/02 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
Django保护敏感信息的方法示例
2019/05/09 Python
Django 外键的使用方法详解
2019/07/19 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
几个判断型的面试题
2012/07/03 面试题
骨干教师考核方案
2014/05/09 职场文书
产品售后服务承诺书
2014/05/21 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs