私はPHPコードの作成に慣れていますが、オブジェクト指向コーディングを使用することはあまりありません。今度は(クライアントとして)SOAPと対話する必要があり、構文を正しく取得できません。SoapClientクラスを使用して新しい接続を適切に設定できるようにするWSDLファイルがあります。しかし、実際に正しい呼び出しを行ってデータを返すことができません。次の(簡略化した)データを送信する必要があります。
- 連絡先ID
- 連絡先
- 概要
- 量
WSDLドキュメントには2つの関数が定義されていますが、必要なのは1つだけです(以下の「FirstFunction」)。以下は、使用可能な関数とタイプに関する情報を取得するために実行するスクリプトです。
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
そして、これが生成する出力です:
array(
[0] => "FirstFunction Function1(FirstFunction $parameters)",
[1] => "SecondFunction Function2(SecondFunction $parameters)",
);
array(
[0] => struct Contact {
id id;
name name;
}
[1] => string "string description"
[2] => string "int amount"
}
データでFirstFunctionを呼び出したいとしましょう:
- 連絡先ID:100
- 連絡先名:ジョン
- 概要:油のバレル
- 金額:500
正しい構文は何でしょうか?私はあらゆる種類のオプションを試してきましたが、石鹸の構造は非常に柔軟であるため、これを行う方法は非常にたくさんあります。マニュアルからそれを理解できませんでした...
更新1:MMKから試したサンプル:
$client = new SoapClient("http://example.com/webservices?wsdl");
$params = array(
"id" => 100,
"name" => "John",
"description" => "Barrel of Oil",
"amount" => 500,
);
$response = $client->__soapCall("Function1", array($params));
しかし、私はこの応答を受け取ります:Object has no 'Contact' property
。の出力を見るとわかるようにgetTypes()
、struct
呼び出されたContact
があるので、何らかの方法でパラメーターに連絡先データが含まれていることを明確にする必要があると思いますが、問題は次のとおりです。
更新2:これらの構造も試しましたが、同じエラーが発生しました。
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
と同様:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
どちらの場合もエラー:オブジェクトに 'Contact'プロパティがありません `