サーチ…


構文

パラメーター

パラメータ詳細
$ wsdl WSDLのURIまたは非WSDLモードを使用する場合はNULL
$ options SoapClientのオプション配列。非WSDLモードではlocationuriが設定されている必要があり、その他のオプションはオプションです。可能な値については、下の表を参照してください。

備考

SoapClientクラスには__callメソッドが__callされています。これは直接呼び出すことはできません 。代わりに、これにより以下のことが可能になります:

$soap->requestInfo(['a', 'b', 'c']);

これにより、 requestInfo SOAPメソッドが呼び出されます。


可能な$options値の表( キーと値のペアの配列 ):

オプション詳細
ロケーション SOAPサーバーのURL。非WSDLモードでは必須です。 URLをオーバーライドするためにWSDLモードで使用できます。
ウリ SOAPサービスのターゲット名前空間。非WSDLモードでは必須です。
スタイル可能な値はSOAP_RPCまたはSOAP_DOCUMENTです。非WSDLモードでのみ有効です。
つかいます可能な値はSOAP_ENCODEDまたはSOAP_LITERALです。非WSDLモードでのみ有効です。
soap_version 可能な値はSOAP_1_1デフォルト )またはSOAP_1_2です。
認証 HTTP認証を有効にします。可能な値は、 SOAP_AUTHENTICATION_BASICデフォルト )またはSOAP_AUTHENTICATION_DIGESTです。
ログイン HTTP認証のユーザー名
パスワード HTTP認証のパスワード
proxy_host プロキシサーバーのURL
プロキシポートプロキシサーバーポート
proxy_login プロキシのユーザー名
proxy_password プロキシのパスワード
local_cert HTTPSクライアント証明書へのパス(認証用)
パスフレーズ HTTPSクライアント証明書のパスフレーズ
圧縮要求/応答を圧縮する。値はのビットマスクですSOAP_COMPRESSION_ACCEPTのいずれかでSOAP_COMPRESSION_GZIPまたはSOAP_COMPRESSION_DEFLATE 。例: SOAP_COMPRESSION_ACCEPT \| SOAP_COMPRESSION_GZIP
エンコーディング内部文字エンコーディング(TODO:可能な値)
トレース Boolean 、デフォルトはFALSEです。要求のトレースを有効にして、フォールトをバックトレースすることができます。 __getLastRequest()__getLastRequestHeaders()__getLastResponse()および__getLastResponseHeaders()使用を有効にします。
クラスマップ WSDL型をPHPクラスにマッピングします。値はキーとしてのWSDL型と値としてのPHPクラス名を持つ配列でなければなりません。
例外 ブール値。 SOAPエラー例外(タイプ 'SoapFault')。
connection_timeout SOAPサービスへの接続のタイムアウト(秒単位)。
タイプマップ型マッピングの配列。 :配列は、以下のキーを持つキー/値のペアであるべきtype_nametype_ns (名前空間URI)、 from_xml (コールバックが1つの文字列パラメータを受け付け)及びto_xml (コールバック受け入れる一つのオブジェクトパラメータ)。
cache_wsdl どのようにWSDLファイルをキャッシュするべきか(もしあれば)可能な値は、 WSDL_CACHE_NONEWSDL_CACHE_DISKWSDL_CACHE_MEMORYまたはWSDL_CACHE_BOTHです。
ユーザーエージェント User-Agentヘッダーで使用する文字列。
stream_context コンテキストのリソース。
特徴ビットマスクSOAP_SINGLE_ELEMENT_ARRAYSSOAP_USE_XSI_ARRAY_TYPESOAP_WAIT_ONE_WAY_CALLS
生き続けるPHPバージョン> = 5.4のみブール値。 Connection: Keep-Aliveヘッダー( TRUE )またはConnection: Closeヘッダー( FALSE )のいずれかを送信しFALSE
ssl_method PHPバージョン> = 5.5のみ )使用するSSL / TLSバージョン。可能な値は、 SOAP_SSL_METHOD_TLSSOAP_SSL_METHOD_SSLv2SOAP_SSL_METHOD_SSLv3またはSOAP_SSL_METHOD_SSLv23です。

32ビットPHPでの問題 32ビットPHPでは、 xs:long自動的に整数にキャストされる32ビットより大きい数値文字列は、32ビット制限に達し、 2147483647にキャストします。この問題を回避するには、文字列をfloatにキャストしてから__soapCall()に渡します。

WSDLモード

最初に、新しいSoapClientオブジェクトを作成し、URLをWSDLファイルに渡します。オプションで、オプションの配列も渡します。

// Create a new client object using a WSDL URL
$soap = new SoapClient('https://example.com/soap.wsdl', [
    # This array and its values are optional
    'soap_version' => SOAP_1_2,
    'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
    'cache_wsdl' => WSDL_CACHE_BOTH,
    # Helps with debugging
    'trace' => TRUE,
    'exceptions' => TRUE
]);

$soapオブジェクトを使用してSOAPメソッドを呼び出します。

$result = $soap->requestData(['a', 'b', 'c']);

非WSDLモード

これは、WSDLファイルと同様にNULLを渡し、 locationuriオプションを設定することを除いて、WSDLモードに似ています。

$soap = new SoapClient(NULL, [
    'location' => 'https://example.com/soap/endpoint',
    'uri' => 'namespace'
]);

クラスマップ

PHPでSOAPクライアントを作成する場合は、コンフィグレーション配列でclassmapキーを設定することもできます。このclassmapデフォルトの代わりに、WSDLで定義されたタイプは、実際のクラスにマップされるべきかを定義StdClass 。理由は、通常のStdClassにどのフィールドが設定されているかを推測するのではなく、これらのクラスでフィールドとメソッド呼び出しの自動補完を取得できるからです。

class MyAddress {
    public $country;
    public $city;
    public $full_name;
    public $postal_code; // or zip_code
    public $house_number;
}

class MyBook {
    public $name;
    public $author;

    // The classmap also allows us to add useful functions to the objects
    // that are returned from the SOAP operations.
    public function getShortDescription() {
        return "{$this->name}, written by {$this->author}";
    }
}

$soap_client = new SoapClient($link_to_wsdl, [
    // Other parameters
    "classmap" => [
        "Address" => MyAddress::class, // ::class simple returns class as string
        "Book" => MyBook::class,
    ]
]);

クラスマップを構成した後で、 AddressまたはBook型を返す特定の操作を実行するたびに、SoapClientはそのクラスをインスタンス化し、フィールドをデータで埋めて、操作呼び出しから返します。

// Lets assume 'getAddress(1234)' returns an Address by ID in the database
$address = $soap_client->getAddress(1234);

// $address is now of type MyAddress due to the classmap
echo $address->country;

// Lets assume the same for 'getBook(1234)'
$book = $soap_client->getBook(124);

// We can not use other functions defined on the MyBook class
echo $book->getShortDescription();

// Any type defined in the WSDL that is not defined in the classmap
// will become a regular StdClass object
$author = $soap_client->getAuthor(1234);

// No classmap for Author type, $author is regular StdClass.
// We can still access fields, but no auto-completion and no custom functions
// to define for the objects.
echo $author->name;

SOAP要求と応答のトレース

SOAPリクエストで送受信される内容を調べたいことがあります。次のメソッドは、要求と応答のXMLを返します。

SoapClient::__getLastRequest()
SoapClient::__getLastRequestHeaders()
SoapClient::__getLastResponse()
SoapClient::__getLastResponseHeaders()

たとえば、 ENVIRONMENT定数があり、この定数の値がDEVELOPMENTに設定されている場合、 getAddressの呼び出しによってエラーがスローされたときにすべての情報をエコーし​​たいとします。 1つの解決策は次のとおりです。

try {
    $address = $soap_client->getAddress(1234);
} catch (SoapFault $e) {
    if (ENVIRONMENT === 'DEVELOPMENT') {
        var_dump(
            $soap_client->__getLastRequestHeaders()
            $soap_client->__getLastRequest(),
            $soap_client->__getLastResponseHeaders(),
            $soap_client->__getLastResponse()
        );
    }
    ...
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow