PHPソープ非WSDLコール:どのようにパラメータを渡すのですか?
-
06-09-2019 - |
質問
私はこのようなPHP(5.2.5)で非WSDLの呼び出しを行うためにしようとしています。私は、単純な何かが欠けてると確信しています。
:この呼び出しにはパラメータが1つ、「タイムゾーン」と呼ばれる文字列を、持っています $URL = 'http://www.nanonull.com/TimeService/TimeService.asmx';
$client = new SoapClient(null, array(
'location' => $URL,
'uri' => "http://www.Nanonull.com/TimeService/",
'trace' => 1,
));
// First attempt:
// FAILS: SoapFault: Object reference not set to an instance of an object
$return = $client->__soapCall("getTimeZoneTime",
array(new SoapParam('ZULU', 'timezone')),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
// Second attempt:
// FAILS: Generated soap Request uses "param0" instead of "timezone"
$return = $client->__soapCall("getTimeZoneTime",
array('timezone'=>'ZULU' ),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
任意の提案をありがとう
-Dave
解決 2
ありがとう。ここで機能するようになりました完全な例があります:
$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx';
$client = new SoapClient(null, array(
'location' => $URL,
'uri' => "http://www.Nanonull.com/TimeService/",
'trace' => 1,
));
$return = $client->__soapCall("getTimeZoneTime",
array(new SoapParam('ZULU', 'ns1:timezone')),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
他のヒント
@Dave Cのソリューションは、私のために動作しませんでした。周り見て、私は別の解決策を思い付います:
$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx';
$client = new SoapClient(null, array(
'location' => $URL,
'uri' => "http://www.Nanonull.com/TimeService/",
'trace' => 1,
));
$return = $client->__soapCall("getTimeZoneTime",
array(new SoapParam(new SoapVar('ZULU', XSD_DATETIME), 'timezone')),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
が、これは誰かに役立つことを願っています。
問題は、どこかのパラメータで名前空間情報の欠如です。それは私が思いついたものに最も近かったので、私はあなたの例の最初のケースを使用します。
あなたが行を変更した場合:
array(new SoapParam('ZULU', 'timezone')),
と
array(new SoapParam('ZULU', 'ns1:timezone')),
それはあなたが期待される結果を与える必要があります。
あなたは、このようなあなたのparamsの周りに別のarray()
呼び出しを追加しようとすることができます:
$params = array('timezone'=>'ZULU' );
$return = $client->__soapCall("getTimeZoneTime",
array($params),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
私はこれをテストすることはできませんが、可能性ます。
所属していません StackOverflow