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开发GUI
Oct 09 PHP
php4的彩蛋
Oct 09 PHP
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
php学习之变量的使用
May 29 PHP
codeigniter数据库操作函数汇总
Jun 12 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
php实现指定字符串中查找子字符串的方法
Mar 17 PHP
php 类自动载入的方法
Jun 03 PHP
AES加解密在php接口请求过程中的应用示例
Oct 26 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
Dec 13 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 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学习笔记之面向对象编程
2012/12/29 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
浅谈webpack 构建性能优化策略小结
2018/06/13 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python的动态重新封装的教程
2015/04/11 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
python中while和for的区别总结
2019/06/28 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
小班秋游活动方案
2014/02/22 职场文书
空气的环保标语
2014/06/12 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
中班上学期个人总结
2015/02/12 职场文书
教师学习心得体会范文
2016/01/21 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS