2012-05-08 5 views
5

Lo que estoy haciendo:¿CÓMO OBTENER datos remotos de API JSON o XML desde PHP y asignar un objeto de retorno como variable de PHP?

Estoy escribiendo un programa personalizado en PHP que extrae datos a través de la API de un servicio en línea LMS. En este momento, estoy tratando de implementar la funcionalidad de inicio de sesión único disponible.

Esta parte del programa necesita ejecutar una solicitud GET a la API cuando se hace clic en un botón (mediante js o php POST?) Y finalmente redirige el navegador de los usuarios a una URL que se proporciona en la respuesta de la API .

La API permite la elección de una respuesta XML o JSON y preferiría usar JSON pero me las arreglaré con XML si es necesario.

A partir de la documentación de la API en la que realizan solicitudes:

Todas las solicitudes que figuran en este documento debe contener un contenido de tipo (XML o JSON) en el encabezado de la solicitud y llevar el prefijo del base siguiendo Uri: https://api.example.com/v1.svc

Por ej. El URI para obtener una lista de usuarios en formato XML sería:

Content-Type: text/xml

GET https://api.example.com/v1.svc/users?apikey=MY-KEY&source=MY-APP

A continuación se muestra lo que estoy tratando de implementar:

¿Cómo obtener el LoginKey

de un usuario una vez que tenga el identificador de usuario que y Si desea iniciar sesión, debe realizar una solicitud GET a/users/{user-id}, que devolverá información sobre al usuario. Incluido en esto es un LoginKey que puede utilizar para redirigir el navegador del usuario a.

por ejemplo.

GET https://api.example.com/v1.svc/users/USER-ID?apikey=YOUR_API_KEY&source=sampleapp

Respuesta de API:

<User> 
    <Id>abc12345678</Id> 
    <UserName>[email protected]</UserName> 
    <FirstName>Rich</FirstName> 
    <LastName>Chetwynd</LastName> 
    ..... 
    <LoginKey>https://demo.example.com/login.aspx?loginkey=xxxzzzyyy777222</LoginKey> 
</User> 

Los datos del objeto <LoginKey> es la URL, que necesito volver a dirigir en última instancia, el navegador del usuario.

Soy nuevo en el trabajo con API y he intentado una tonelada de métodos que no pude conseguir antes de publicar. Si sabes cómo lograr esto, te estaría muy agradecido si compartieras tu conocimiento.

Gracias.

Respuesta

2

Desde un HTML <form>, utilice un correo tradicional (no AJAX) a un script PHP que hace esto:

if(isset($_POST['userid'])) 
{ 
    $userId = (int)$_POST['userid']; 

    $obj = simplexml_load_file('https://api.xxx.com/v1.svc/users/' . $userId . '?apikey=YOUR_API_KEY&source=sampleapp'); 

    if($obj && isset($obj->LoginKey)) 
    { 
     $loginKey = $obj->LoginKey; 

     header('Location: ' . $loginKey); 
    } 
    else 
    { 
     // failed to load the xml 
    } 

} 

Si quiere hacerlo con JSON puede utilizar file_get_contents() para obtener el JSON en bruto de una URL, luego use json_decode() para convertirlo en un objeto.

Además, si desea hacerlo a través de AJAX, que tendrá que hacerse eco de la URL con PHP en lugar de tratar de reorientar, y luego tener Javascript hacer la redirección con window.location.href = '...'

+0

Gracias! El botón no es un botón de envío de formulario, así que ¿puedo cambiar para obtener y obtener los datos de obtención antes que tu código anterior? – aethergy

+0

Por supuesto, si el ID de usuario proviene de la cadena de consulta, entonces use '$ _GET ['userid']' en lugar de '$ _POST ['userid']'. – MrCode

+0

¡Funcionó a la perfección! De nuevo, gracias por tu ayuda. – aethergy

Cuestiones relacionadas