package com.gateway; import psoft.epayment.GenericMerchantGateway; import psoft.epayment.MerchantGateway; import psoft.epayment.CreditCard; import java.util.Map; import java.util.HashMap; import java.util.Collection; import java.util.Locale; import java.text.NumberFormat; import JavaAPI.*; public class Moneris extends GenericMerchantGateway { private static org.apache.log4j.Category log = org.apache.log4j.Category.getInstance(Moneris.class); private static java.text.DateFormat dateFormat = new java.text.SimpleDateFormat("yyMM"); protected String TITLE; protected String server; protected String storeid; protected String apitoken; public Map getValues() { HashMap map = new HashMap(); map.put("TITLE", TITLE); map.put("server", server); map.put("storeid", storeid); map.put("apitoken", apitoken); return map; } public void init(int id, HashMap v) throws Exception { this.id = id; TITLE = getValue(v, "TITLE"); server = getValue(v, "server"); storeid = getValue(v, "storeid"); apitoken = getValue(v, "apitoken"); } public HashMap charge(long id, String description, double amount, CreditCard cc) throws Exception { HashMap result = new HashMap(); result = processTransaction(CHARGE, id, description, amount, new HashMap(), cc); writeCharge(amount); return result; } public HashMap authorize(long id, String description, double amount, CreditCard cc) throws Exception { HashMap result = processTransaction(AUTH, id, description, amount, new HashMap(), cc); writeAuthorize(amount); return result; } public HashMap voidAuthorize(long id, String description, HashMap data, CreditCard cc) throws Exception { double amount = ((Double) data.get("amount")).doubleValue(); HashMap result = processTransaction(VOID, id, description, amount, data, cc); writeVoid(amount); return result; } public HashMap capture(long id, String description, HashMap data, CreditCard cc) throws Exception { double amount = ((Double) data.get("amount")).doubleValue(); HashMap result = processTransaction(CAPTURE, id, description, amount, data, cc); writeCapture(amount); return result; } private HashMap processTransaction(int trType, long id, String description, double amount, HashMap data, CreditCard cc) throws Exception { HashMap request = new HashMap(); HashMap result = new HashMap(); NumberFormat engFormat = NumberFormat .getNumberInstance(new Locale("en", "US")); engFormat.setMinimumFractionDigits(2); engFormat.setMinimumIntegerDigits(1); engFormat.setMaximumFractionDigits(2); long logId = writeLog(id, amount, trType); String error = ""; boolean success = false; request.put("server", server); request.put("store_id", storeid); request.put("api_token", apitoken); if (trType == VOID || trType == CAPTURE) { request.put("orderid", data.get("id")); request.put("transactionid", data.get("txnid")); } else { request.put("orderid", Long.toString(logId)); } request.put("amount", engFormat.format(amount)); request.put("cc", cc.getNumber()); request.put("exp", cc.getExp(dateFormat)); request.put("crypt", "7"); /* String host = "esqa.moneris.com"; String store_id = "store1"; String api_token = "yesguy"; String order_id = "need_unique_order_id"; String amount = "1.04"; String card = "5454545454545454"; String exp = "0412"; String crypt = "7"; */ HttpsPostRequest mpgReq = null; Receipt receipt = null; String response = ""; BillingLocation billing = new BillingLocation( cc.getLastName(), cc.getFirstName(), "", cc.getAddress(), cc.getCity(), cc.getState(), cc.getZip(), cc.getCountry(), cc.getPhone(), "", "", "", "", (String)request.get("amount") ); ShippingLocation shipping = new ShippingLocation( cc.getLastName(), cc.getFirstName(), "", cc.getAddress(), cc.getCity(), cc.getState(), cc.getZip(), cc.getCountry(), cc.getPhone(), "", "", "", "", (String)request.get("amount") ); Item[] items = new Item[1]; items[0] = new Item( "H-Sphere hosting service", "1", description, (String)request.get("amount")); CustomerInfo cust_info = new CustomerInfo(billing,shipping, cc.getEmail(), description,items); try { switch (trType) { case CHARGE: mpgReq = new HttpsPostRequest( (String)request.get("server"), (String)request.get("store_id"), (String)request.get("api_token"), new Purchase( (String)request.get("orderid"), (String)request.get("amount"), (String)request.get("cc"), (String)request.get("exp"), (String)request.get("crypt"), cust_info)); break; case AUTH: mpgReq = new HttpsPostRequest( (String)request.get("server"), (String)request.get("store_id"), (String)request.get("api_token"), new PreAuth( (String)request.get("orderid"), (String)request.get("amount"), (String)request.get("cc"), (String)request.get("exp"), (String)request.get("crypt"), cust_info)); break; case CAPTURE: mpgReq = new HttpsPostRequest( (String)request.get("server"), (String)request.get("store_id"), (String)request.get("api_token"), new Completion( (String)request.get("orderid"), (String)request.get("amount"), (String)request.get("transactionid"), (String)request.get("crypt"))); break; case VOID: mpgReq = new HttpsPostRequest( (String)request.get("server"), (String)request.get("store_id"), (String)request.get("api_token"), new PurchaseCorrection( (String)request.get("orderid"), (String)request.get("transactionid"), (String)request.get("crypt"))); break; } receipt = mpgReq.getReceipt(); int respcode = 1000; if (receipt.getResponseCode() != null) { try { respcode = Integer.parseInt(receipt.getResponseCode()); success = respcode < 50; if (success) { //result.put("id", receipt.getTxnNumber()); result.put("id", receipt.getReceiptId()); result.put("txnid", receipt.getTxnNumber()); result.put("amount", new Double(amount)); } else { error = receipt.getMessage(); } } catch (NumberFormatException nfe) { error = receipt.getMessage(); } } response = " Complete: \"" + receipt.getComplete() + "\" " + " ISO: \"" + receipt.getISO() + " Message: \"" + receipt.getMessage() + "\" " + " ReceiptId: \"" + receipt.getReceiptId() + "\" " + " RecurSuccess: \"" + receipt.getRecurSuccess() + "\" " + " Reference Num: \"" + receipt.getReferenceNum() + "\" " + " ResponseCode: \"" + receipt.getResponseCode() + "\" " + " Ticket: \"" + receipt.getTicket() + "\" " + " TransAmount: \"" + receipt.getTransAmount() + "\" " + " TransDate: \"" + receipt.getTransDate() + "\" " + " TransTime: \"" + receipt.getTransTime() + "\" "+ " TransType: \"" + receipt.getTransType() + "\" " + " TransType: \"" + receipt.getTransType() + "\" " + " TxnNumber: \"" + receipt.getTxnNumber() + "\" "; } catch (Exception ex) { error = ex.getMessage(); } writeLog(logId, id, amount, trType, request.toString(), response, error, success); if (!success) { throw new Exception(error); } return result; } public String getDescription() { return "Moneris"; } }