PHP SOAP Non-WSDL Call : 매개 변수를 어떻게 전달합니까?
-
06-09-2019 - |
문제
나는 이와 같이 PHP (5.2.5)에서 비 WSDL 호출을하려고합니다. 나는 단순한 것을 놓치고 있다고 확신합니다. 이 호출에는 "TimeZone"이라는 하나의 매개 변수 인 문자열이 있습니다.
$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')),
예상 한 결과를 제공해야합니다.
당신은 다른 것을 추가하려고 시도 할 수 있습니다 array()
다음과 같이 매개 변수를 호출하십시오.
$params = array('timezone'=>'ZULU' );
$return = $client->__soapCall("getTimeZoneTime",
array($params),
array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
나는 이것을 테스트 할 수 없지만 당신은 할 수 있습니다.
제휴하지 않습니다 StackOverflow