ホームページ  >  記事  >  バックエンド開発  >  PHP が Web サービス インスタンス コードを呼び出す_PHP チュートリアル

PHP が Web サービス インスタンス コードを呼び出す_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:25:32758ブラウズ

これは、HTTP を介して SOAP メッセージを送受信する、完全に PHP 言語で記述された一連の PHP クラスであるオープン ソース ソフトウェアであり、NuSphere Corporation (http://dietrich.ganx4.com/nusoap/) によって開発されています。 NuSOAP の利点の 1 つは、拡張ライブラリのサポートを必要とせず、この機能により NuSoap をすべての PHP 環境で使用できるようになり、サーバーのセキュリティ設定の影響を受けないことです。

方法 1:

を直接呼び出す コードをコピーする コードは次のとおりです:



include('NuSoap.php')// パラメータであるsoapclientオブジェクトを作成します。サーバーの WSDL です
$client = newsoapclient('http://localhost/Webservices/Service.asmx?WSDL', 'wsdl');

// パラメーターは配列形式で渡されます
$aryPara = array( 'strUsername'=> 'username', 'strPassword'=>MD5('password'));

// リモート関数を呼び出す
$aryResult = $client->call('login',$aryPara);

//echo $ client->debug_str;


$document=$client->document;
echo <<


?>


メソッド呼び出し




コードは次のとおりです:


re quire('NuSoap .php'); //soapclient オブジェクトを作成します。パラメータはサーバーの WSDL です
$client=newsoapclient('http ://localhost/Webservices/Service.asmx?WSDL', 'wsdl');

/ /プロキシ クラスを生成
$proxy=$client->getProxy()//リモート関数を呼び出す
$aryResult= $proxy->login('ユーザー名',MD5('パスワード'));

/ /echo $client->debug_str;


$document=$proxy->document;


?>


NuSoap を使用して .NET WebService または J2EE WebService を呼び出す多くの友人は、中国語の文字化けの問題に遭遇した可能性があります。この問題の原因と対応する解決策を以下に紹介します。

NuSoap が WebService を呼び出すときに文字化けが発生する理由:

通常、WebService を開発するときは UTF-8 エンコーディングを使用します。このとき、次のように設定する必要があります。同時に、XML は同じエンコード方式で渡す必要があります:

$client->xml_encoding = 'utf-8';

この時点ではすべてが正常であるはずですが、結果を出力すると、返された It は意味不明であることがわかりました。

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->xml_encoding = 'utf-8'; NuSOAP は、WEB サービスを作成または呼び出すために使用される、PHP 環境の 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 の最新バージョンをダウンロードできます。

PHP コードがこれらのファイルにアクセスできる限り、ダウンロードした NuSOAP ファイルをサーバーにコピーするだけです。 。
この記事のテスト環境は PHP4.3.2 および NuSOAP バージョン 0.7.2 に基づいており、NuSOAP は WEB ディレクトリ "/nusoap" にインストールされており、lib と tables の 2 つのサブディレクトリがあります。このうち、lib ディレクトリには NuSOAP のすべてのソース コード ファイルが保存され、samples ディレクトリには NuSOAP 開発チームが提供するいくつかのサンプルが含まれています。テストファイルはWEBディレクトリ「/nusoap」に保存されます。

2. NuSOAP の使用
NuSOAP は PHP クラスで構成されており、最もよく使用されるのはクラスsoap_serverとクラスsoapclientです。 WEBサービスの作成にはsoap_serverクラスを使用し、WEBサービスへのアクセスにはsoapclientクラスを使用します。
2.1 簡単な例: Hello World
この例では、NuSOAP を使用して単純な WEB サービスを作成し、NuSOAP を使用してこのサービスを呼び出すクライアント プログラムを作成します。このサービスの唯一の機能は、文字列「Hello World」をクライアントに返すことです。まず、WEB サービス プログラム コード ファイル "/nusoap/nusoap_server1.php" を作成します:
//NuSOAP ソース ファイルを現在のコード ファイルに含めます



コードをコピーします

コードは次のとおりです:


< ;?php
require_once("lib/nusoap.php");
//サービス プログラムを定義します
function hello() { return 'Hello World!' } //インスタンスであるサービス オブジェクトを初期化しますクラスsoap_serverの $soap = newsoap_server; //サービスオブジェクトの register メソッドを呼び出して、クライアントがアクセスする必要があるプログラムを登録します。
//リモートクライアントは登録されたプログラムのみにアクセスできます。
$soap->register('hello'); //最後のステップは、クライアントによって送信されたデータを post メソッドを通じてサービス オブジェクトのサービス メソッドに渡すことです。
//サービス メソッドは入力データを処理し、対応する関数またはメソッドを呼び出し、正しいフィードバックを生成してクライアントに送り返します。
$soap->service($HTTP_RAW_POST_DATA);
?>


この時点で、クライアント プログラム コード ファイル「/nusoap/nusoap_client1.php」が作成されます。 WEBサービスを呼び出す:



コードをコピー

コードは次のとおりです:

//NuSOAP ソース ファイルを現在のコード ファイルにインクルードします
require_once(“lib/nusoap.php”);
// クラス soapclient のインスタンスであるクライアント オブジェクトを初期化します
/ /サービスプログラムのURLアドレスをsoapclientクラスのコンストラクタに渡します。
$client = newsoapclient('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 パラメーターを渡してエラー情報を返す方法
次に、例を使用してパラメーターを渡し、エラー情報を返す方法を説明します。この例では、2 つの文字列の接続を実装しています。パラメータは 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 newsoap_fault(' client',",' concatenate 関数のパラメータは 2 つの文字列である必要があります');
}
$soap = newsoap_server;
$soap->register('concatenate');
$soap->service($ HTTP_RAW_POST_DATA);
?> ;


セクション 2.1 の WEB サービス プログラムのコードと比較すると、以下の 2 つの点に注意してください。 NuSOAP サービス プログラムを登録するプロセスはすべて同じであり、渡された 2 つのパラメーターのいずれかが文字列でない場合、プログラムはサービス オブジェクトの register メソッドを呼び出します。このクラスを通じてクライアントにエラー メッセージを返します。コンストラクターには 4 つのパラメーターがあります:
fault
code
必須パラメーター。推奨値は、エラーがクライアント エラーであるかサーバー エラーであるかを示す「Client」または「Server」です。

faultactor
予約済みアイテム、まだ使用されていません。

faultstring
エラー説明情報

faultdetail
詳細なエラー情報を記述する XML 形式のデータ

クライアント プログラム コード ファイル "/nusoap/nusoap_client2.php" の完全な内容" は次のとおりです:



コードをコピー
コードは次のとおりです: require_once("lib/nusoap.php");
$client = newsoapclient('http:// 127.0.0.1/nusoap/nusoap_server2.php');
$parameters=array('String1','String2');
$str=$client->call('concatenate',$parameters); $err=$client->getError ()) {
echo ” プログラム return:”,$str;
} else {
echo ” エラー:”,$err;

;
NuSOAP クライアントがパラメータを指定して WEB サービスを呼び出すとき、配列を使用してパラメータを渡します。 $parameters は、各パラメータの値を順番に含む配列です。クライアントがリモート サービス プログラムを呼び出すときは、2 つのパラメーターを指定した call メソッドを使用します。最初のパラメーターはサービス プログラムの名前で、2 番目のパラメーターはサービス プログラムのパラメーター配列 (ここでは $parameters) です。ブラウザ経由で上記のクライアント プログラムにアクセスすると、ブラウザには「Program returns: String 1 String 2」という文字列が表示されます。
次に、WEB サービス プログラムにエラー パラメーターを渡して、上記のクライアント プログラムを変更してみます。 $parameters=array("String",12) のパラメータ配列を生成し、ブラウザを通じてクライアント プログラムにアクセスすると、ブラウザには文字列「エラー: クライアント: 連結関数のパラメータは 2 つの文字列である必要があります。」が表示されます。 WEB サービス プログラムは、渡されたパラメータの 1 つが文字列ではないと判断し、soap_fault を通じてクライアントにエラー メッセージを返します。
2.3 デバッグ方法
NuSOAP では一般的に使用される 3 つのデバッグ方法があります:
2.3.1 soapclient クラスのリクエストおよびレスポンスのメンバー変数
最も直接的なデバッグ方法は、プロセス中にクライアントによって発行されたリクエスト情報とサービスを確認することです。 WEBサービスへのアクセス時にクライアントから返される応答情報。 soapclient クラスのリクエストおよびレスポンスのメンバー変数には、この情報が含まれています。プログラム内でこれら 2 つの変数の内容を表示すると、プログラムの実行ステータスを分析するのに役立ちます。以下のコードを見てください:
コードをコピーします コードは次のとおりです:

require_once("lib/nusoap.php");
$client = newsoapclient('http: //127.0.0.1 /nusoap/nusoap_server2.php');
$parameters=array(' string1',' string2');
$str=$client->call('concatenate',$parameters); ( !$err=$client->getError()) {
echo ” プログラムの戻り値:”,$str;
} else {
echo ” エラー:”,$err;
//リクエスト変数とレスポンス変数コンテンツ
echo '

';
echo 'Request:';
echo '

',htmlspecialchars($client->request,ENT_QUOTES),'
' ;
echo 'Response:';
echo '
',htmlspecialchars($client->response,ENT_QUOTES),'
'


2.3.2 の debug_str メンバーsoapclient クラス 変数
soapclient クラスの debug_str メンバー変数は、より詳細なデバッグ情報を提供します。この変数の内容を表示すると、プログラムのデバッグに役立ちます。
2.3.3 WEBサービスプログラムが提供するデバッグメソッド
WEBサービスプログラムのコードでは、soap_serverクラスのインスタンスを作成する前に、変数$debug=1を定義します。デバッグ情報はメモとして使用され、SOAP メッセージの最後に配置されてクライアントに返されます。クライアントは、WEB サービスの応答情報を参照することでデバッグ情報を確認できます。



コードをコピーします
コードは次のとおりです: require_once("lib/nusoap.php")
function concatenate($str1,$str2) {
if (is_string($) str1) && is_string($str2))
return $str1 . $str2;
else
return newsoap_fault('client',",'連結関数のパラメータは 2 つの文字列である必要があります');
}
$debug= 1; //デバッグを定義します
$soap = new saw_server;
$soap->service($HTTP_RAW_POST_DATA);


2.4 のサポートNuSOAP の WSDL サポートは、「WSDL」クラスを通じて内部的に実装されます。NuSOAP ユーザーにとって、WSDL のサポートは、soap_server クラスとsoapclient クラスを正しく使用することで実現できます。 1 WSDLに対応したWEBサービスを作成します
WEBサービスプログラムのWSDL対応を実現するには、soap_serverのconfigureWSDLメソッドを使用し、soap_serverのregisterメソッドを呼び出してWEBサービスプログラムを登録する必要があります。より詳細なパラメータを指定するには、以下のコードを参照してください。コードのファイル名は「/nusoap/nusoap_server3.php」です


コードは次のとおりです:

require_once("lib/nusoap.php");
function concatenate($str1,$str2) {
if (is_string($str1) && is_string($str2))
return $str1 . str2;
else
return newsoap_fault('client',",'concatenate 関数のパラメータは 2 つの文字列である必要があります');
}
$soap = newsoap_server;
$soap->configureWSDL('concatenate' ) ; // WSDL のサポートを初期化します
// サービスを登録します
$soap->register('concatenate',
array(“str1″=>”xsd:string”,”str2″=>”xsd: string”) ), // 入力パラメータの定義
array("return"=>"xsd:string") // 戻りパラメータの定義
); $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) : ";
$soap ->service($HTTP_RAW_POST_DATA);
?>

次に、ブラウザを開いて、作成したファイル http://127.0.0.1/nusoap/nusoap_server3.php にアクセスすると、結果は次のようになります。サービスの WSDL を表示します。操作名をクリックして詳細を表示します。
concatenate
関数名 concatenate をクリックして、関数の説明を表示します。 「WSDL」をクリックするか、WEBサービスファイルにアクセスしてクエリ文字列「?wsdl」(http://127.0.0.1/nusoap/nusoap_server3.php?wsdl)を追加してWEBサービスのWSDLコンテンツを取得します。
2.4.2 WSDL を介した WEB サービスの呼び出し
WSDL を介した WEB サービスの呼び出しは、WSDL を使用せずに WEB サービスを呼び出すこととほぼ同じです。違いは、WSDL を介して WEB サービスを呼び出し、soapclient クラスを初期化するときに、2 つのパラメーターが soapclient のコンストラクターに渡されることです。最初のパラメーターは WSDL ファイルのアドレスであり、2 番目のパラメーターは WSDL を使用するかどうかを指定するだけです。それは真実です。以下のコードを見てください。コードのファイル名は「/nusoap/nusoap_client3.php」です



コードをコピーします
コードは次のとおりです: require_once("lib/nusoap .php");
$ client = new soapclient('http://127.0.0.1/nusoap/nusoap_server3.php?wsdl',true);
$parameters=array('String1','String2');
$ str=$ client->call('concatenate',$parameters);
if (!$err=$client->getError()) {
echo ” プログラムは次を返します:”,$str;
echo ” error :”,$err;
}
?>


2.4.3 プロキシの使用
NuSOAP は、リモート WEB サービスを呼び出すためのプロキシ メソッドを提供します。この方法では、クライアントプログラム内にリモートサービスのプロキシオブジェクトを作成し、soapclientクラスのcallメソッドを経由せずにプロキシ経由でリモートWEBサービスを直接呼び出します。以下のコードを見てください。


コードをコピーします
コードは次のとおりです: require_once("lib/nusoap.php");
$client = newsoapclient('http://127.0.0.1/) nusoap/nusoap_server3.php?wsdl',true);
$proxy=$client -> getProxy(); // プロキシ オブジェクト (soap_proxy クラス) を作成します
$str=$proxy->concatenate(" パラメーター 1", 「パラメータ 2」
}
?>



http://www.bkjia.com/PHPjc/324093.html

www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/324093.html

技術記事

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。