首頁 後端開發 php教程 nusoap wsdl 文件说明。解决办法

nusoap wsdl 文件说明。解决办法

Jun 13, 2016 am 10:11 AM
client gt http soap

nusoap wsdl 文件说明。。
我的服务器创建如下:
App::import('Vendor', 'nusoap/lib/nusoap');
$server = new soap_server; 
$server->configureWSDL('sum');
$server->register('sum',array('x'=>'xsd:string','y'=>'xsd:string'),array('return'=>'xsd:string'),'','http://localhost/ws/info/sum');  
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
//$this->set('data',$server);
$this->autoRender = false;
在浏览器里输入
http://localhost/ws/info?wsdl

返回xml信息中 包含这句






请问 soap:address location的值 我们可以在创建$server 的时候 设置吗,因为用的是cakephp 使用默认值 会出现出错。。

------解决方案--------------------
给个参考例子:

PHP调用Webservice实例,看完就明白了

NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService。它是一个开源软件,是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类,由NuSphere Corporation(http://dietrich.ganx4.com/nusoap/ )开发。NuSOAP的一个优势是不需要扩展库的支持,这种特性使得NuSoap可以用于所有的PHP环境,不受服务器安全设置的影响。  

方法一:直接调用


/******************************************************************************/
/* 文件名 : soapclient.php
/* 说 明 : WebService接口客户端例程
/******************************************************************************/
include(‘NuSoap.php’);

// 创建一个soapclient对象,参数是server的WSDL
$client = new soapclient(‘http://localhost/Webservices/Service.asmx?WSDL’, ‘wsdl’);

// 参数转为数组形式传递
$aryPara = array(‘strUsername’=>’username’, ‘strPassword’=>MD5(‘password’));

// 调用远程函数
$aryResult = $client->call(‘login’,$aryPara);

//echo $client->debug_str;
/*
if (!$err=$client->getError()) {
print_r($aryResult);
} else {
print “ERROR: $err”;
}
*/

$document=$client->document;
echo
 

$document

 

SoapDocument;

?>


方法二:代理方式调用


/******************************************************************************/
/* 文件名 : soapclient.php
/* 说 明 : WebService接口客户端例程
/******************************************************************************/
require(‘NuSoap.php’);

//创建一个soapclient对象,参数是server的WSDL
$client=new soapclient(‘http://localhost/Webservices/Service.asmx?WSDL’, ‘wsdl’);

//生成proxy类
$proxy=$client->getProxy();

//调用远程函数
$aryResult=$proxy->login(‘username’,MD5(‘password’));

//echo $client->debug_str;
/*
if (!$err=$proxy->getError()) {
print_r($aryResult);
} else {
print “ERROR: $err”;
}
*/

$document=$proxy->document;
echo
 

$document

 

SoapDocument;

?>

  许多使用NuSoap 调用.NET WebService或J2EE WebService的朋友可能都遇到过中文乱码问题,下面介绍这一问题的出现的原因和相应的解决方法。

  NuSoap调用WebService出现乱码的原因:

  通常我们进行WebService开发时都是用的UTF-8编码,这时我们需要设置:

$client->soap_defencoding = ‘utf-8′;

  同时,需要让xml以同样的编码方式传递:

$client->xml_encoding = ‘utf-8′;

   至此应该是一切正常了才对,但是我们在输出结果的时候,却发现返回的是乱码。

  NuSoap调用WebService出现乱码的解决方法:

  实际上,开启了调试功能的朋友,相信会发现$client->response返回的是正确的结果,为什么$result = $client->call($action, array(‘parameters’ => $param)); 却是乱码呢?

  研究过NuSoap代码后我们会发现,当xml_encoding设置为UTF-8时,NuSoap会检测decode_utf8的设置,如果为true,会执行 PHP 里面的utf8_decode函数,而NuSoap默认为true,因此,我们需要设置:

$client->soap_defencoding = ‘utf-8′;
$client->decode_utf8 = false;
$client->xml_encoding = ‘utf-8′;

补充介绍

NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务。它是一个开源软件,当前版本是 0.7.2 ,支持 SOAP1.1 、 WSDL1.1 ,可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作。 NuSOAP 完全由PHP语言编写,由一系列 PHP 类组成,不需要扩展库的支持,这种特性使得 NuSOAP 可以用于所有的 PHP 环境,不受服务器安全设置的影响。
 
1. NuSOAP 的获取和安装
NuSOAP 项目建立在 SourceForge 上,网络地址是: http://sourceforge.net/projects/nusoap/ ,这里,可以下载到 NuSOAP 的最新的版本。

NuSOAP 的安装比较简单,把下载的 NuSOAP 的文件拷贝到服务器上,可以放在独立的目录里,也可以与程序代码放在相同的目录里,只要你的 PHP 代码能够访问到这些文件就可以了。
本文的测试环境基于 PHP4.3.2 和 NuSOAP 0.7.2 版本, NuSOAP 安装在 WEB 目录“ /nusoap ”里,有两个子目录, lib 和 samples 。其中, lib 目录下存放 NuSOAP 的所有源代码文件, samples 目录下是NuSOAP开发小组提供一些的例子。测试文件存放在 WEB 目录“ /nusoap ”里。
 
2. NuSOAP 的使用
NuSOAP 由一 PHP 的类组成,其中最常用到的是类soap_server和类soalclient。类soap_server 用于创建 WEB 服务,类soapclient在访问WEB服务时会用到。
2.1 一个简单的例子: Hello World
这个例子将利用 NuSOAP 创建一个简单的 WEB 服务,并利用 NuSOAP 创建一个客户端程序,调用这个服务。这个服务唯一的功能就是向客户端返回一个字符串“ Hello World ”。首先,创建 WEB 服务程序代码文件“ /nusoap/nusoap_server1.php ”:
//把 NuSOAP 的源文件包含到当前的代码文件里
require_once(“lib/nusoap.php”);
//定义服务程序
function hello() {
return ‘Hello World!’;
}
//初始化服务对象 , 这个对象是类 soap_server 的一个实例
$soap = new soap_server; //调用服务对象的 register 方法注册需要被客户端访问的程序。
//只有注册过的程序,才能被远程客户端访问到。
$soap->register(‘hello’); //最后一步,把客户端通过 post 方式提交的数据,传递给服务对象的 service 方法。
//service 方法处理输入的数据,调用相应的函数或方法,并且生成正确的反馈,传回给客户端。
$soap->service($HTTP_RAW_POST_DATA);
?> 至此, WEB 服务程序代码文件已经建好,接下来,创建一个客户端程序代码文件“ /nusoap/nusoap_client1.php ”,调用 WEB 服务:
//把 NuSOAP 的源文件包含到当前的代码文件里
require_once(“lib/nusoap.php”);
//初始化客户端对象,这个对象是类 soapclient 的一个实例,
//把服务程序的 URL 地址传递给soapclient类的构造函数。
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server1.php’); //利用客户端对象的 call 方法调用 WEB 服务的程序
$str=$client->call(‘hello’); //客户端对象的 getError() 方法可以用来检查调用过程是否出现错误。
//如果没有错误, getError() 方法返回 false ;如果有错误, getError()方法返回错误信息。
if (!$err=$client->getError()) {
echo ” 程序返回 :”,htmlentities($str,ENT_QUOTES);
} else {
echo ” 错误 :”,htmlentities($err,ENT_QUOTES);
}
?> 至此,客户端程序也建立好了,打开浏览器,访问客户端程序,看一下结果。这个例子,浏览器会显示字符串:“程序返回 :Hello World! ”
2.2 传递参数和返回错误信息的方法
再通过例子说明传递参数和返回错误信息的方法。这个例子实现两个字符串的连接,参数是两个字符串,返回值是由两个参数连接而成的字符串。首先,创建服务程序代码文件“ /nusoap/nusoap_server2.php ”,完整的代码如下:
require_once(“lib/nusoap.php”);
function concatenate($str1,$str2) {
if (is_string($str1) && is_string($str2))
return $str1 . $str2;
else
return new soap_fault(‘ 客户端 ‘,”,’concatenate 函数的参数应该是两个字符串 ‘);
}
$soap = new soap_server;
$soap->register(‘concatenate’);
$soap->service($HTTP_RAW_POST_DATA);
?> 与 2.1 节 WEB 服务程序的代码比较,这里的代码结构大体是相同的。注意以下两点:
服务程序的定义不同,带有两个参数。 NuSOAP 注册服务程序的过程还是一样的,都是调用服务对象的 register 方法。
这里使用了 NuSOAP 的一个新类 soap_fault 。当传入的两个参数有一个不是字符串时,程序通过这个类把错误信息返回给客户端。这个类的构造函数有 4 个参数:
fault
code
 必填参数 , 建议值为“ Client ”或“ Server ”,指明错误是客户端的错误还是服务端的错误。
 
faultactor
 预留项,现在还没有使用
 
faultstring
 错误的描述信息
 
faultdetail
 可选项, XML 格式的数据 , 说明详细的错误信息 
 
客户端程序代码文件“ /nusoap/nusoap_client2.php ”的完整内容如下 :
require_once(“lib/nusoap.php”);
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server2.php’);
$parameters=array(‘ 字符串 1′,’ 字符串 2′);
$str=$client->call(‘concatenate’,$parameters);
if (!$err=$client->getError()) {
echo ” 程序返回 :”,$str;
} else {
echo ” 错误 :”,$err;
}
?> NuSOAP 的客户端调用带参数的 WEB 服务时,使用数组传递参数。 $parameters 是一个数组,其中依次是每个参数的值。客户端在调用远程的服务程序时,使用带有两个参数的 call 方法,第一个参数是服务程序的名称,第二个参数是服务程序的参数数组,这里是 $parameters 。通过浏览器访问上面的客户端程序,浏览器上会显示字符串:“ 程序返回 : 字符串 1 字符串 2 ”
接下来,试着给 WEB 服务程序传入错误参数,修改上面的客户端程序,把生成参数数组的语句改成: $parameters=array(“ 字符串 ”,12) ,再通过浏览器访问客户端程序,浏览器上会显示字符串:“错误 : 客户端 : concatenate 函数的参数应该是两个字符串”。 WEB 服务程序判断传入的参数有一个不是字符串,通过 soap_fault 给客户端返回错误信息。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
華為GT3 Pro和GT4的差異是什麼? 華為GT3 Pro和GT4的差異是什麼? Dec 29, 2023 pm 02:27 PM

許多用戶在選擇智慧型手錶的時候都會選擇的華為的品牌,其中華為GT3pro和GT4都是非常熱門的選擇,不少用戶都很好奇華為GT3pro和GT4有什麼區別,下面就給大家介紹一下二者。華為GT3pro和GT4有什麼差別一、外觀GT4:46mm和41mm,材質是玻璃鏡板+不鏽鋼機身+高分纖維後殼。 GT3pro:46.6mm和42.9mm,材質是藍寶石玻璃鏡+鈦金屬機身/陶瓷機身+陶瓷後殼二、健康GT4:採用最新的華為Truseen5.5+演算法,結果會更加的精準。 GT3pro:多了ECG心電圖和血管及安

http狀態碼520是什麼意思 http狀態碼520是什麼意思 Oct 13, 2023 pm 03:11 PM

http狀態碼520是指伺服器在處理請求時遇到了一個未知的錯誤,無法提供更具體的資訊。用於表示伺服器在處理請求時發生了一個未知的錯誤,可能是由於伺服器配置問題、網路問題或其他未知原因導致的。通常是由伺服器配置問題、網路問題、伺服器過載或程式碼錯誤等原因導致的。如果遇到狀態碼520錯誤,最好聯絡網站管理員或技術支援團隊以取得更多的資訊和協助。

http狀態碼403是什麼 http狀態碼403是什麼 Oct 07, 2023 pm 02:04 PM

http狀態碼403是伺服器拒絕了客戶端的請求的意思。解決http狀態碼403的方法是:1、檢查身份驗證憑證,如果伺服器要求身份驗證,確保提供正確的憑證;2、檢查IP位址限制,如果伺服器對IP位址進行了限制,確保客戶端的IP位址被列入白名單或未列入黑名單;3、檢查文件權限設置,如果403狀態碼與文件或目錄的權限設置有關,確保客戶端具有足夠的權限訪問這些文件或目錄等等。

修復:截圖工具在 Windows 11 中不起作用 修復:截圖工具在 Windows 11 中不起作用 Aug 24, 2023 am 09:48 AM

為什麼截圖工具在Windows11上不起作用了解問題的根本原因有助於找到正確的解決方案。以下是截圖工具可能無法正常工作的主要原因:對焦助手已開啟:這可以防止截圖工具開啟。應用程式損壞:如果截圖工具在啟動時崩潰,則可能已損壞。過時的圖形驅動程式:不相容的驅動程式可能會幹擾截圖工具。來自其他應用程式的干擾:其他正在運行的應用程式可能與截圖工具衝突。憑證已過期:升級過程中的錯誤可能會導致此issu簡單的解決方案這些適合大多數用戶,不需要任何特殊的技術知識。 1.更新視窗與Microsoft應用程式商店應用程

瞭解網頁重定向的常見應用場景並了解HTTP301狀態碼 瞭解網頁重定向的常見應用場景並了解HTTP301狀態碼 Feb 18, 2024 pm 08:41 PM

掌握HTTP301狀態碼的意思:網頁重定向的常見應用場景隨著網路的快速發展,人們對網頁互動的要求也越來越高。在網頁設計領域,網頁重定向是一種常見且重要的技術,透過HTTP301狀態碼來實現。本文將探討HTTP301狀態碼的意義以及在網頁重新導向中的常見應用場景。 HTTP301狀態碼是指永久重新導向(PermanentRedirect)。當伺服器接收到客戶端發

HTTP 200 OK:了解成功回應的意義與用途 HTTP 200 OK:了解成功回應的意義與用途 Dec 26, 2023 am 10:25 AM

HTTP狀態碼200:探索成功回應的意義與用途HTTP狀態碼是用來表示伺服器回應狀態的數字代碼。其中,狀態碼200表示請求已成功被伺服器處理。本文將探討HTTP狀態碼200的具體意義與用途。首先,讓我們來了解HTTP狀態碼的分類。狀態碼分為五個類別,分別是1xx、2xx、3xx、4xx和5xx。其中,2xx表示成功的回應。而200是2xx中最常見的狀態碼

如何使用Nginx Proxy Manager實現HTTP到HTTPS的自動跳轉 如何使用Nginx Proxy Manager實現HTTP到HTTPS的自動跳轉 Sep 26, 2023 am 11:19 AM

如何使用NginxProxyManager實現HTTP到HTTPS的自動跳轉隨著互聯網的發展,越來越多的網站開始採用HTTPS協議來加密傳輸數據,以提高數據的安全性和用戶的隱私保護。由於HTTPS協定需要SSL憑證的支持,因此在部署HTTPS協定時需要有一定的技術支援。 Nginx是一款強大且常用的HTTP伺服器和反向代理伺服器,而NginxProxy

快速應用:PHP 非同步 HTTP 下載多個檔案的實用開發案例分析 快速應用:PHP 非同步 HTTP 下載多個檔案的實用開發案例分析 Sep 12, 2023 pm 01:15 PM

快速應用:PHP非同步HTTP下載多個檔案的實用開發案例分析隨著互聯網的發展,檔案下載功能已成為許多網站和應用程式的基本需求之一。而對於需要同時下載多個檔案的場景,傳統的同步下載方式往往效率低且耗費時間。為此,使用PHP非同步HTTP下載多個檔案成為了越來越常見的解決方案。本文將透過一個實際的開發案例,詳細分析如何使用PHP非同步HTTP

See all articles