pregunta de Noob.¿Cómo consumir un servicio web con estado usando la clase SoapClient de PHP?
Estoy desarrollando un sitio web PHP que consume un servicio web con estado. Básicamente, el "flujo de control" de mi sitio web es el siguiente:
- Al usuario se le muestra una página.
- El usuario realiza una acción.
- El servidor del sitio web realiza una solicitud al servicio web, utilizando la entrada del usuario como parámetros.
- El servidor del servicio web ejecuta la solicitud y pasa del estado A al estado B en el proceso.
- El servidor del sitio web redirige al usuario a otra página, y volver al paso 1.
Mi problema es que el sitio Web pierde la pista del estado del servicio Web entre las peticiones. ¿Cómo hago que el sitio web realice un seguimiento del estado del servicio web? Estoy usando la clase estándar SoapClient
de PHP.
He intentado serializar el objeto SoapClient
en una variable de sesión:
# ws_client.php
<?php
function get_client()
{
if (!isset($_SESSION['client']))
$_SESSION['client'] = new SoapClient('http://mydomain/MyWS/MyWS.asmx?WSDL', 'r');
return $_SESSION['client'];
}
function some_request($input1, $input2)
{
$client = get_client();
$params = new stdClass();
$params['input1'] = $input1;
$params['input2'] = $input2;
return $client->SomeRequest($params)->SomeRequestResult;
}
function stateful_request($input)
{
$client = get_client();
$params = new stdClass();
$params['input'] = $input;
return $client->StatefulRequest($params)->StatefulRequestResult;
}
?>
# page1.php
<?php
session_start();
$_SESSION['A'] = some_request($_POST['input1'], $_POST['input2']);
session_write_close();
header('Location: page2.php');
?>
# page2.php
<?php
session_start();
echo $_SESSION['A']; // works correctly
echo stateful_request($_SESSION['A']); // fails
session_write_close();
?>
Pero no funciona. ¿Qué pasa con mi código?
@MK: ¡Muchas gracias! – pyon