1 25 package org.ofbiz.accounting.thirdparty.gosoftware; 26 27 import java.io.IOException ; 28 import java.util.Map ; 29 30 import org.ofbiz.base.util.Debug; 31 import org.ofbiz.base.util.GeneralException; 32 import org.ofbiz.base.util.HttpClient; 33 import org.ofbiz.base.util.HttpClientException; 34 import org.ofbiz.base.util.ObjectType; 35 36 import org.apache.commons.collections.MapIterator; 37 import org.apache.commons.collections.map.LinkedMap; 38 39 45 public class RitaApi { 46 47 public static final String module = RitaApi.class.getName(); 48 public static final String xschema = "x-schema:..\\dtd\\stnd.xdr"; 49 public static final String rootElement = "XML_FILE"; 50 public static final String reqElement = "XML_REQUEST"; 51 52 public static final String FUNCTION_TYPE = "FUNCTION_TYPE"; 54 public static final String PAYMENT_TYPE = "PAYMENT_TYPE"; 55 public static final String USER_ID = "USER_ID"; 56 public static final String USER_PW = "USER_PW"; 57 public static final String COMMAND = "COMMAND"; 58 public static final String CLIENT_ID = "CLIENT_ID"; 59 60 public static final String ACCT_NUM = "ACCT_NUM"; 61 public static final String EXP_MONTH = "EXP_MONTH"; 62 public static final String EXP_YEAR = "EXP_YEAR"; 63 public static final String TRANS_AMOUNT = "TRANS_AMOUNT"; 64 65 public static final String CARDHOLDER = "CARDHOLDER"; 66 public static final String TRACK_DATA = "TRACK_DATA"; 67 public static final String INVOICE = "INVOICE"; 68 public static final String PRESENT_FLAG = "PRESENT_FLAG"; 69 public static final String CUSTOMER_STREET = "CUSTOMER_STREET"; 70 public static final String CUSTOMER_ZIP = "CUSTOMER_ZIP"; 71 public static final String CVV2 = "CVV2"; 72 public static final String TAX_AMOUNT = "TAX_AMOUNT"; 73 public static final String PURCHASE_ID = "PURCHASE_ID"; 74 public static final String FORCE_FLAG = "FORCE_FLAG"; 75 public static final String ORIG_SEQ_NUM = "ORIG_SEQ_NUM"; 76 77 public static final String TERMINATION_STATUS = "TERMINATION_STATUS"; 79 public static final String INTRN_SEQ_NUM = "INTRN_SEQ_NUM"; 80 public static final String RESULT = "RESULT"; 81 public static final String RESULT_CODE = "RESULT_CODE"; 82 public static final String RESPONSE_TEXT = "RESPONSE_TEXT"; 83 84 public static final String AUTH_CODE = "AUTH_CODE"; 85 public static final String AVS_CODE = "AVS_CODE"; 86 public static final String CVV2_CODE = "CVV2_CODE"; 87 public static final String REFERENCE = "REFERENCE"; 88 public static final String TRANS_DATE = "TRANS_DATE"; 89 public static final String TRANS_TIME = "TRANS_TIME"; 90 public static final String ORIG_TRANS_AMOUNT = "ORIG_TRANS_AMOUNT"; 91 92 protected static final String [] validOut = { TERMINATION_STATUS, INTRN_SEQ_NUM, RESULT, RESULT_CODE, RESPONSE_TEXT, 94 AUTH_CODE, AVS_CODE, CVV2_CODE, REFERENCE, TRANS_DATE, TRANS_TIME, 95 ORIG_TRANS_AMOUNT }; 96 97 protected static final String [] validIn = { FUNCTION_TYPE, PAYMENT_TYPE, USER_ID, USER_PW, COMMAND, CLIENT_ID, 98 ACCT_NUM, EXP_MONTH, EXP_YEAR, TRANS_AMOUNT, CARDHOLDER, TRACK_DATA, 99 INVOICE, PRESENT_FLAG, CUSTOMER_STREET, CUSTOMER_ZIP, CVV2, TAX_AMOUNT, 100 PURCHASE_ID, FORCE_FLAG, ORIG_TRANS_AMOUNT, ORIG_SEQ_NUM }; 101 102 protected static final int MODE_OUT = 20; 104 protected static final int MODE_IN = 10; 105 106 protected LinkedMap document = null; 108 protected String host = null; 109 protected boolean ssl = false; 110 protected int port = 0; 111 protected int mode = 0; 112 113 public RitaApi(Map document) { 114 this.document = new LinkedMap(document); 115 this.mode = MODE_OUT; 116 } 117 118 public RitaApi() { 119 this.document = new LinkedMap(); 120 this.mode = MODE_IN; 121 } 122 123 public RitaApi(String host, int port, boolean ssl) { 124 this(); 125 this.host = host; 126 this.port = port; 127 this.ssl = ssl; 128 } 129 130 public void set(String name, Object value) { 131 if (!checkIn(name)) { 132 throw new IllegalArgumentException ("Field [" + name + "] is not a valid IN parameter"); 133 } 134 135 String objString = null; 136 try { 137 objString = (String ) ObjectType.simpleTypeConvert(value, "java.lang.String", null, null); 138 } catch (GeneralException e) { 139 Debug.logError(e, module); 140 throw new IllegalArgumentException ("Unable to convert value to String"); 141 } catch (ClassCastException e) { 142 Debug.logError(e, module); 143 throw new IllegalArgumentException ("Unable to convert value to String"); 144 } 145 if (objString == null && value != null) { 146 throw new IllegalArgumentException ("Unable to convert value to String"); 147 } else if (objString == null) { 148 objString = ""; 149 } 150 151 document.put(name, objString); 153 } 154 155 public String get(String name) { 156 if (!checkOut(name)) { 157 throw new IllegalArgumentException ("Field [" + name + "] is not a valid OUT parameter"); 158 } 159 160 return (String ) document.get(name); 161 } 162 163 public String toString() { 164 StringBuffer buf = new StringBuffer (); 165 MapIterator i = document.mapIterator(); 166 while (i.hasNext()) { 167 String name = (String ) i.next(); 168 String value = (String ) i.getValue(); 169 buf.append(name); 170 buf.append(" "); 171 buf.append(value); 172 buf.append("\r\n"); 173 } 174 buf.append(".\r\n"); 175 return buf.toString(); 176 } 177 178 public Map getDocument() { 179 return this.document; 180 } 181 182 public RitaApi send() throws IOException , GeneralException { 183 if (host == null || port == 0) { 184 throw new GeneralException("TCP transaction not supported without valid host/port configuration"); 185 } 186 187 if (mode == MODE_IN) { 188 String stream = this.toString() + "..\r\n"; 189 Debug.log("Sending - \n" + stream, module); 190 String urlString = "http://" + host + ":" + port; 191 HttpClient http = new HttpClient(urlString); 192 http.setDebug(true); 193 194 239 240 LinkedMap docMap = new LinkedMap(); 241 String resp = null; 242 try { 243 resp = http.post(stream); 244 } catch (HttpClientException e) { 245 Debug.logError(e, module); 246 throw new IOException (e.getMessage()); 247 } 248 249 String [] lines = resp.split("\n"); 250 for (int i = 0; i < lines.length; i++) { 251 Debug.log(lines[i], module); 252 if (!lines[i].trim().equals(".")) { 253 String [] lineSplit = lines[i].trim().split(" ", 2); 254 if (lineSplit != null && lineSplit.length == 2) { 255 docMap.put(lineSplit[0], lineSplit[1]); 256 } else { 257 Debug.logWarning("Line split error - " + lines[i], module); 258 } 259 } else { 260 break; 261 } 262 } 263 RitaApi out = new RitaApi(docMap); 264 return out; 265 } else { 266 throw new IllegalStateException ("Cannot send output object"); 267 } 268 } 269 270 private boolean checkIn(String name) { 271 for (int i = 0; i < validOut.length; i++) { 272 if (name.equals(validOut[i])) { 273 return false; 274 } 275 } 276 return true; 277 } 278 279 private boolean checkOut(String name) { 280 for (int i = 0; i < validIn.length; i++) { 281 if (name.equals(validIn[i])) { 282 return false; 283 } 284 } 285 return true; 286 } 287 } 288 | Popular Tags |