private Object sendMessage( CreditCard creditCard, Money amount, Money tax, InetAddress userIp, boolean verify) throws IOException, CommerceException { URL url = new URL(configuration.getString("jcatapult.commerce.aim.url")); String username = configuration.getString("jcatapult.commerce.aim.username"); String password = configuration.getString("jcatapult.commerce.aim.password"); if (logger.isLoggable(Level.FINEST)) { logger.finest("Contacting AIM with this info"); logger.finest("URL: " + url.toExternalForm()); logger.finest("Username: "******"Password: "******"x_version=3.1&"); build.append("x_delim_data=TRUE&"); build.append("x_relay_response=FALSE&"); build.append("x_login="******"&"); build.append("x_tran_key=").append(password).append("&"); build.append("x_method=CC&"); build.append("x_delim_char=|&"); if (verify) { build.append("x_type=AUTH_ONLY&"); } else { build.append("x_type=AUTH_CAPTURE&"); } if (configuration.getBoolean("jcatapult.commerce.aim.test")) { build.append("x_test_request=TRUE&"); } if (!creditCard.isVerified()) { build.append("x_card_code=").append(creditCard.getSvn()).append("&"); build.append("x_first_name=").append(creditCard.getFirstName()).append("&"); build.append("x_last_name=").append(creditCard.getLastName()).append("&"); build.append("x_address=").append(creditCard.getAddress().getStreet1()).append("&"); build.append("x_city=").append(creditCard.getAddress().getCity()).append("&"); build.append("x_state=").append(creditCard.getAddress().getState()).append("&"); build.append("x_zip=").append(creditCard.getAddress().getPostalCode()).append("&"); build.append("x_country=").append(creditCard.getAddress().getCountry()).append("&"); build.append("x_customer_ip=").append(userIp.toString()).append("&"); } if (tax != null) { build.append("x_tax=").append(tax.toString()).append("&"); } build.append("x_amount=").append(amount.toString()).append("&"); build.append("x_currency_code=").append(amount.getCurrency().getCurrencyCode()).append("&"); build.append("x_card_num=").append(creditCard.getNumber()).append("&"); build.append("x_exp_date=").append(creditCard.getExpirationDate()); huc.setConnectTimeout( configuration.getInt("jcatapult.commerce.aim.connectTimeoutSeconds", 60) * 1000); huc.setReadTimeout( configuration.getInt("jcatapult.commerce.aim.readTimeoutSeconds", 180) * 1000); huc.setUseCaches(false); huc.setDoInput(true); huc.setDoOutput(true); huc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); huc.connect(); OutputStream os = huc.getOutputStream(); os.write(build.toString().getBytes()); os.flush(); os.close(); BufferedReader br = new BufferedReader(new InputStreamReader(huc.getInputStream())); String response = br.readLine(); br.close(); // logger.finest("Response from AIM is [" + response + "]"); String[] parts = split(response); if (parts.length < 39) { throw new CommerceException("Invalid response from the Gateway."); } int responseCode = Integer.valueOf(parts[0]); String transactionID = null; CommerceError error = null; if (responseCode == 1) { transactionID = parts[6]; } else { error = getError(parts[0], parts[2], parts[3], parts[4], parts[5]); } if (verify) { return new VerifyResult(error); } return new ChargeResult(transactionID, error, parts[0], parts[2], parts[3], parts[4], parts[5]); }