2012-06-24 26 views
5

Tôi đang sử dụng phương thức ClientLogin và cURL để đăng nhập vào API của Google. Điều này hoạt động tốt và tôi nhận được một Mã thông báo để sử dụng thêm. bây giờ tôi có thể truy vấn docs.google.com bằng cách sử dụngĐăng nhập vào API Google Spreadshet bằng ClientLogin và PHP/cURL

 $curl = curl_init(); 

     $headers = array(
      "Authorization: GoogleLogin auth=" . $auth, 
      "GData-Version: 3.0", 
     ); 

     curl_setopt($curl, CURLOPT_URL, "https://docs.google.com/feeds/default/private/full"); 
     curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
     curl_setopt($curl, CURLOPT_POST, false); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

     $response = curl_exec($curl); 
     curl_close($curl); 

này hoạt động tốt và tôi nhận được một danh sách của tất cả các tài liệu sẵn có trong tài liệu google của tôi chiếm. Nhưng nếu tôi cố gắng cùng một truy vấn để spreadsheets.google.com với URL lấy từ api documentation:

https://spreadsheets.google.com/feeds/spreadsheets/private/full 

tôi nhận được một lỗi 401 nói rằng token sử dụng không hợp lệ. Tôi đang sử dụng cùng một mã thông báo và truy vấn trong cả hai trường hợp. Tôi có cần mã thông báo khác cho api bảng tính google không?

Edit: Đây là cách tôi yêu cầu Token:

 $clientlogin_url = "https://www.google.com/accounts/ClientLogin"; 
     $clientlogin_post = array(
      "accountType" => "HOSTED_OR_GOOGLE", 
      "Email" => "my email", 
      "Passwd" => "my password", 
      "service" => "writely", 
      "source" => "my application name" 
     ); 

     $curl = curl_init($clientlogin_url); 

     curl_setopt($curl, CURLOPT_POST, true); 
     curl_setopt($curl, CURLOPT_POSTFIELDS, $clientlogin_post); 
     curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

     $response = curl_exec($curl); 

     preg_match("/Auth=([a-z0-9_-]+)/i", $response, $matches); 
     $auth = $matches[1]; 
     curl_close($curl); 
+0

token cùng nên được tốt, nhưng nhận xét ra $ curl = curl_init(); và sử dụng cùng một đối tượng $ curl cho spreadsheets.google.com. Hãy cho tôi biết nếu điều đó đã giúp –

+0

không may điều này không có hiệu lực – Marco

+0

Ah, tôi nghĩ bạn cần xác thực cho tất cả các miền. Tôi nghĩ rằng google xử lý docs.google.com và bảng tính. google .com là hai dịch vụ khác nhau yêu cầu auths của riêng họ. Bạn có thể nhanh chóng kiểm tra bằng cách -> 1. lấy danh sách tài liệu google, lưu auth 2. sử dụng cùng một auth cho bảng tính, nắm bắt lỗi, và 3. sử dụng cùng một auth cho google docs một lần nữa, nếu điều này hoạt động, sau đó của chúng tôi giả định là đúng. –

Trả lời

6

Câu trả lời ngắn - Có. Bạn cần tạo các mã thông báo khác nhau cho các dịch vụ khác nhau. Tên dịch vụ bạn chuyển vào để truy xuất mã thông báo auh khác nhau trong từng trường hợp. Xem ở đây để biết thêm chi tiết - https://developers.google.com/gdata/faq

Ví dụ từ các tài liệu req cho các bảng tính sẽ

$clientlogin_post = array(
            "accountType" => "HOSTED_OR_GOOGLE", 
            "Email" => "my email", 
            "Passwd" => "my password", 
            "service" => "wise", 
            "source" => "my application name" 
       ); 
+0

Cảm ơn, liên kết faq đó là kho báu ẩn giấu :) – aorcsik

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