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
があるため、どうにかしてパラメータに 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' プロパティがありません`