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 相关文章推荐
建立动态的WML站点(二)
Oct 09 PHP
php中神奇的fastcgi_finish_request
May 02 PHP
php学习笔记 数组的常用函数
Jun 13 PHP
php urlencode()与urldecode()函数字符编码原理详解
Dec 06 PHP
php json与xml序列化/反序列化
Oct 28 PHP
php绘图中显示不出图片的原因及解决
Mar 05 PHP
php生成PDF格式文件并且加密
Jun 22 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
php微信公众平台开发(三)订阅事件处理
Dec 06 PHP
PHP未登录自动跳转到登录页面
Dec 21 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
Dec 31 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 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
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
javascript 数组排序函数
2009/08/20 Javascript
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
2018/05/15 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
python中join()方法介绍
2018/10/11 Python
利用Python实现kNN算法的代码
2019/08/16 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
python让函数不返回结果的方法
2020/06/22 Python
详解python 内存优化
2020/08/17 Python
易程科技软件测试笔试
2013/03/24 面试题
少儿节目主持串词
2014/04/02 职场文书
新闻编辑求职信
2014/04/09 职场文书
企业管理标语
2014/06/10 职场文书
娱乐节目策划方案
2014/06/10 职场文书
小学课外阅读总结
2014/07/09 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript