2016-12-07 6 views
0

Я пытаюсь создать токен доступа OAuth для своего приложения, чтобы извлекать заметки из Evernote. Ниже приведен код Java для этогоИсключение при извлечении токена доступа OAuth с помощью scribe

public class EverNoteOauthGenerator { 
    public static void main(String[] args) throws EDAMUserException, EDAMSystemException, TException { 
     Class<? extends EvernoteApi> providerClass = EvernoteApi.Sandbox.class; 
     /** 
     if (EVERNOTE_SERVICE == EvernoteService.PRODUCTION) { 
      providerClass = org.scribe.builder.api.EvernoteApi.class; 
     } **/ 

     // Generate Request token & Request secret 
     String CONSUMER_KEY = "******"; 
     String CONSUMER_SECRET = "******"; 
     String cbUrl = "https://sandbox.evernote.com/OAuth.action?oauth_token=****.158D9C1C696.6C6F63616C686F7374.089C889A2F3D722B9ECC231961A3BF49"; 
     OAuthService service = new ServiceBuilder() 
      .provider(providerClass) 
      .apiKey(CONSUMER_KEY) 
      .apiSecret(CONSUMER_SECRET) 
      .callback(cbUrl) 
      .build(); 

     Token scribeRequestToken = service.getRequestToken(); 
     //String requestToken = scribeRequestToken.getToken(); 
     //String requestTokenSecret = scribeRequestToken.getSecret(); 

     String authUrl = EvernoteService.SANDBOX.getAuthorizationUrl(scribeRequestToken.getToken()); 

     // Generate OAuth Access token 
     Token scribeRequestToken = new Token(requestToken, requestTokenSecret); 

     Verifier scribeVerifier = new Verifier("6E5879A40CBEB7CCF77507BE8FE905AA"); 
     Token scribeAccessToken = service.getAccessToken(scribeRequestToken, scribeVerifier); 
     EvernoteAuth evernoteAuth = EvernoteAuth.parseOAuthResponse(EvernoteService.SANDBOX, scribeAccessToken.getRawResponse()); 
     String accessToken = evernoteAuth.getToken(); 
     String noteStoreUrl = evernoteAuth.getNoteStoreUrl(); 
     System.out.println("Access token :: " + accessToken); 

     evernoteAuth = new EvernoteAuth(EvernoteService.SANDBOX, accessToken); 
     NoteStoreClient noteStoreClient = new ClientFactory(evernoteAuth).createNoteStoreClient(); 

     List<Notebook> notebooks = noteStoreClient.listNotebooks(); 
     for (Notebook notebook : notebooks) { 
      System.out.println("Notebook: " + notebook.getName()); 
     } 
    } 
} 

Этот код записывается со следующим кодом GitHub в качестве ссылки https://github.com/evernote/evernote-sdk-java/blob/master/sample/oauth/src/main/webapp/index.jsp

Ниже исключение, которое я получаю при получении доступа токенов

Exception in thread "main" org.scribe.exceptions.OAuthException: Response body is incorrect. Can't extract token and secret from this 

at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:41) 
    at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:27) 
    at org.scribe.oauth.OAuth10aServiceImpl.getAccessToken(OAuth10aServiceImpl.java:82) 
    at com.evernote.auth.EverNoteOauthGenerator.main(EverNoteOauthGenerator.java:51) 

ответ

2

URL-адрес обратного вызова должен быть вашим URL-адресом, где пользователь перенаправляется после авторизации вашего приложения. Когда пользователь перенаправляется обратно, вы должны иметь возможность получить верификатор OAuth из параметров URL, в то время как кажется, что верификатор жестко закодирован в вашем коде. См. Также this doc об аутентификации.

+0

Вначале я пытаюсь как проложить первую программу. Какой URL-адрес обратного вызова можно настроить в этом случае? –

+0

Как насчет localhost? https://dev.evernote.com/doc/articles/authentication.php#temporary_token_request – kentaro

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