我想将QuickBooks api集成到我们的Android应用程序中。
以下链接适用于Java Web Application,但我想在我的android应用程序中使用此OauthHelper
类。
我也看到了Intuit的开发者网站,但它没有帮助,
是否有新方法或包含OauthHelper
类的任何最新jar文件?
答案 0 :(得分:0)
JAR文件
您必须添加此jar ipp-v3-java-devkit-2.3.2-jar-with-dependencies ,您可以从此link下载。
OauthHelper Class
public class OauthHelper {
public static String REQUEST_TOKEN_URL;
public static String ACCESS_TOKEN_URL;
public static String AUTHORIZE_URL;
public OauthHelper() {
REQUEST_TOKEN_URL = Constants.OAUTH_URL + "/oauth/v1/get_request_token";
ACCESS_TOKEN_URL = Constants.OAUTH_URL + "/oauth/v1/get_access_token";
AUTHORIZE_URL = Constants.APPCENTER_URL + "/Connect/Begin";
}
public void getDynamicConsumer() {
try {
final String apptoken = Constants.APP_TOKEN;
final URL url = new URL(Constants.OAUTH_URL
+ "/oauth/v1/create_consumer?appToken=" + apptoken);
final HttpURLConnection httpconnection = (HttpURLConnection) url
.openConnection();
httpconnection.connect();
StringBuffer responseBody = null;
int read = 0;
final byte buffer[] = new byte[8192];
String consumerret = "";
String consumerkeytoken = "";
String consumerkeysecret = "";
try {
final InputStream responseBodyStream = httpconnection
.getInputStream();
responseBody = new StringBuffer();
while ((read = responseBodyStream.read(buffer)) != -1) {
responseBody.append(new String(buffer, 0, read));
}
responseBodyStream.close();
consumerret = responseBody.toString();
final String[] consumerkey = consumerret.split("&");
for (int i = 0; i < consumerkey.length; i++) {
final String[] currentElements = consumerkey[i].split("=");
if (currentElements[0].equalsIgnoreCase("oauth_token")) {
consumerkeytoken = currentElements[1];
} else if (currentElements[0]
.equalsIgnoreCase("oauth_token_secret")) {
consumerkeysecret = currentElements[1];
}
}
} catch (Exception ex1) {
final int httpRespCode = httpconnection.getResponseCode();
try {
final InputStream es = httpconnection.getErrorStream();
final StringBuffer errorBody = new StringBuffer();
while ((read = es.read(buffer)) != -1) {
errorBody.append(new String(buffer, 0, read));
}
} catch (Exception ex2) {
ex2.printStackTrace();
}
}
} catch (Exception ex3) {
ex3.printStackTrace();
}
}
public Map<String, String> getRequestTokenSignPost() {
String authURL = null;
OAuthProvider provider = createProvider();
String consumerkey = Constants.CONSUMER_KEY;
String consumersecret = Constants.CONSUMER_SECRET;
String callback_url = Constants.CALLBACK_URL;// WebUtils.OAUTH_CALLBACK_URL;
OAuthConsumer ouathconsumer = new DefaultOAuthConsumer(consumerkey,
consumersecret);
try {
HttpParameters additionalParams = new HttpParameters();
additionalParams.put("oauth_callback",
URLEncoder.encode(callback_url, "UTF-8"));
ouathconsumer.setAdditionalParameters(additionalParams);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String requestret = "";
String requestToken = "";
String requestTokenSecret = "";
try {
String signedRequestTokenUrl = ouathconsumer
.sign(REQUEST_TOKEN_URL);
URL url;
url = new URL(signedRequestTokenUrl);
HttpURLConnection httpconnection = (HttpURLConnection) url
.openConnection();
httpconnection.setRequestMethod("GET");
httpconnection
.setRequestProperty("Content-type", "application/xml");
httpconnection.setRequestProperty("Content-Length", "0");
if (httpconnection != null) {
BufferedReader rd = new BufferedReader(new InputStreamReader(
httpconnection.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
requestret = sb.toString();
}
String[] requestTokenSections = requestret.split("&");
for (int i = 0; i < requestTokenSections.length; i++) {
String[] currentElements = requestTokenSections[i].split("=");
if (currentElements[0].equalsIgnoreCase("oauth_token")) {
requestToken = currentElements[1];
} else if (currentElements[0]
.equalsIgnoreCase("oauth_token_secret")) {
requestTokenSecret = currentElements[1];
}
}
Map<String, String> requesttokenmap = new HashMap<String, String>();
try {
authURL = provider.retrieveRequestToken(ouathconsumer,
callback_url);
} catch (OAuthNotAuthorizedException e) {
e.printStackTrace();
}
ouathconsumer.setTokenWithSecret(ouathconsumer.getToken(),
ouathconsumer.getTokenSecret());
requesttokenmap.put("requestToken", requestToken);
requesttokenmap.put("requestTokenSecret", requestTokenSecret);
requesttokenmap.put("authURL", authURL);
return requesttokenmap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static OAuthProvider createProvider() {
OAuthProvider provider = new DefaultOAuthProvider(
OauthHelper.REQUEST_TOKEN_URL, OauthHelper.ACCESS_TOKEN_URL,
OauthHelper.AUTHORIZE_URL);
return provider;
}
public String getAuthorizeURL(String requestToken, String requestTokenSecret) {
String authorizeURL = "";
try {
authorizeURL = AUTHORIZE_URL + "?oauth_token=" + requestToken;
} catch (Exception e) {
e.printStackTrace();
}
return authorizeURL;
}
public Map<String, String> getAccessToken(String verifierCode,
String requestToken, String requestTokenSecret) {
String consumerkey = Constants.CONSUMER_KEY;
String consumersecret = Constants.CONSUMER_SECRET;
String accessToken = "";
String accessTokenSecret = "";
try {
OAuthConsumer consumer = new DefaultOAuthConsumer(consumerkey,
consumersecret);
consumer.setTokenWithSecret(requestToken, requestTokenSecret);
HttpParameters additionalParams = new HttpParameters();
additionalParams.put("oauth_callback", "oob");
additionalParams.put("oauth_verifier", verifierCode);
consumer.setAdditionalParameters(additionalParams);
String signedURL = consumer.sign(ACCESS_TOKEN_URL);
URL url = new URL(signedURL);
HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setRequestProperty("Content-type", "application/xml");
urlConnection.setRequestProperty("Content-Length", "0");
String accesstokenresponse = "";
if (urlConnection != null) {
BufferedReader rd = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
accesstokenresponse = sb.toString();
}
if (accesstokenresponse != null) {
String[] responseElements = accesstokenresponse.split("&");
if (responseElements.length > 1) {
accessToken = responseElements[1].split("=")[1];
accessTokenSecret = responseElements[0].split("=")[1];
Map<String, String> accesstokenmap = new HashMap<String, String>();
accesstokenmap.put("accessToken", accessToken);
accesstokenmap.put("accessTokenSecret", accessTokenSecret);
return accesstokenmap;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
常量类
public class Constants {
public static final String APP_TOKEN = ""; // First three credentials are from **Production** part not from **Development** part
public static final String CONSUMER_KEY = "";
public static final String CONSUMER_SECRET = "";
public static final String REQUEST_TOKEN_URL = "https://oauth.intuit.com/oauth/v1/get_request_token";
public static final String AUTH_URL = "https://appcenter.intuit.com/Connect/Begin";
public static final String ACCESS_TOKEN_URL = "https://oauth.intuit.com/oauth/v1/get_access_token";
public static final String OAUTH_CALLBACK_SCHEME = "oauthflow-quickbooks";
public static final String OAUTH_CALLBACK_HOST = "callback";
public static final String CALLBACK_URL = OAUTH_CALLBACK_SCHEME + "://"
+ OAUTH_CALLBACK_HOST;
public static final String PREFERENCE_NAME = "quickbooks";
public static String OAUTH_URL = "https://oauth.intuit.com";
public static String APPCENTER_URL = "https://appcenter.intuit.com";
}
清单文件
启动登录时,将以下意图过滤器添加到活动中。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="callback"
android:scheme="oauthflow-quickbooks" />
</intent-filter>