blob: 8f887397579efdad72db9c5ba4de8c1ec70815c2 [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*******************************************************************************/
package org.ofbiz.accounting.thirdparty.orbital;
import java.math.BigDecimal;
import java.util.Locale;
import java.util.Map;
import javolution.util.FastMap;
import org.ofbiz.accounting.payment.PaymentGatewayServices;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilFormatOut;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilNumber;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.entity.Delegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.entity.util.EntityUtil;
import org.ofbiz.service.DispatchContext;
import org.ofbiz.service.ModelService;
import org.ofbiz.service.ServiceUtil;
import com.paymentech.orbital.sdk.configurator.Configurator;
import com.paymentech.orbital.sdk.interfaces.RequestIF;
import com.paymentech.orbital.sdk.interfaces.ResponseIF;
import com.paymentech.orbital.sdk.interfaces.TransactionProcessorIF;
import com.paymentech.orbital.sdk.request.FieldNotFoundException;
import com.paymentech.orbital.sdk.request.Request;
import com.paymentech.orbital.sdk.transactionProcessor.TransactionException;
import com.paymentech.orbital.sdk.transactionProcessor.TransactionProcessor;
import com.paymentech.orbital.sdk.util.exceptions.InitializationException;
public class OrbitalPaymentServices {
public static String module = OrbitalPaymentServices.class.getName();
private static int decimals = UtilNumber.getBigDecimalScale("invoice.decimals");
private static int rounding = UtilNumber.getBigDecimalRoundingMode("invoice.rounding");
public final static String resource = "AccountingUiLabels";
public static String APPROVED = "Approved";
public static String DECLINED = "Declined";
public static String ERROR = "Error";
public static final String BIN_VALUE = "000002";
public static TransactionProcessorIF tp = null;
public static ResponseIF response = null;
public static RequestIF request = null;
public static Map<String, Object> ccAuth(DispatchContext ctx, Map<String, Object> context) {
Delegator delegator = ctx.getDelegator();
Map<String, Object> results = ServiceUtil.returnSuccess();
Map<String, Object> props = buildOrbitalProperties(context, delegator);
props.put("transType", "AUTH_ONLY");
//Tell the request object which template to use (see RequestIF.java)
try {
request = new Request(RequestIF.NEW_ORDER_TRANSACTION);
} catch (InitializationException e) {
Debug.logError("Error in request initialization", module);
e.printStackTrace();
}
buildAuthOrAuthCaptureTransaction(context, delegator, props, request, results);
Map<String, Object> validateResults = validateRequest(context, props, request);
String respMsg = (String) validateResults.get(ModelService.RESPONSE_MESSAGE);
if (ModelService.RESPOND_ERROR.equals(respMsg)) {
results.put(ModelService.ERROR_MESSAGE, "Validation Failed - invalid values");
return results;
}
initializeTransactionProcessor();
Map<String, Object> processCardResponseContext = processCard(request);
// For Debugging Purpose
printTransResult((ResponseIF) processCardResponseContext.get("processCardResponse"));
processAuthTransResult(processCardResponseContext, results);
return results;
}
public static Map<String, Object> ccAuthCapture(DispatchContext ctx, Map<String, Object> context) {
Delegator delegator = ctx.getDelegator();
Map<String, Object> results = ServiceUtil.returnSuccess();
Map<String, Object> props = buildOrbitalProperties(context, delegator);
props.put("transType", "AUTH_CAPTURE");
//Tell the request object which template to use (see RequestIF.java)
try {
request = new Request(RequestIF.NEW_ORDER_TRANSACTION);
} catch (InitializationException e) {
Debug.logError("Error in request initialization", module);
e.printStackTrace();
}
buildAuthOrAuthCaptureTransaction(context, delegator, props, request, results);
Map<String, Object> validateResults = validateRequest(context, props, request);
String respMsg = (String) validateResults.get(ModelService.RESPONSE_MESSAGE);
if (ModelService.RESPOND_ERROR.equals(respMsg)) {
results.put(ModelService.ERROR_MESSAGE, "Validation Failed - invalid values");
return results;
}
initializeTransactionProcessor();
Map<String, Object> processCardResponseContext = processCard(request);
// For Debugging Purpose
printTransResult((ResponseIF) processCardResponseContext.get("processCardResponse"));
processAuthCaptureTransResult(processCardResponseContext, results);
return results;
}
public static Map<String, Object> ccCapture(DispatchContext ctx, Map<String, Object> context) {
Delegator delegator = ctx.getDelegator();
Map<String, Object> results = ServiceUtil.returnSuccess();
Map<String, Object> props = buildOrbitalProperties(context, delegator);
Locale locale = (Locale) context.get("locale");
GenericValue orderPaymentPreference = (GenericValue) context.get("orderPaymentPreference");
GenericValue creditCard = null;
try {
creditCard = delegator.getRelatedOne("CreditCard",orderPaymentPreference);
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError(UtilProperties.getMessage(resource,
"AccountingPaymentUnableToGetCCInfo", locale));
}
GenericValue authTransaction = PaymentGatewayServices.getAuthTransaction(orderPaymentPreference);
if (authTransaction == null) {
return ServiceUtil.returnError(UtilProperties.getMessage(resource,
"AccountingPaymentTransactionAuthorizationNotFoundCannotCapture", locale));
}
context.put("creditCard", creditCard);
context.put("authTransaction", authTransaction);
context.put("orderId", orderPaymentPreference.getString("orderId"));
props.put("transType", "PRIOR_AUTH_CAPTURE");
//Tell the request object which template to use (see RequestIF.java)
try {
request = new Request(RequestIF.MARK_FOR_CAPTURE_TRANSACTION);
} catch (InitializationException e) {
Debug.logError("Error in request initialization", module);
e.printStackTrace();
}
buildCaptureTransaction(context, delegator, props, request, results);
Map<String, Object> validateResults = validateRequest(context, props, request);
String respMsg = (String) validateResults.get(ModelService.RESPONSE_MESSAGE);
if (ModelService.RESPOND_ERROR.equals(respMsg)) {
results.put(ModelService.ERROR_MESSAGE, "Validation Failed - invalid values");
return results;
}
initializeTransactionProcessor();
Map<String, Object> processCardResponseContext = processCard(request);
// For Debugging Purpose
printTransResult((ResponseIF) processCardResponseContext.get("processCardResponse"));
processCaptureTransResult(processCardResponseContext, results);
return results;
}
public static Map<String, Object> ccRefund(DispatchContext ctx, Map<String, Object> context) {
Locale locale = (Locale) context.get("locale");
Delegator delegator = ctx.getDelegator();
Map<String, Object> results = ServiceUtil.returnSuccess();
Map<String, Object> props = buildOrbitalProperties(context, delegator);
GenericValue orderPaymentPreference = (GenericValue) context.get("orderPaymentPreference");
GenericValue creditCard = null;
try {
creditCard = delegator.getRelatedOne("CreditCard",orderPaymentPreference);
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError(UtilProperties.getMessage(resource,
"AccountingPaymentUnableToGetCCInfo", locale));
}
GenericValue authTransaction = PaymentGatewayServices.getAuthTransaction(orderPaymentPreference);
if (authTransaction == null) {
return ServiceUtil.returnError(UtilProperties.getMessage(resource,
"AccountingPaymentTransactionAuthorizationNotFoundCannotRefund", locale));
}
context.put("creditCard", creditCard);
context.put("authTransaction", authTransaction);
context.put("orderId", orderPaymentPreference.getString("orderId"));
//Tell the request object which template to use (see RequestIF.java)
try {
request = new Request(RequestIF.NEW_ORDER_TRANSACTION);
} catch (InitializationException e) {
Debug.logError("Error in request initialization", module);
e.printStackTrace();
}
buildRefundTransaction(context, props, request, results);
Map<String, Object> validateResults = validateRequest(context, props, request);
String respMsg = (String) validateResults.get(ModelService.RESPONSE_MESSAGE);
if (ModelService.RESPOND_ERROR.equals(respMsg)) {
results.put(ModelService.ERROR_MESSAGE, "Validation Failed - invalid values");
return results;
}
initializeTransactionProcessor();
Map<String, Object> processCardResponseContext = processCard(request);
// For Debugging Purpose
printTransResult((ResponseIF) processCardResponseContext.get("processCardResponse"));
processRefundTransResult(processCardResponseContext, results);
return results;
}
public static Map<String, Object> ccRelease(DispatchContext ctx, Map<String, Object> context) {
Locale locale = (Locale) context.get("locale");
Delegator delegator = ctx.getDelegator();
Map<String, Object> results = ServiceUtil.returnSuccess();
Map<String, Object> props = buildOrbitalProperties(context, delegator);
GenericValue orderPaymentPreference = (GenericValue) context.get("orderPaymentPreference");
try {
delegator.getRelatedOne("CreditCard",orderPaymentPreference);
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError(UtilProperties.getMessage(resource,
"AccountingPaymentUnableToGetCCInfo", locale));
}
GenericValue authTransaction = PaymentGatewayServices.getAuthTransaction(orderPaymentPreference);
if (authTransaction == null) {
return ServiceUtil.returnError(UtilProperties.getMessage(resource,
"AccountingPaymentTransactionAuthorizationNotFoundCannotRelease", locale));
}
context.put("authTransaction", authTransaction);
context.put("orderId", orderPaymentPreference.getString("orderId"));
//Tell the request object which template to use (see RequestIF.java)
try {
request = new Request(RequestIF.REVERSE_TRANSACTION);
} catch (InitializationException e) {
Debug.logError("Error in request initialization", module);
e.printStackTrace();
}
buildReleaseTransaction(context, delegator, props, request, results);
Map<String, Object> validateResults = validateRequest(context, props, request);
String respMsg = (String) validateResults.get(ModelService.RESPONSE_MESSAGE);
if (ModelService.RESPOND_ERROR.equals(respMsg)) {
results.put(ModelService.ERROR_MESSAGE, "Validation Failed - invalid values");
return results;
}
initializeTransactionProcessor();
Map<String, Object> processCardResponseContext = processCard(request);
// For Debugging Purpose
printTransResult((ResponseIF) processCardResponseContext.get("processCardResponse"));
processReleaseTransResult(processCardResponseContext, results);
return results;
}
private static Map<String, Object> buildOrbitalProperties(Map<String, Object> context, Delegator delegator) {
//TODO: Will move this to property file and then will read it from there.
String configFile = "/applications/accounting/config/linehandler.properties";
String paymentGatewayConfigId = (String) context.get("paymentGatewayConfigId");
Map<String, Object> buildConfiguratorContext = FastMap.newInstance();
try {
buildConfiguratorContext.put("OrbitalConnectionUsername", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "username"));
buildConfiguratorContext.put("OrbitalConnectionPassword", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "connectionPassword"));
buildConfiguratorContext.put("merchantId", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "merchantId"));
buildConfiguratorContext.put("engine.class", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "engineClass"));
buildConfiguratorContext.put("engine.hostname", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "hostName"));
buildConfiguratorContext.put("engine.port", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "port"));
buildConfiguratorContext.put("engine.hostname.failover", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "hostNameFailover"));
buildConfiguratorContext.put("engine.port.failover", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "portFailover"));
buildConfiguratorContext.put("engine.connection_timeout_seconds", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "connectionTimeoutSeconds"));
buildConfiguratorContext.put("engine.read_timeout_seconds", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "readTimeoutSeconds"));
buildConfiguratorContext.put("engine.authorizationURI", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "authorizationURI"));
buildConfiguratorContext.put("engine.sdk_version", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "sdkVersion"));
buildConfiguratorContext.put("engine.ssl.socketfactory", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "sslSocketFactory"));
buildConfiguratorContext.put("Response.response_type", getPaymentGatewayConfigValue(delegator, paymentGatewayConfigId, "responseType"));
String configFileLocation = System.getProperty("ofbiz.home") + configFile;
Configurator config = Configurator.getInstance(configFileLocation);
buildConfiguratorContext.putAll(config.getConfigurations());
config.setConfigurations(buildConfiguratorContext);
} catch (InitializationException e) {
Debug.logError("Orbital Configurator Initialization Error: " + e.getMessage(), module);
e.printStackTrace();
}
return buildConfiguratorContext;
}
private static String getPaymentGatewayConfigValue(Delegator delegator, String paymentGatewayConfigId,
String paymentGatewayConfigParameterName) {
String returnValue = "";
if (UtilValidate.isNotEmpty(paymentGatewayConfigId)) {
try {
GenericValue paymentGatewayOrbital = delegator.findOne("PaymentGatewayOrbital", UtilMisc.toMap("paymentGatewayConfigId", paymentGatewayConfigId), false);
if (UtilValidate.isNotEmpty(paymentGatewayOrbital)) {
Object paymentGatewayOrbitalField = paymentGatewayOrbital.get(paymentGatewayConfigParameterName);
if (UtilValidate.isNotEmpty(paymentGatewayOrbitalField)) {
return returnValue = paymentGatewayOrbitalField.toString().trim();
}
}
} catch (GenericEntityException e) {
Debug.logError(e, module);
}
}
return returnValue;
}
private static void buildAuthOrAuthCaptureTransaction(Map<String, Object> params, Delegator delegator, Map<String, Object> props, RequestIF request, Map<String, Object> results) {
GenericValue cc = (GenericValue) params.get("creditCard");
BigDecimal amount = (BigDecimal) params.get("processAmount");
String amountValue = amount.setScale(decimals, rounding).movePointRight(2).toPlainString();
String number = UtilFormatOut.checkNull(cc.getString("cardNumber"));
String expDate = UtilFormatOut.checkNull(cc.getString("expireDate"));
expDate = formatExpDateForOrbital(expDate);
String cardSecurityCode = (String) params.get("cardSecurityCode");
String orderId = UtilFormatOut.checkNull((String)params.get("orderId"));
String transType = props.get("transType").toString();
String messageType = null;
if ("AUTH_ONLY".equals(transType)) {
messageType = "A";
} else if ("AUTH_CAPTURE".equals(transType)) {
messageType = "AC";
}
try {
request.setFieldValue("IndustryType", "EC");
request.setFieldValue("MessageType", UtilFormatOut.checkNull(messageType));
request.setFieldValue("MerchantID", UtilFormatOut.checkNull(props.get("merchantId").toString()));
request.setFieldValue("BIN", BIN_VALUE);
request.setFieldValue("OrderID", UtilFormatOut.checkNull(orderId));
request.setFieldValue("AccountNum", UtilFormatOut.checkNull(number));
request.setFieldValue("Amount", UtilFormatOut.checkNull(amountValue));
request.setFieldValue("Exp", UtilFormatOut.checkNull(expDate));
// AVS Information
GenericValue creditCard = null;
if (params.get("orderPaymentPreference") != null) {
GenericValue opp = (GenericValue) params.get("orderPaymentPreference");
if ("CREDIT_CARD".equals(opp.getString("paymentMethodTypeId"))) {
// sometimes the ccAuthCapture interface is used, in which case the creditCard is passed directly
creditCard = (GenericValue) params.get("creditCard");
if (creditCard == null || ! (opp.get("paymentMethodId").equals(creditCard.get("paymentMethodId")))) {
creditCard = opp.getRelatedOne("CreditCard");
}
}
request.setFieldValue("AVSname", "Demo Customer");
if (UtilValidate.isNotEmpty(creditCard.getString("contactMechId"))) {
GenericValue address = creditCard.getRelatedOne("PostalAddress");
if (address != null) {
request.setFieldValue("AVSaddress1", UtilFormatOut.checkNull(address.getString("address1")));
request.setFieldValue("AVScity", UtilFormatOut.checkNull(address.getString("city")));
request.setFieldValue("AVSstate", UtilFormatOut.checkNull(address.getString("stateProvinceGeoId")));
request.setFieldValue("AVSzip", UtilFormatOut.checkNull(address.getString("postalCode")));
}
}
} else {
// this would be the case for an authorization
GenericValue cp = (GenericValue)params.get("billToParty");
GenericValue ba = (GenericValue)params.get("billingAddress");
request.setFieldValue("AVSname", UtilFormatOut.checkNull(cp.getString("firstName")) + UtilFormatOut.checkNull(cp.getString("lastName")));
request.setFieldValue("AVSaddress1", UtilFormatOut.checkNull(ba.getString("address1")));
request.setFieldValue("AVScity", UtilFormatOut.checkNull(ba.getString("city")));
request.setFieldValue("AVSstate", UtilFormatOut.checkNull(ba.getString("stateProvinceGeoId")));
request.setFieldValue("AVSzip", UtilFormatOut.checkNull(ba.getString("postalCode")));
request.setFieldValue("AVSCountryCode", UtilFormatOut.checkNull(ba.getString("countryGeoId")));
}
// Additional Information
request.setFieldValue("Comments", "This is building of request object");
String shippingRef = getShippingRefForOrder(orderId, delegator);
request.setFieldValue("ShippingRef", shippingRef);
request.setFieldValue("CardSecVal", UtilFormatOut.checkNull(cardSecurityCode));
//Display the request
if ("AUTH_ONLY".equals(transType)) {
Debug.logInfo("\nAuth Request:\n ======== " + request.getXML());
} else if ("AUTH_CAPTURE".equals(transType)) {
Debug.logInfo("\nAuth Capture Request:\n ======== " + request.getXML());
}
results.put("processAmount", amount);
} catch (InitializationException ie) {
Debug.logInfo("Unable to initialize request object", module);
} catch (FieldNotFoundException fnfe) {
Debug.logError("Unable to find XML field in template", module);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void buildCaptureTransaction(Map<String, Object> params, Delegator delegator, Map<String, Object> props, RequestIF request, Map<String, Object> results) {
GenericValue authTransaction = (GenericValue) params.get("authTransaction");
GenericValue creditCard = (GenericValue) params.get("creditCard");
BigDecimal amount = (BigDecimal) params.get("captureAmount");
String amountValue = amount.setScale(decimals, rounding).movePointRight(2).toPlainString();
String orderId = UtilFormatOut.checkNull((String)params.get("orderId"));
try {
//If there were no errors preparing the template, we can now specify the data
//Basic Auth Fields
request.setFieldValue("MerchantID", UtilFormatOut.checkNull(props.get("merchantId").toString()));
request.setFieldValue("BIN", BIN_VALUE);
request.setFieldValue("TxRefNum", UtilFormatOut.checkNull(authTransaction.get("referenceNum").toString()));
request.setFieldValue("OrderID", UtilFormatOut.checkNull(orderId));
request.setFieldValue("Amount", UtilFormatOut.checkNull(amountValue));
request.setFieldValue("PCDestName", UtilFormatOut.checkNull(creditCard.getString("firstNameOnCard") + creditCard.getString("lastNameOnCard")));
if (UtilValidate.isNotEmpty(creditCard.getString("contactMechId"))) {
GenericValue address = creditCard.getRelatedOne("PostalAddress");
if (address != null) {
request.setFieldValue("PCOrderNum", UtilFormatOut.checkNull(orderId));
request.setFieldValue("PCDestAddress1", UtilFormatOut.checkNull(address.getString("address1")));
request.setFieldValue("PCDestAddress2", UtilFormatOut.checkNull(address.getString("address2")));
request.setFieldValue("PCDestCity", UtilFormatOut.checkNull(address.getString("city")));
request.setFieldValue("PCDestState", UtilFormatOut.checkNull(address.getString("stateProvinceGeoId")));
request.setFieldValue("PCDestZip", UtilFormatOut.checkNull(address.getString("postalCode")));
}
}
//Display the request
Debug.logInfo("\nCapture Request:\n ======== " + request.getXML());
results.put("captureAmount", amount);
} catch (InitializationException ie) {
Debug.logInfo("Unable to initialize request object", module);
} catch (FieldNotFoundException fnfe) {
Debug.logError("Unable to find XML field in template" + fnfe.getMessage(), module);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void buildRefundTransaction(Map<String, Object> params, Map<String, Object> props, RequestIF request, Map<String, Object> results) {
GenericValue cc = (GenericValue) params.get("creditCard");
BigDecimal amount = (BigDecimal) params.get("refundAmount");
String amountValue = amount.setScale(decimals, rounding).movePointRight(2).toPlainString();
String number = UtilFormatOut.checkNull(cc.getString("cardNumber"));
String expDate = UtilFormatOut.checkNull(cc.getString("expireDate"));
expDate = formatExpDateForOrbital(expDate);
String orderId = UtilFormatOut.checkNull((String)params.get("orderId"));
try {
//If there were no errors preparing the template, we can now specify the data
//Basic Auth Fields
request.setFieldValue("IndustryType", "EC");
request.setFieldValue("MessageType", "R");
request.setFieldValue("MerchantID", UtilFormatOut.checkNull(props.get("merchantId").toString()));
request.setFieldValue("BIN", BIN_VALUE);
request.setFieldValue("OrderID", UtilFormatOut.checkNull(orderId));
request.setFieldValue("AccountNum", UtilFormatOut.checkNull(number));
request.setFieldValue("Amount", UtilFormatOut.checkNull(amountValue));
request.setFieldValue("Exp", UtilFormatOut.checkNull(expDate));
request.setFieldValue("Comments", "This is a credit card refund");
Debug.logInfo("\nRefund Request:\n ======== " + request.getXML());
results.put("refundAmount", amount);
} catch (InitializationException ie) {
Debug.logInfo("Unable to initialize request object", module);
} catch (FieldNotFoundException fnfe) {
Debug.logError("Unable to find XML field in template", module);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void buildReleaseTransaction(Map<String, Object> params, Delegator delegator, Map<String, Object> props, RequestIF request, Map<String, Object> results) {
BigDecimal amount = (BigDecimal) params.get("releaseAmount");
GenericValue authTransaction = (GenericValue) params.get("authTransaction");
String orderId = UtilFormatOut.checkNull((String)params.get("orderId"));
try {
//If there were no errors preparing the template, we can now specify the data
//Basic Auth Fields
request.setFieldValue("MerchantID", UtilFormatOut.checkNull(props.get("merchantId").toString()));
request.setFieldValue("BIN", BIN_VALUE);
request.setFieldValue("TxRefNum", UtilFormatOut.checkNull(authTransaction.get("referenceNum").toString()));
request.setFieldValue("OrderID", UtilFormatOut.checkNull(orderId));
//Display the request
Debug.logInfo("\nRelease Request:\n ======== " + request.getXML());
results.put("releaseAmount", amount);
} catch (InitializationException ie) {
Debug.logInfo("Unable to initialize request object", module);
} catch (FieldNotFoundException fnfe) {
Debug.logError("Unable to find XML field in template" + fnfe.getMessage(), module);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void initializeTransactionProcessor() {
//Create a Transaction Processor
//The Transaction Processor acquires and releases resources and executes transactions.
//It configures a pool of protocol engines, then uses the pool to execute transactions.
try {
tp = new TransactionProcessor();
} catch (InitializationException iex) {
Debug.logError("TransactionProcessor failed to initialize" + iex.getMessage(), module);
iex.printStackTrace();
}
}
private static Map<String, Object> processCard(RequestIF request) {
Map<String, Object> processCardResult = FastMap.newInstance();
try {
response = tp.process(request);
if (response.isApproved()) {
processCardResult.put("authResult", Boolean.TRUE);
} else {
processCardResult.put("authResult", Boolean.FALSE);
}
processCardResult.put("processCardResponse", response);
} catch (TransactionException tex) {
Debug.logError("TransactionProcessor failed to initialize" + tex.getMessage(), module);
tex.printStackTrace();
}
processCardResult.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
return processCardResult;
}
private static void processAuthTransResult(Map<String, Object> processCardResponseContext, Map<String, Object> results) {
ResponseIF response = (ResponseIF) processCardResponseContext.get("processCardResponse");
Boolean authResult = (Boolean) processCardResponseContext.get("authResult");
results.put("authResult", new Boolean(authResult.booleanValue()));
results.put("authFlag", response.getResponseCode());
results.put("authMessage", response.getMessage());
if (authResult.booleanValue()) { //passed
results.put("authCode", response.getAuthCode());
results.put("authRefNum", response.getTxRefNum());
results.put("cvCode", UtilFormatOut.checkNull(response.getCVV2RespCode()));
results.put("avsCode", response.getAVSResponseCode());
results.put("processAmount", new BigDecimal(results.get("processAmount").toString()));
} else {
results.put("authCode", response.getAuthCode());
results.put("processAmount", BigDecimal.ZERO);
results.put("authRefNum", OrbitalPaymentServices.ERROR);
}
Debug.logInfo("processAuthTransResult: " + results.toString(),module);
}
private static void processAuthCaptureTransResult(Map<String, Object> processCardResponseContext, Map<String, Object> results) {
ResponseIF response = (ResponseIF) processCardResponseContext.get("processCardResponse");
Boolean authResult = (Boolean) processCardResponseContext.get("authResult");
results.put("authResult", new Boolean(authResult.booleanValue()));
results.put("authFlag", response.getResponseCode());
results.put("authMessage", response.getMessage());
results.put("captureResult", new Boolean(authResult.booleanValue()));
results.put("captureFlag", response.getResponseCode());
results.put("captureMessage", response.getMessage());
results.put("captureRefNum", response.getTxRefNum());
if (authResult.booleanValue()) { //passed
results.put("authCode", response.getAuthCode());
results.put("authRefNum", response.getTxRefNum());
results.put("cvCode", UtilFormatOut.checkNull(response.getCVV2RespCode()));
results.put("avsCode", response.getAVSResponseCode());
results.put("processAmount", new BigDecimal(results.get("processAmount").toString()));
} else {
results.put("authCode", response.getAuthCode());
results.put("processAmount", BigDecimal.ZERO);
results.put("authRefNum", OrbitalPaymentServices.ERROR);
}
Debug.logInfo("processAuthCaptureTransResult: " + results.toString(),module);
}
private static void processCaptureTransResult(Map<String, Object> processCardResponseContext, Map<String, Object> results) {
ResponseIF response = (ResponseIF) processCardResponseContext.get("processCardResponse");
Boolean captureResult = (Boolean) processCardResponseContext.get("authResult");
results.put("captureResult", new Boolean(captureResult.booleanValue()));
results.put("captureFlag", response.getResponseCode());
results.put("captureMessage", response.getMessage());
results.put("captureRefNum", response.getTxRefNum());
if (captureResult.booleanValue()) { //passed
results.put("captureCode", response.getAuthCode());
results.put("captureAmount", new BigDecimal(results.get("captureAmount").toString()));
} else {
results.put("captureAmount", BigDecimal.ZERO);
}
Debug.logInfo("processCaptureTransResult: " + results.toString(),module);
}
private static void processRefundTransResult(Map<String, Object> processCardResponseContext, Map<String, Object> results) {
ResponseIF response = (ResponseIF) processCardResponseContext.get("processCardResponse");
Boolean refundResult = (Boolean) processCardResponseContext.get("authResult");
results.put("refundResult", new Boolean(refundResult.booleanValue()));
results.put("refundFlag", response.getResponseCode());
results.put("refundMessage", response.getMessage());
results.put("refundRefNum", response.getTxRefNum());
if (refundResult.booleanValue()) { //passed
results.put("refundCode", response.getAuthCode());
results.put("refundAmount", new BigDecimal(results.get("refundAmount").toString()));
} else {
results.put("refundAmount", BigDecimal.ZERO);
}
Debug.logInfo("processRefundTransResult: " + results.toString(),module);
}
private static void processReleaseTransResult(Map<String, Object> processCardResponseContext, Map<String, Object> results) {
ResponseIF response = (ResponseIF) processCardResponseContext.get("processCardResponse");
Boolean releaseResult = (Boolean) processCardResponseContext.get("authResult");
results.put("releaseResult", new Boolean(releaseResult.booleanValue()));
results.put("releaseFlag", response.getResponseCode());
results.put("releaseMessage", response.getMessage());
results.put("releaseRefNum", response.getTxRefNum());
if (releaseResult.booleanValue()) { //passed
results.put("releaseCode", response.getAuthCode());
results.put("releaseAmount", new BigDecimal(results.get("releaseAmount").toString()));
} else {
results.put("releaseAmount", BigDecimal.ZERO);
}
Debug.logInfo("processReleaseTransResult: " + results.toString(),module);
}
private static void printTransResult(ResponseIF response) {
Map<String, Object> generatedResponse = FastMap.newInstance();
generatedResponse.put("isGood", response.isGood());
generatedResponse.put("isError", response.isError());
generatedResponse.put("isQuickResponse", response.isQuickResponse());
generatedResponse.put("isApproved", response.isApproved());
generatedResponse.put("isDeclined", response.isDeclined());
generatedResponse.put("AuthCode", response.getAuthCode());
generatedResponse.put("TxRefNum", response.getTxRefNum());
generatedResponse.put("ResponseCode", response.getResponseCode());
generatedResponse.put("Status", response.getStatus());
generatedResponse.put("Message", response.getMessage());
generatedResponse.put("AVSCode", response.getAVSResponseCode());
generatedResponse.put("CVV2ResponseCode", response.getCVV2RespCode());
Debug.logInfo("printTransResult === " + generatedResponse.toString(),module);
}
private static String formatExpDateForOrbital(String expDate) {
String formatedDate = expDate.substring(0, 2) + expDate.substring(5);
return formatedDate;
}
private static String getShippingRefForOrder(String orderId, Delegator delegator) {
String shippingRef = "";
try {
GenericValue orderHeader = delegator.findOne("OrderHeader", false, UtilMisc.toMap("orderId", orderId));
GenericValue trackingCodeOrder = EntityUtil.getFirst(orderHeader.getRelated("TrackingCodeOrder"));
GenericValue trackingCode = null;
if (UtilValidate.isNotEmpty(trackingCodeOrder)) {
trackingCode = trackingCodeOrder.getRelatedOne("TrackingCode");
}
if (UtilValidate.isNotEmpty(trackingCode) && UtilValidate.isNotEmpty(trackingCode.getString("description"))) {
// get tracking code description and provide it into shipping reference.
shippingRef = trackingCode.getString("trackingCodeId") + "====" + trackingCode.getString("description");
} else {
shippingRef = "No Tracking Info processed in order";
}
} catch (GenericEntityException e) {
Debug.logError("Shipping Ref not found returning empty string", module);
e.printStackTrace();
}
return shippingRef;
}
private static Map<String, Object> validateRequest(Map<String, Object> params, Map props, RequestIF request) {
Map<String, Object> result = FastMap.newInstance();
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
return result;
}
}