2012-05-08 54 views
5

Điều tôi đang làm:Làm cách nào để nhận dữ liệu JSON hoặc XML API từ xa từ bên trong PHP và gán đối tượng trả về dưới dạng biến PHP?

Tôi đang viết chương trình tùy chỉnh bằng PHP để lấy dữ liệu qua API từ dịch vụ LMS trực tuyến. Ngay bây giờ, tôi đang cố gắng triển khai chức năng đăng nhập một lần khả dụng.

Phần này của chương trình cần thực thi yêu cầu GET đối với API khi nút được nhấp (qua js hoặc php POST hoặc?) Và cuối cùng chuyển hướng trình duyệt người dùng đến URL được cung cấp trong phản hồi từ API .

API cho phép lựa chọn phản hồi XML hoặc JSON và tôi muốn sử dụng JSON hơn nhưng sẽ thực hiện với XML nếu cần.

Từ tài liệu API vào việc yêu cầu:

Mọi yêu cầu được liệt kê trong tài liệu này nên chứa một content-type (XML hoặc JSON) trong tiêu đề yêu cầu và được bắt đầu bằng các cơ sở sau Uri: https://api.example.com/v1.svc

Ví dụ: Các Uri để có được một danh sách các người dùng trong định dạng XML sẽ là:

Content-Type: text/xml

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

Dưới đây là những gì tôi đang cố gắng để thực hiện:

Cách lấy LoginKey

Sau khi bạn có id người dùng Nếu bạn muốn đăng nhập, bạn cần thực hiện yêu cầu GET tới/người dùng/{user-id} sẽ trả lại thông tin về số người dùng. Bao gồm trong đây là một LoginKey mà bạn có thể sử dụng để chuyển hướng trình duyệt của người dùng đến.

ví dụ:

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

Phản hồi từ 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 tượng dữ liệu <LoginKey> là URL mà tôi cần phải cuối cùng chuyển hướng trình duyệt của người dùng để.

Tôi mới làm việc với API và đã thử một tấn phương pháp mà tôi không thể làm việc trước khi đăng. Nếu bạn biết làm thế nào để thực hiện điều này tôi sẽ rất biết ơn nếu bạn chia sẻ kiến ​​thức của bạn.

Cảm ơn.

Trả lời

2

Từ một HTML <form>, sử dụng một bài truyền thống (không AJAX) để một kịch bản PHP mà thực hiện điều này:

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 
    } 

} 

Nếu bạn muốn làm điều đó với JSON bạn có thể sử dụng file_get_contents() để có được những JSON thô từ một URL, sau đó sử dụng json_decode() để biến nó thành một đối tượng.

Ngoài ra, nếu bạn muốn làm điều đó thông qua AJAX, bạn sẽ phải lặp URL với PHP thay vì cố gắng để chuyển hướng, sau đó có Javascript làm chuyển hướng với window.location.href = '...'

+0

Cảm ơn bạn! Nút không phải là nút gửi biểu mẫu, vì vậy tôi có thể thay đổi để lấy và lấy dữ liệu nhận được trước mã của bạn ở trên không? – aethergy

+0

Tất nhiên, nếu ID người dùng đến từ chuỗi truy vấn thì hãy sử dụng '$ _GET ['userid']' thay vì '$ _POST ['userid']'. – MrCode

+0

Đã hoạt động hoàn hảo! Cảm ơn một lần nữa vì sự giúp đỡ của bạn. – aethergy

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