I am trying to generate OAuth access token for my app to fetch notes from Evernote. Below is the Java code for it
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());
}
}
}
This code is written with the following github code as reference https://github.com/evernote/evernote-sdk-java/blob/master/sample/oauth/src/main/webapp/index.jsp
Below is the exception which I get while retrieving the access token
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)
The callback URL has to be your URL where a user is redirected to after your app is authorized. When the user is redirected back, you should be able to obtain an OAuth verifier from the URL parameters while it seems that the verifier is hard-coded in your code. See also this doc about authentication.