package com.twocheckout; import com.google.gson.Gson; import com.twocheckout.model.AuthException; import com.twocheckout.model.AuthExceptions; import com.twocheckout.model.Error; import com.twocheckout.model.Errors; import org.apache.http.*; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.params.ClientPNames; import org.apache.http.client.params.CookiePolicy; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.apache.http.entity.StringEntity; import org.apache.http.entity.ContentType; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public abstract class TwocheckoutApi { public static String get(String urlSuffix, HashMap<String, String> args) throws TwocheckoutException { ArrayList<NameValuePair> params = TwocheckoutUtil.convert(args); String apiusername = Twocheckout.apiusername; String apipassword = Twocheckout.apipassword; String url = "sandbox".equals(Twocheckout.mode) ? Twocheckout.sandboxBaseURL + urlSuffix : Twocheckout.baseURL + urlSuffix; url = addLocationToUrl(url, params); String mainObject = null; try { URI uri = new URI(url); DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.getCredentialsProvider().setCredentials( new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), new UsernamePasswordCredentials(apiusername, apipassword)); HttpGet httpget = new HttpGet(uri); httpget.setHeader("Accept", "application/json"); httpget.setHeader("User-Agent", String.format("2Checkout/Java/%s", Twocheckout.VERSION)); httpget.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109); HttpResponse response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); String responseBody = EntityUtils.toString(entity); httpclient.getConnectionManager().shutdown(); checkStatusCodeAdmin(response, responseBody); if (responseBody != null) { return responseBody; } } catch (Exception e) { throw new TwocheckoutException(e.getMessage()); } return mainObject; } public static String post(String urlSuffix, HashMap<String, String> args) throws TwocheckoutException { ArrayList<NameValuePair> params = TwocheckoutUtil.convert(args); String apiusername = Twocheckout.apiusername; String apipassword = Twocheckout.apipassword; String url = "sandbox".equals(Twocheckout.mode) ? Twocheckout.sandboxBaseURL+urlSuffix : Twocheckout.baseURL+urlSuffix; String mainObject = null; URI uri; try { uri = new URI(url); DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.getCredentialsProvider().setCredentials( new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), new UsernamePasswordCredentials(apiusername, apipassword)); HttpPost httppost = new HttpPost(uri); httppost.setHeader("Accept", "application/json"); httppost.setHeader("User-Agent", String.format("2Checkout/Java/%s", Twocheckout.VERSION)); httppost.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109); httppost.setEntity(new UrlEncodedFormEntity(params, "UTF8")); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); String responseBody = EntityUtils.toString(entity); httpclient.getConnectionManager().shutdown(); checkStatusCodeAdmin(response, responseBody); if (responseBody != null) { return responseBody; } } catch (Exception e) { throw new TwocheckoutException(e.getMessage()); } return mainObject; } public static String auth(String urlSuffix, HashMap<String, Object> args) throws TwocheckoutException { args.put("privateKey", Twocheckout.privatekey); String request = new Gson().toJson(args); String url = "sandbox".equals(Twocheckout.mode) ? Twocheckout.sandboxBaseURL+urlSuffix : Twocheckout.baseURL+urlSuffix; String mainObject = null; URI uri; try { uri = new URI(url); DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(uri); httppost.setHeader("Accept", "application/json"); httppost.setHeader("User-Agent", String.format("2Checkout/Java/%s", Twocheckout.VERSION)); httppost.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109); httppost.setEntity(new StringEntity(request, ContentType.create("application/json"))); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); String responseBody = EntityUtils.toString(entity); checkStatusCodeAuth(response, responseBody); httpclient.getConnectionManager().shutdown(); if (responseBody != null) { return responseBody; } } catch (Exception e) { throw new TwocheckoutException(e.getMessage()); } return mainObject; } public static String addLocationToUrl(String url, List<NameValuePair> params){ if(!url.endsWith("?")) url += "?"; String paramString = URLEncodedUtils.format(params, "utf-8"); url += paramString; return url; } private static void checkStatusCodeAdmin(HttpResponse response, String responseBody) throws TwocheckoutException { StatusLine status = response.getStatusLine(); if (status.getStatusCode() != HttpStatus.SC_OK) { Errors errors = new Gson().fromJson(responseBody, Errors.class); Error[] error = errors.getErrors(); throw new TwocheckoutException(error[0].getMessage()); } } private static void checkStatusCodeAuth(HttpResponse response, String responseBody) throws TwocheckoutException { StatusLine status = response.getStatusLine(); if (status.getStatusCode() != HttpStatus.SC_OK && status.getStatusCode() != HttpStatus.SC_ACCEPTED ) { AuthExceptions exceptions = new Gson().fromJson(responseBody, AuthExceptions.class); AuthException exception = exceptions.getAuthExceptions(); throw new TwocheckoutException(exception.getMessage()); } } }