この記事では、企業の iPhone 6 携帯電話予約インターフェイス開発を例として、PHP5 での SOAP 呼び出しの実装プロセスを紹介します。
SOAP (Simple Object Access Protocol) シンプル オブジェクト アクセス プロトコルは、分散環境で情報を交換するためのシンプルなプロトコルであり、次の 4 つの部分で構成されています。 SOAP エンベロープ (エンベロープ)。メッセージの内容、送信者、受信者と処理方法、およびアプリケーションが使用する必要があるデータ型のインスタンスを表すために使用される SOAP エンコード ルール (エンコード ルール) を説明します。 RPC 表現) は、リモート プロシージャの呼び出しと応答のプロトコルを表します。SOAP バインディング (バインディング) は、基礎となるプロトコルを使用して情報を交換します。
WSDL (Web Service description Language) は、Ariba、Intel、IBM、Microsoft などの開発者によって提案された、XML Web サービスを記述するための標準 XML 形式です。これは、特定の言語に依存しない抽象的な方法で、特定の Web サービスによって送受信される関連する操作とメッセージを定義します。その定義上、WSDL をオブジェクト インターフェイス定義言語として考えることはできません。たとえば、CORBA や COM などのアプリケーション アーキテクチャはオブジェクト インターフェイス定義言語を使用します。 WSDL はプロトコル中立性を保ちますが、SOAP へのバインディングのサポートが組み込まれているため、SOAP との切り離せないリンクが確立されます。したがって、この記事で WSDL について説明するときは、通信プロトコルとして SOAP を使用していることを前提とします。
SOAP と WSDL は Web サービスの 2 つの主要な標準ですが、必ずしも接続されているわけではなく、独立して使用することもできます。それらの間の関係は、HTTP と Html の関係に似ています。前者はプロトコル、後者は Web サーバーの記述です。
PHP 構成ファイル php.ini で、
を見つけます。 リーリー次に、前にある「;」記号を削除して、Webサービスを再起動します
地方の電気通信会社の注文入力インターフェイスは http://***.******.com/services/AcceptedBusiness?wsdl です
SoapClient の __geunctions() メソッドと __getTypes() メソッドを使用して、インターフェース メソッド、パラメーター、およびデータ型
__getFunctions にリストされているインターフェースのみが、soap によって呼び出すことができます。
ルートディレクトリにコードsoap.phpを作成します
ブラウザで http://localhost/soap.php を実行すると、返される結果は次のようになります
リーリー開発ドキュメントに記載されている使用するインターフェースとなるメソッド導入AcceptedBusinessByStandardInterface(string $xmlStr)があり、パラメータはXML文字列です
さらに、一部のインターフェイスでは SoapHeader 認証について言及されており、これには __setSoapHeaders メソッドを追加する必要があります。詳細については、http://php.net/manual/zh/soapclient.setsoapheaders.php を確認してください。
次の内容で acceptbusiness.php を作成します
リーリー
リーリー
nusoap と比較した場合、soap の利点の 1 つは、nusoap が完全に PHP 言語で書かれており、一連の PHP クラスで構成されているのに対し、C で開発され、php の内部関数ライブラリにコンパイルされていることです。 2 番目の利点は、nusoap はかなり前から存在していましたが、php5 バージョンで追加されたため、関数ライブラリとしての Soap の地位が確実になったことです。上昇し続けます。
php5 の Soap 関数ライブラリは非常に使いやすく、zend 開発環境の開発ツールを使用して wsdl を生成できます。
いくつかの問題に注意してください:
1. 効率を向上させるために、PHP は wsdl ファイルを無効にするための ini_set("soap.wsdl_cache_enabled", 0); を使用できます。ファイル;
2. SOAP (Simple Object Access Protocol) シンプル オブジェクト アクセス プロトコル。php5 では、リモート アクセス呼び出し用のオブジェクト setClass を提供するだけでなく、メソッド addFunctions も提供します。つまり、SOAP の「O」が拡張されました。
3. サーバーはクライアントからデータ POST を取得できない可能性があります。これは php5 SOAP 関数のバグである可能性があります。解決策は、以下のサーバー サンプル プログラムのコードです。 )) {
$request = $HTTP_RAW_POST_DATA;
} else {
$request = file_get_contents('php://input');
}
以下はプログラムのソースコードの例です。
SOAP クライアントの例:
ini_set("soap.wsdl_cache_enabled", 0);
try{
$soap = new SoapClient('authenticate/idolol.wsdl');
$soap-> ; get_avatar(230);
$functions = $soap->__getFunctions();
print_r($functions);
$types = $soap->__getTypes();
print_r($types);
}catch( SoapFault $fault){
trigger_error("SOAP フォールト: (フォールトコード: {$fault->faultcode}, フォールト文字列: {$fault->faultstring})", E_USER_ERROR);
}
?>
soap サーバー例:
require './soap_functions.php';
ini_set("soap.wsdl_cache_enabled", 0);
$server = new SoapServer('authenticate/idolol.wsdl', array( 'encoding'=>'UTF-8'));
$server->addFunction(array("user_login","se...残りのテキスト>>
実際、SoapClient は SOAP リクエストをカプセル化したものです。基盤となるインターフェースを使用してアクセスすることもできますが、これには SOAP プロトコルを理解する必要があり、非常に面倒です。
SOAPサービスやSOAPリクエストを簡単に書けるnusoapというライブラリについて学ぶことができます。
採用していただければ幸いです、ご支援ありがとうございます!