2016-08-30 6 views
1

Я пытался создать автоматическую запись в Google плюс из моей собственной CMS. Я пробовал API домена Google Plus. Но я всегда получаю Forbidden log, хотя я поместил правильную область видимости, и я установил это разрешение на моем Credential.Создать новое сообщение через google plus Domain API

Вот мой код

@RequestMapping(value = { "/callback" }, method = RequestMethod.GET) 
public String gplusCallback (
     @RequestParam(value = "code", required = false) String code, 
     WebRequest webRequest, 
     HttpServletRequest request, 
     HttpServletResponse response, 
     HttpSession session) throws GeneralSecurityException, IOException { 

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
      new NetHttpTransport(), 
      new JacksonFactory(), 
      CLIENT_ID, 
      CLIENT_SECRET, 
      SCOPE) 
      .setApprovalPrompt("force") 
      .setAccessType("offline").build(); 

    System.out.println("Codenya " + code); 
    GoogleTokenResponse tokenResponse = flow.newTokenRequest(code) 
      .setRedirectUri(REDIRECT_URI).execute(); 
    GoogleCredential credential = new GoogleCredential.Builder() 
     .setTransport(new NetHttpTransport()) 
     .setJsonFactory(new JacksonFactory()) 
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
      .setServiceAccountScopes(SCOPE) 
      .setServiceAccountUser(USER_EMAIL) 
      .setServiceAccountPrivateKeyFromP12File(
       new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)) 
      .build(); 


    Plus service = new Plus.Builder(new NetHttpTransport(), new JacksonFactory(), credential) 
      .setApplicationName("GNEWS.ID") 
      .build(); 
    com.google.api.services.plus.model.Person mePerson = service.people().get("me").execute(); 

    System.out.println("ID:\t" + mePerson.getId()); 
    System.out.println("Display Name:\t" + mePerson.getDisplayName()); 
    System.out.println("Image URL:\t" + mePerson.getImage().getUrl()); 
    System.out.println("Profile URL:\t" + mePerson.getUrl()); 

    try { 
     PlusDomains plusDomains = new PlusDomains.Builder(new NetHttpTransport(), new JacksonFactory(), credential) 
       .setApplicationName("GNEWS.ID") 
       .build(); 

     com.google.api.services.plusDomains.model.Person me = plusDomains.people().get(mePerson.getId()).execute(); 
     System.out.println("ID:\t" + me.getId()); 
     System.out.println("Profile URL:\t" + me.getUrl()); 
    }catch (IOException e) { 
     e.printStackTrace(); 
    } 

    System.out.println("G+ has been connected!"); 
    return "redirect:/cms/connection"; 
} 

А вот журнал

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden { 


"code" : 403, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Forbidden", 
    "reason" : "forbidden" 
    } ], 
    "message" : "Forbidden" 
} 
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146) 
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
    at io.gnews.cms.controller.GplusController.gplusCallback(GplusController.java:140) 

Я прочитал this, this и this. Но их дело находится на странице google Plus, тогда как мой - обычный пользователь. Вы не знаете, где я ошибся?

+0

Если адрес электронной почты аккаунта Google заканчивается на 'gmail.com', это не сработает. API Доменов работает только с учетными записями https://apps.google.com/, которые используют пользовательские домены. – abraham

+0

Как вы думаете, он будет работать, если я использую его для Google+ страницы? @abraham? – Kelimutu

+1

Ох, неважно. Теперь я знаю, что Google использует другой API для google plus page. – Kelimutu

ответ

0

У меня также была такая же проблема, когда вы отправляете авто по почте на стену пользователя G +.

несколько моментов, чтобы отметить в этом растворе:

  1. удалить разрешения, предоставленные ранее, посетите accounts.google.com
  2. запрос Область применения - Google_Service_Plus :: PLUS_ME, \ Google_Service_PlusDomains :: PLUS_STREAM_WRITE
  3. Я использовал Guzzle для запроса API REST API GooglePlusDomain для автоматического сообщения

для справки Я создал публичный сундук. В примере gist я использую php, google-api-php-client, yii2. если какая-либо проблема в ее решении, прокомментируйте. будет пытаться помочь

P.S. успешно реализованы и протестированы

 Смежные вопросы

  • Нет связанных вопросов^_^