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 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
Dec 16 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
用Simple Excel导出xls实现方法
Dec 06 PHP
php基于GD库画五星红旗的方法
Feb 24 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
php mysql 封装类实例代码
Sep 18 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
详解PHP变量传值赋值和引用赋值变量销毁
Mar 23 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 PHP
PHP获取学生成绩的方法
Nov 17 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实现高效获取图片尺寸的方法
2014/12/12 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
js兼容标准的表格变色效果
2008/06/28 Javascript
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
javascript EXCEL 操作类代码
2009/07/30 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
jQuery自定义添加&quot;$&quot;与解决&quot;$&quot;冲突的方法
2015/01/19 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
Python可变参数用法实例分析
2017/04/02 Python
python抽取指定url页面的title方法
2018/05/11 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
python range实例用法分享
2020/02/06 Python
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
师范生见习总结范文
2015/06/23 职场文书
redis中lua脚本使用教程
2021/11/01 Redis
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis