PHPソープ非WSDLコール:どのようにパラメータを渡すのですか?

StackOverflow https://stackoverflow.com/questions/928169

  •  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')
);

私はこれをテストすることはできませんが、可能性ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top