ホームページ >php教程 >php手册 >PHP は Web サービス インスタンス コードを呼び出します

PHP は Web サービス インスタンス コードを呼び出します

WBOY
WBOYオリジナル
2016-06-13 12:06:17902ブラウズ

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

方法 1:

コードをコピーする コードは次のとおりです。




include('NuSoap.php');

// パラメータはサーバーの WSDL です
$client = newsoapclient('http:// localhost/Webservices/ Service.asmx?WSDL', 'wsdl');

// パラメーターを配列形式に変換して渡します
$aryPara = array('strUsername'=>'username', 'strPassword'=> MD5('password'));

//リモート関数の呼び出し
$client->call('login',$aryPara); 🎜>//echo $ client->debug_str;


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

$document


? 🎜>

方法 2: プロキシ呼び出し



コードをコピー

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

< ? require('NuSoap.php');

//soapclient オブジェクトを作成します。パラメータはサーバーの WSDL

$client=newsoapclient('http: //localhost/Webservices/Service.asmx ?WSDL', 'wsdl');

//プロキシ クラスを生成します
$proxy=$client->getProxy(); //リモート関数を呼び出します
$ aryResult=$proxy->login('username',MD5('password'));

//echo $client->debug_str; 🎜>
$document=$ proxy->document;
echo





;SOAP-ENV:エンベロープ SOAP-ENV :encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:SOAP-ENC=”http:/ /schemas.xmlsoap.org/soap/encoding/” xmlns:si="http://soapinterop.org/xsd">
>
ソープドキュメント;

?>


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 がデフォルトになることがわかります。

$client->soap_defencoding = 'utf-8';
$client->decode_utf8 = false; = '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 。

NuSOAP のインストールは比較的簡単です。ダウンロードした NuSOAP ファイルをサーバーにコピーします。PHP コードがアクセスできる限り、このファイルは別のディレクトリに配置することも、プログラム コードと同じディレクトリに配置することもできます。これらのファイルにアクセスするだけです。
この記事のテスト環境は PHP4.3.2 および NuSOAP バージョン 0.7.2 に基づいており、NuSOAP は WEB ディレクトリ "/nusoap" にインストールされており、lib とsamples の 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 ソース ファイルを現在のコード ファイルにインクルードします

コードをコピーします コードは次のとおりです:

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

これで、WEBサービスのプログラムコードファイルが作成されました。ファイル "/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',",'連結関数のパラメータは 2 つの文字列である必要があります');
}
$soap = 新しいsoap_server;
$soap->register('concatenate');
$soap->?>

2.1 節の WEB サービスプログラムのコードと比較すると、以下の 2 点に注意してください。

サービスプログラムの定義と処理が異なります。 NuSOAP へのサービス プログラムの登録は、サービス オブジェクトの register メソッドを呼び出すことと同じです。
渡された 2 つのパラメータのうちの 1 つが文字列でない場合、プログラムは、このクラスを通じてクライアントにエラー メッセージを返します。コンストラクターには 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(' string 1',' string 2');
$str=$client->call('concatenate',$parameters); if (!$err= $client->getError()) {
echo ” プログラムは次を返します:”,$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 クラスのリクエストおよびレスポンスのメンバー変数
最も直接的なデバッグ方法は、アクセスのプロセスを確認することです。クライアントから送信されるリクエスト情報とサーバーから返されるレスポンス情報。 soapclient クラスのリクエストおよびレスポンスのメンバー変数には、この情報が含まれています。プログラム内でこれら 2 つの変数の内容を表示すると、プログラムの実行ステータスを分析するのに役立ちます。以下のコードを見てください:

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


require_once( “lib/nusoap .php");
$client = newsoapclient('http://127.0.0.1/nusoap/nusoap_server2.php');
$parameters=array(' string 1',' string 2′ );
$str=$client->call('concatenate',$parameters);
if (!$err=$client->getError()) {
echo ”プログラムの戻り値: ",$str;
} else {
echo " Error: ",$err;
}
//リクエスト変数とレスポンス変数の内容を以下に示します
echo '

echo 'Request:';
echo '

',htmlspecialchars($client->request,ENT_QUOTES),'
🎜>echo 'Response: ';
echo '
',htmlspecialchars($client->response,ENT_QUOTES ),'
?> >
2.3.2soapclient クラスの debug_str メンバー変数
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 = newsoap_server;
$soap->register('concatenate');
$soap->service($HTTP_RAW_POST_DATA);


2.4 WSDL のサポート
NuSOAP の WSDL サポートは、クラス "WSDL" を通じて内部的に実装されます。NuSOAP ユーザーは、soap_server クラスとsoapclient クラスを正しく使用することで、内部 WSDL クラスがどのように機能するかを気にする必要はありません。 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',",'連結関数のパラメータは 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 をクリックすると、関数の説明が表示されます。 「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 = newsoapclient('http://127.0.0.1/nusoap/nusoap_server3.php?wsdl ',true);

$parameters=array('String1','String2');
$str=$client->call('concatenate',$parameters); err=$ client->getError()) {
echo ” プログラムの戻り値:”,$str;
} else {
echo ” エラー:”,$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(” Parameter 1″,” Parameter 2″) // WEBサービスを直接呼び出す

if (!$err=$proxy- >getError( )) {

echo ” プログラムが返します:”,$str;
} else {
echo ” エラー:”,$err;
? >

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