2009-05-29 31 views
7

Tôi đang cố thực hiện cuộc gọi không phải WSDL bằng PHP (5.2.5) như thế này. Tôi chắc rằng tôi đang thiếu một cái gì đó đơn giản. Cuộc gọi này có một tham số, một chuỗi, được gọi là "múi giờ":Gọi xà phòng không phải là WSDL của PHP: làm thế nào để bạn chuyển các tham số?

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

Thanks cho bất kỳ lời đề nghị
-Dave

Trả lời

8

Cảm ơn. Dưới đây là ví dụ hoàn chỉnh hiện đang hoạt động:

$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') 
); 
0

Bạn có thể thử thêm một array() gọi xung quanh params của bạn như thế này:

$params = array('timezone'=>'ZULU'); 
$return = $client->__soapCall("getTimeZoneTime", 
    array($params), 
    array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime') 
); 

Tôi không thể kiểm tra điều này, nhưng bạn có thể.

+0

Đã thử, nhưng nó chuyển toàn bộ mảng thành param0. Vì vậy, không đi. –

4

Sự cố nằm ở đâu đó trong việc thiếu thông tin không gian tên trong tham số. Tôi đã sử dụng trường hợp đầu tiên của ví dụ của bạn vì nó gần nhất với những gì tôi nghĩ ra.

Nếu bạn thay đổi dòng:

array(new SoapParam('ZULU', 'timezone')), 

tới:

array(new SoapParam('ZULU', 'ns1:timezone')), 

nó sẽ cho bạn kết quả như bạn mong đợi.

8

@Dave C's solution không có tác dụng đối với tôi. Nhìn xung quanh tôi đã đưa ra một giải pháp khá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') 
); 

Hy vọng điều này có thể giúp ai đó.

Các vấn đề liên quan