2012-05-08 2 views
5

Quello che sto facendo:Come OTTENERE dati JSON o XML remoti da PHP e assegnare un oggetto restituito come variabile PHP?

Sto scrivendo un programma personalizzato in PHP che estrae i dati tramite API da un servizio on-line LMS. Al momento, sto cercando di implementare la funzionalità single-sign-on disponibile.

Questa parte del programma deve eseguire una richiesta GET all'API quando si fa clic su un pulsante (tramite js o php POST o?) E infine reindirizzare il browser degli utenti a un URL fornito nella risposta dall'API .

L'API consente la scelta di una risposta XML o JSON e preferirei usare JSON ma, se necessario, si accontenterà di XML.

Dalla documentazione API su rendendo richieste:

Tutte le richieste elencati in questo documento dovrebbe contenere un tipo di contenuto (XML o JSON) nell'intestazione della richiesta ed essere preceduto dal di base seguente Uri: https://api.example.com/v1.svc

Es. L'Uri per ottenere un elenco di utenti in formato XML sarebbe:

Content-Type: text/xml

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

Qui di seguito è quello che sto cercando di attuare:

Come ottenere il LoginKey di un utente

una volta che hai l'ID utente che y Se vuoi iscriverti devi fare una richiesta GET a/users/{user-id} che restituirà l'informazione su all'utente. Incluso in questo è un LoginKey che è possibile utilizzare per reindirizzare il browser dell'utente a .

es.

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

Risposta da 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> 

I dati oggetto <LoginKey> è l'URL che ho bisogno di reindirizzare in ultima analisi, il browser dell'utente a.

Sono nuovo a lavorare con le API e ho provato un sacco di metodi che non sono riuscito a lavorare prima di postare. Se sai come realizzarlo ti sarei molto grato se condividessi le tue conoscenze.

Grazie.

risposta

2

Da un HTML <form>, utilizzare un posta tradizionale (non AJAX) per uno script PHP che fa questo:

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 
    } 

} 

Se si vuole fare con JSON è possibile utilizzare file_get_contents() per ottenere il JSON crudo di un URL, quindi utilizzare json_decode() per trasformarlo in un oggetto.

Inoltre, se si desidera farlo tramite la tecnologia AJAX, si dovrà risuonare l'URL con PHP invece di cercare di reindirizzare, poi che JavaScript sia fare il redirect con window.location.href = '...'

+0

Grazie! Il pulsante non è un pulsante di invio modulo, quindi posso modificare per ottenere e ottenere i dati prima del codice sopra? – aethergy

+0

Ovviamente, se l'ID utente proviene da querystring, allora usa '$ _GET ['userid']' invece di '$ _POST ['userid']'. – MrCode

+0

ha funzionato perfettamente! Grazie ancora per il vostro aiuto. – aethergy