@qxeacwzd

Php SoapClient через wsdl — почему не передаются параметры?

https://www.onvif.org/ver10/search.wsdl
$this->client = new SoapClient($this->wsdl, array(
			'trace' => true, 
			'exceptions' => true, 
#			'cache_wsdl' => WSDL_CACHE_NONE,
			'ssl' => array(
				'verify_peer' => false,
				'allow_self_signed' => true
			),
			'soap_version' => SOAP_1_2,
		));
		$this->client->__setLocation($service);
		$params = array(
			'Scope' => array(
				'IncludedSources' => array('Token' => ''),
				'Extension'  => array(
					'CameraUuid' => $CameraUuid,
					'StartTime' => $StartTime,
					'StopTime' => $StopTime,
				),
			),
			'KeepAliveTime' => $KeepAlive
		);
		return $this->client->FindRecordings($params);

однако в wireshark я вижу такое body
<env:Body>
      <ns2:FindRecordings>
         <ns2:Scope>
            <ns1:IncludedSources>
               <ns1:Token />
            </ns1:IncludedSources>
            <ns1:Extension />
         </ns2:Scope>
         <ns2:KeepAliveTime>PT10S</ns2:KeepAliveTime>
      </ns2:FindRecordings>
   </env:Body>

в аналогичном же случае с этой wsdl
https://www.onvif.org/ver10/media/wsdl/media.wsdl
такая строчка без проблем передаёт параметры методу
return $this->client->GetStreamUri(array(
			'StreamSetup' => array(
				'Stream' => $stream_type,
				'Transport'  => array(
					'Protocol' => $protocol,
				),
			),
			'ProfileToken' => $profile
		));

<env:Body>
      <ns2:GetStreamUri>
         <ns2:StreamSetup>
            <ns1:Stream>RTP-Unicast</ns1:Stream>
            <ns1:Transport>
               <ns1:Protocol>TCP</ns1:Protocol>
            </ns1:Transport>
         </ns2:StreamSetup>
         <ns2:ProfileToken>1892abb3d4c0e916b79a2fe02f338069</ns2:ProfileToken>
      </ns2:GetStreamUri>
   </env:Body>

Никак не могу понять, почему в первом случае параметры не передаются нормально, а во втором - передаются?
  • Вопрос задан
  • 627 просмотров
Пригласить эксперта
Ответы на вопрос 1
primipilus
@primipilus
Coder
Попробуйте эту часть
array(
          'CameraUuid' => $CameraUuid,
          'StartTime' => $StartTime,
          'StopTime' => $StopTime,
        ),

в SoapVar обернуть
Вообще почитайте про SoapVar. Этот класс поможет явно указать тип данных
php.net/manual/ru/class.soapvar.php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы