Domanda

Sto cercando di fare una chiamata non WSDL in PHP (5.2.5) come questo. Sono sicuro che mi manca qualcosa di semplice. Questa chiamata ha un parametro, una stringa, chiamato "fuso orario":

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

Grazie per qualsiasi suggerimento
-Dave

È stato utile?

Soluzione 2

Grazie. Ecco l'esempio completo che ora funziona:

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

Altri suggerimenti

soluzione

di @ Dave C non ha funzionato per me. Guardandomi intorno mi si avvicinò con un'altra soluzione:

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

Spero che questo possa aiutare qualcuno.

Il problema sta da qualche parte nella mancanza di informazioni namespace nel parametro. Ho usato il primo caso di vostro esempio dal momento che era più vicino a quello che mi è venuta.

Se si modifica la riga:

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

a:

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

dovrebbe dare il risultato che vi aspettavate.

Si potrebbe provare per aggiungere un'altra chiamata array() intorno ai vostri params in questo modo:

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

Non riesco a provare questo, ma si potrebbe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top