PHP では、php.ini ファイルで php_soap.dll 拡張子を有効にすると、SOAP をサポートできます。
SOAP 拡張ライブラリには、主に 3 種類のオブジェクトがあります。
1. SoapServer
は、PHP サーバー側ページを作成するときに呼び出して応答データを返すことができる関数を定義するために使用されます。 SoapServer オブジェクトを作成するための構文形式は次のとおりです:
$soap = new SoapServer($wsdl, $array)
このうち $wsdl は、shoep が使用する wsdl ファイルであり、wsdl は Web サービスを記述するための標準形式です。 if $wsdl wsdl モードを使用しない場合は null に設定します。 $array は SoapServer の属性情報であり、配列です。
SoapServer オブジェクトの addFunction メソッドは、クライアントがどの関数を呼び出すことができるかを宣言するために使用されます。構文形式は次のとおりです:
$soap->addFunction($function_name);
このうち、$soap は SoapServer オブジェクトです。 、$function_name 関数名を呼び出す必要があります。
SoapServer オブジェクトの handle メソッドは、ユーザー入力を処理して対応する関数を呼び出し、最終的に処理結果をクライアントに返すために使用されます。構文形式は次のとおりです:
$soap->handle([$soap_request]);
このうち、$soap は SoapServer オブジェクトで、$soap_request はユーザーのリクエスト情報を表すために使用されるオプションのパラメーターです。 $soap_request が指定されていない場合、サーバーはユーザーからのすべてのリクエストを受け入れることを意味します。
2. SoapCliet
は、リモート サーバー上の SoapServer ページを呼び出すために使用され、対応する関数への呼び出しを実装します。 SoapClient オブジェクトを作成するための構文形式は次のとおりです:
$soap = new SoapClient($wsdl,$array);
このうち、パラメータ $wsdl と $array は SoapServer と同じです。
SoapClient オブジェクトを作成した後、サーバー ページで関数を呼び出すことは、SoapClient メソッドを呼び出すことと同じです。 作成構文は次のとおりです:
$soap->user_function($params);
このうち、$soap は SoapClient です。 object および user_function はサーバーです。呼び出される関数、$params は関数に渡されるパラメーターです。
3. SoapFault
SoapFault は、SOAP アクセス中に発生する可能性のあるエラーを生成するために使用されます。 soapFault オブジェクトを作成するための構文形式は次のとおりです:
$fault = new SoapFault($faultcode,$faultstring);
このうち、$faultcode はユーザー定義のエラー コード、$faultstring はユーザー定義のエラー メッセージです。 。 soapFault オブジェクトは、サーバー側のページでエラーが発生したとき、またはユーザーが SoapFault オブジェクトを作成したときに自動的に生成されます。 Soap アクセス中に発生したエラーの場合、クライアントは SoapFalut オブジェクトをキャプチャすることで、対応するエラー情報を取得できます。
クライアントで SoapFault オブジェクトをキャプチャした後、次のコードを通じてエラー コードとエラー情報を取得できます:
$fault->faultcode;//エラー コード
$fault->faultstring;//エラー情報
ここで, $fault 前に作成した SoapFault オブジェクトです。
SoapServer と SoapClient は両方とも 2 つのパラメーターを受け取ります。ここでは、次のオプションを使用します。
uri: 名前空間。クライアントとサーバーは、同じ名前空間を使用する必要があります。サーバー プログラムのアクセス アドレス。この例では 2 番目のコードのプログラム アドレスです。
trace: クライアントによって使用されます。 true の場合、サーバーとクライアント間の通信の内容をデバッグのために取得できます。
for ($i = 1; $i <= strlen($str); $i++) { $retval .= $str [(strlen($str) - $i)]; $retval を返す } 関数 add2numbers($num1, $num2) { if (trim($num1) != intval($num1)) {
return new SoapFault ('Client', '', '最初の番号は無効です');
}
if (trim($num2) != intval($num2)) {
return new SoapFault ('Client', '', '2 番目の番号は無効です');
}
return ($num1 + $num2);
}
function gettime()
{
$time = date('Y-m-d H:i:s', time());
$time を返す;
}
$soap = 新しい SoapServer (null, array('uri' => "httr://test-rui"));
$soap->addFunction('reverse');
$soap->addFunction('add2numbers');
$soap->addFunction('gettime');
$soap->addFunction(SOAP_FUNCTIONS_ALL);
$soap->handle();
?>
SoapClient.php
Java代码
error_reporting(7);
try {
$client = new SoapClient (null, array('location' => "http://www.yiigo.com/Soapserver.php", 'uri' => "http://test -uri"));
$str = 「この文字列は反転されます」;
$reversed = $client->reverse($str);
echo 「'$str' を逆にすると、'$reversed' が得られます」;
$n1 = 20;
$n2 = 33;
$sum = $client->add2numbers($n1, $n2);
エコー "
";
echo 「$n1 + $n2 を試してみると、$sum が得られます」;
エコー "
";
echo 「remoye システムの時間は: 」 $client->gettime();
} catch (SoapFault $fault) {
echo 「Fault! code:」 。 $fault->faultcode 。 " 弦:" 。 $fault->faultstring;
}
?>
「この文字列は反転されます」を逆にすると、「desrever eb lliw gnirts sihT」が得られます
20 + 33 を試すと、53 が得られます
remoye システム時間は: 2012-05-28 16:14 :29
通过SoapHeader实现身份认证
Java代码
class Server
{
public auth($a)
{
if ($a != '123456789 ') {
throw new SoapFault('Server', '用户身份认证情報错误');
}
}
パブリック関数say()
{
return 'こんにちは';
}
}
$srv = new SoapServer(null, array('uri' => 'http://localhost/namespace'));
$srv->setClass('サーバー');
$srv->handle();
客户端
Java代番号
$cli = new SoapClient(null,
)array('uri' => 'http://localhost/namespace/',
'location' => 'http://localhost/server.php',
'trace' => true) ; SOAP_ACTOR_NEXT);
$cli->setSoapHeaders(array($h));
echo $cli->say();
echo $ e ->getMessage();
}
server.php のサーバー クラスには、メソッドのヘッダーの名前 $u に対応するメソッド「auth」があることに注意してください。 auth はsoapServerが受け取るsoapHeaderのデータです。 このリクエストはまずauthメソッドを呼び出し、パラメータとして「123456789」をメソッドに渡します。 mustUnderstand パラメータが false の場合、認証メソッドが存在しない場合でも Say メソッドが呼び出されます。ただし、true の場合、認証メソッドが存在しない場合は、ヘッダーが処理されていないことを通知する Soapfault が返されます。 。 Actor パラメータは、どのロールがヘッダーを処理する必要があるかを指定します。ここではよく理解していないため、何とも言えません。
Java コード
$file = $this->getSoapWSDL();
$client = new SoapClient($file);//URL はブラウザ経由でアクセスできますが、
$param を解決するために直接呼び出すことはできません= array( 'userID' => 'test', 'merchantID' => 'test');
$returnSt = $client->checkUser($param);
print_r($returnSt->checkUserResult) );
public function getSoapWSDL()
{ //URL ファイルをローカル
$file = Mage::getBaseDir() DS . 'エクスポート.wsdl';
if (time() > filemtime($file) + 7 * 86400) {
$url = "http://jf.sdo.com/ExchangeScore/ExchangeService.asmx?WSDL" ;
include_once(BP . DS . "lib/Snoopy.class.php");
$snoopy = 新しいスヌーピー
$snoopy->fetch($url); // すべてのコンテンツを取得します
y-> read_timeout = 4;
$wsdl = $snoopy->results;
if ($snoopy->status == '200' && !$snoopy->timed_out) {
if (! is_dir(dirname($ file))){