2012-11-06 33 views
5

Ok! Khi tiêu đề cho biết tôi đang gặp một số vấn đề nghiêm trọng với xác thực khi sử dụng Tài khoản dịch vụ. Vì vậy, chúng ta hãy bắt đầu từ đầu vì nó cảm thấy rằng tôi đã thử tất cả mọi thứ!Khoản trợ cấp không hợp lệ khi gọi Java Google Drive Api bằng Tài khoản dịch vụ

Dịch vụ thiết lập để trên:

enter image description here

Ổ SDK thiết lập:

enter image description here

Dịch vụ Tài khoản Api truy cập:

truy cập khách hàng

enter image description here

Api như đã mô tả ở đây: http://support.google.com/a/bin/answer.py?hl=en&answer=162106

enter image description here

Mã:

public static void callSpreadsheetApi() { 

     GoogleCredential credential = null; 
     try { 
      credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) 
        .setJsonFactory(JSON_FACTORY)      
        .setServiceAccountId("2363XXXXXX19.apps.googleusercontent.com")      
        .setServiceAccountScopes(DriveScopes.DRIVE, "https://spreadsheets.google.com/feeds", "https://docs.google.com/feeds") 
        .setServiceAccountPrivateKeyFromP12File(new File("/Users/stevesmith/Desktop/c02e064935d33c3389f6ab1dbf9ea747a5bdaac5-privatekey.p12")) 
        .setServiceAccountUser("[email protected]") 
        .build(); 

     } catch (GeneralSecurityException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


     Drive drive = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).build(); 

     com.google.api.services.drive.model.File file = new com.google.api.services.drive.model.File(); 
     file.setTitle("test"); 
     file.setMimeType("application/vnd.google-apps.spreadsheet"); 
     Drive.Files.Insert insert = null; 
     try { 
      insert = drive.files().insert(file); 
      file = insert.execute(); 
     } catch (IOException e) { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } 
} 

Trường hợp ngoại lệ:

[info] play - Application started (Dev) 
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request 
{ 
    "error" : "invalid_grant" 
} 
    at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:103) 
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:303) 
    at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:323) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:340) 
    at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:505) 
    at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:266) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:857) 
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.execute(GoogleJsonResponseException.java:182) 
    at com.google.api.client.googleapis.services.GoogleClient.executeUnparsed(GoogleClient.java:279) 
    at com.google.api.client.http.json.JsonHttpRequest.executeUnparsed(JsonHttpRequest.java:207) 
    at com.google.api.services.drive.Drive$Files$Insert.executeUnparsed(Drive.java:307) 
    at com.google.api.services.drive.Drive$Files$Insert.execute(Drive.java:331) 
    at services.GoogleService.callSpreadsheetApi(GoogleService.java:236) 
    at controllers.Application.index(Application.java:26) 
    at Routes$$anonfun$routes$1$$anonfun$apply$1$$anonfun$apply$2.apply(routes_routing.scala:32) 
    at Routes$$anonfun$routes$1$$anonfun$apply$1$$anonfun$apply$2.apply(routes_routing.scala:32) 
    at play.core.Router$HandlerInvoker$$anon$5$$anon$1.invocation(Router.scala:1090) 
    at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:33) 
    at play.core.j.JavaAction$class.apply(JavaAction.scala:74) 
    at play.core.Router$HandlerInvoker$$anon$5$$anon$1.apply(Router.scala:1089) 
    at play.core.ActionInvoker$$anonfun$receive$1$$anonfun$6.apply(Invoker.scala:126) 
    at play.core.ActionInvoker$$anonfun$receive$1$$anonfun$6.apply(Invoker.scala:126) 
    at play.utils.Threads$.withContextClassLoader(Threads.scala:17) 
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:125) 
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:115) 
    at akka.actor.Actor$class.apply(Actor.scala:318) 
    at play.core.ActionInvoker.apply(Invoker.scala:113) 
    at akka.actor.ActorCell.invoke(ActorCell.scala:626) 
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:197) 
    at akka.dispatch.Mailbox.run(Mailbox.scala:179) 
    at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:516) 
    at akka.jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:259) 
    at akka.jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975) 
    at akka.jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1479) 
    at akka.jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104) 

Tôi đã duyệt web trong 3 giờ qua và tất cả những người PHP và Python dường như đã giải quyết nó bằng cách đặt thời gian chính xác trên máy chủ sản xuất Linux của họ. Tôi đang ngồi trong MacOS Snow Leopard và tôi đã thử với thiết lập thời gian nhưng không có may mắn ở đó. Tôi cũng đã cố tạo một khóa mới. Thay đổi phạm vi. Thêm các ServiceAccountUsers khác nhau, v.v. Tôi có thể thiếu một số phần quan trọng hoặc có thể nó siêu sao? Tôi đang hết ý tưởng!

Trả lời

5

Bạn có thử phạm vi duy nhất:

.setServiceAccountScopes("https://www.googleapis.com/auth/drive") 

.setServiceAccountId("23636812XXXX.apps.googleusercontent.com") 

nên

.setServiceAccountId("[email protected]nt.com") 

Phạm vi khác được yêu cầu cho Spreadsheets, họ không bắt buộc (chưa).

cũng thấy điều này có liên quan question

+0

Hmm nhận được một com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 Máy chủ nội Lỗi { "code": 500, "lỗi": [{ "miền": "toàn cầu", "message": "lỗi nội bộ", "lý do": "internalError" }], "message": "Internal error" } – jakob

+0

một ngày mới, một lỗi mới . Bạn có nhận được lỗi đó mỗi lần không? –

+0

haha ​​yep! Mỗi lần! Nhưng nó hoạt động với analytics =) – jakob

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