Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java?rev=769510&r1=769509&r2=769510&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java (original) +++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java Tue Apr 28 19:45:06 2009 @@ -20,11 +20,9 @@ import java.math.BigDecimal; import java.sql.Timestamp; -import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Date; -import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -40,6 +38,7 @@ import org.ofbiz.base.util.GeneralException; import org.ofbiz.base.util.StringUtil; import org.ofbiz.base.util.UtilDateTime; +import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilMisc; import org.ofbiz.base.util.UtilNumber; import org.ofbiz.base.util.UtilProperties; @@ -82,6 +81,7 @@ private static BigDecimal ZERO = BigDecimal.ZERO; private static int decimals; private static int rounding; + public static final String resource_error = "OrderErrorUiLabels"; static { decimals = UtilNumber.getBigDecimalScale("order.decimals"); rounding = UtilNumber.getBigDecimalRoundingMode("order.rounding"); @@ -122,16 +122,16 @@ return ServiceUtil.returnError("Problems getting required information: orderPaymentPreference [" + orderPaymentPreferenceId + "]"); } OrderReadHelper orh = new OrderReadHelper(orderHeader); - + // get the total remaining BigDecimal totalRemaining = orh.getOrderGrandTotal(); - + // get the process attempts so far Long procAttempt = orderPaymentPreference.getLong("processAttempt"); if (procAttempt == null) { procAttempt = new Long(0); } - + // update the process attempt count orderPaymentPreference.set("processAttempt", new Long(procAttempt.longValue() + 1)); try { @@ -203,7 +203,7 @@ // according to the store should we try other cards? if ("Y".equals(productStore.getString("autoOrderCcTryOtherCards"))) { // get other credit cards for the bill to party - List otherPaymentMethodAndCreditCardList = null; + List<GenericValue> otherPaymentMethodAndCreditCardList = null; String billToPartyId = null; GenericValue billToParty = orh.getBillToParty(); if (billToParty != null) { @@ -219,7 +219,7 @@ } if (UtilValidate.isNotEmpty(otherPaymentMethodAndCreditCardList)) { - Iterator otherPaymentMethodAndCreditCardIter = otherPaymentMethodAndCreditCardList.iterator(); + Iterator<GenericValue> otherPaymentMethodAndCreditCardIter = otherPaymentMethodAndCreditCardList.iterator(); while (otherPaymentMethodAndCreditCardIter.hasNext()) { GenericValue otherPaymentMethodAndCreditCard = (GenericValue) otherPaymentMethodAndCreditCardIter.next(); @@ -281,7 +281,6 @@ results.put("finished", Boolean.FALSE); results.put("errors", Boolean.TRUE); results.put(ModelService.ERROR_MESSAGE, errMsg); - orderPaymentPreference.set("statusId", "PAYMENT_CANCELLED"); try { orderPaymentPreference.store(); @@ -301,26 +300,26 @@ * Processes payments through service calls to the defined processing service for the ProductStore/PaymentMethodType * @return APPROVED|FAILED|ERROR for complete processing of ALL payment methods. */ - public static Map authOrderPayments(DispatchContext dctx, Map context) { + public static Map<String, Object> authOrderPayments(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); String orderId = (String) context.get("orderId"); - Map result = new HashMap(); + Map<String, Object> result = FastMap.newInstance(); boolean reAuth = false; if (context.get("reAuth") != null) { reAuth = ((Boolean)context.get("reAuth")).booleanValue(); } // get the order header and payment preferences GenericValue orderHeader = null; - List paymentPrefs = null; + List<GenericValue> paymentPrefs = null; try { // get the OrderHeader orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId)); // get the payments to auth - Map lookupMap = UtilMisc.toMap("orderId", orderId, "statusId", "PAYMENT_NOT_AUTH"); - List orderList = UtilMisc.toList("maxAmount"); + Map<String, String> lookupMap = UtilMisc.toMap("orderId", orderId, "statusId", "PAYMENT_NOT_AUTH"); + List<String> orderList = UtilMisc.toList("maxAmount"); paymentPrefs = delegator.findByAnd("OrderPaymentPreference", lookupMap, orderList); if (reAuth) { lookupMap.put("orderId", orderId); @@ -346,8 +345,8 @@ // loop through and auth each order payment preference int finished = 0; int hadError = 0; - List messages = FastList.newInstance(); - Iterator payments = paymentPrefs.iterator(); + List<String> messages = FastList.newInstance(); + Iterator<GenericValue> payments = paymentPrefs.iterator(); while (payments.hasNext()) { GenericValue paymentPref = (GenericValue) payments.next(); if (reAuth && "PAYMENT_AUTHORIZED".equals(paymentPref.getString("statusId"))) { @@ -366,11 +365,11 @@ continue; } } - Map authContext = new HashMap(); + Map<String, Object> authContext = FastMap.newInstance(); authContext.put("orderPaymentPreferenceId", paymentPref.getString("orderPaymentPreferenceId")); authContext.put("userLogin", context.get("userLogin")); - Map results = null; + Map<String, Object> results = null; try { results = dispatcher.runSync("authOrderPaymentPreference", authContext); } catch (GenericServiceException se) { @@ -600,7 +599,6 @@ return paymentSettings; } - private static String getPayToPartyId(GenericValue orderHeader) { String payToPartyId = "Company"; // default value GenericValue productStore = null; @@ -618,9 +616,7 @@ return payToPartyId; } - - - private static String getBillingInformation(OrderReadHelper orh, GenericValue paymentPreference, Map toContext) throws GenericEntityException { + private static String getBillingInformation(OrderReadHelper orh, GenericValue paymentPreference, Map<String, Object> toContext) throws GenericEntityException { // gather the payment related objects. String paymentMethodTypeId = paymentPreference.getString("paymentMethodTypeId"); GenericValue paymentMethod = paymentPreference.getRelatedOne("PaymentMethod"); @@ -653,7 +649,7 @@ GenericValue billToPersonOrGroup = orh.getBillToParty(); GenericValue billToEmail = null; - Collection emails = ContactHelper.getContactMech(billToPersonOrGroup.getRelatedOne("Party"), "PRIMARY_EMAIL", "EMAIL_ADDRESS", false); + Collection<GenericValue> emails = ContactHelper.getContactMech(billToPersonOrGroup.getRelatedOne("Party"), "PRIMARY_EMAIL", "EMAIL_ADDRESS", false); if (UtilValidate.isNotEmpty(emails)) { billToEmail = (GenericValue) emails.iterator().next(); @@ -670,33 +666,42 @@ * Releases authorizations through service calls to the defined processing service for the ProductStore/PaymentMethodType * @return COMPLETE|FAILED|ERROR for complete processing of ALL payments. */ - public static Map releaseOrderPayments(DispatchContext dctx, Map context) { + public static Map<String, Object> releaseOrderPayments(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); - String orderId = (String) context.get("orderId"); - - Map result = new HashMap(); - + String orderPaymentPreferenceId = (String) context.get("orderPaymentPreferenceId"); + Map<String, Object> result = ServiceUtil.returnSuccess(); + // Get the OrderPaymentPreference + GenericValue paymentPref = null; + try { + paymentPref = delegator.findOne("OrderPaymentPreference", UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreferenceId), false); + } catch ( GenericEntityException e ) { + String errMsg = "Problem getting OrderPaymentPreference for orderPaymentPreferenceId " + orderPaymentPreferenceId; + Debug.logWarning(e, errMsg, module); + return ServiceUtil.returnError(errMsg); + } + // Error if no OrderPaymentPreference was found + if (paymentPref == null) { + String errMsg = "Could not find OrderPaymentPreference with orderPaymentPreferenceId: " + orderPaymentPreferenceId; + Debug.logWarning(errMsg, module); + return ServiceUtil.returnError(errMsg); + } + String orderId = paymentPref.getString("orderId"); // get the payment preferences - List paymentPrefs = null; - + List<GenericValue> paymentPrefs = null; try { // get the valid payment prefs - List othExpr = UtilMisc.toList(EntityCondition.makeCondition("paymentMethodTypeId", EntityOperator.EQUALS, "EFT_ACCOUNT")); + List<EntityExpr> othExpr = UtilMisc.toList(EntityCondition.makeCondition("paymentMethodTypeId", EntityOperator.EQUALS, "EFT_ACCOUNT")); othExpr.add(EntityCondition.makeCondition("paymentMethodTypeId", EntityOperator.EQUALS, "GIFT_CARD")); othExpr.add(EntityCondition.makeCondition("paymentMethodTypeId", EntityOperator.EQUALS, "FIN_ACCOUNT")); EntityCondition con1 = EntityCondition.makeCondition(othExpr, EntityJoinOperator.OR); - EntityCondition statExpr = EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PAYMENT_SETTLED"); EntityCondition con2 = EntityCondition.makeCondition(UtilMisc.toList(con1, statExpr), EntityOperator.AND); - EntityCondition authExpr = EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PAYMENT_AUTHORIZED"); EntityCondition con3 = EntityCondition.makeCondition(UtilMisc.toList(con2, authExpr), EntityOperator.OR); - EntityExpr orderExpr = EntityCondition.makeCondition("orderId", EntityOperator.EQUALS, orderId); EntityCondition con4 = EntityCondition.makeCondition(UtilMisc.toList(con3, orderExpr), EntityOperator.AND); - paymentPrefs = delegator.findList("OrderPaymentPreference", con4, null, null, null, false); } catch (GenericEntityException gee) { Debug.logError(gee, "Problems getting entity record(s), see stack trace", module); @@ -714,12 +719,12 @@ } // iterate over the prefs and release each one - List finished = FastList.newInstance(); - Iterator payments = paymentPrefs.iterator(); + List<GenericValue> finished = FastList.newInstance(); + Iterator<GenericValue> payments = paymentPrefs.iterator(); while (payments.hasNext()) { - GenericValue paymentPref = (GenericValue) payments.next(); - Map releaseContext = UtilMisc.toMap("userLogin", userLogin, "orderPaymentPreferenceId", paymentPref.getString("orderPaymentPreferenceId")); - Map releaseResult = null; + paymentPref = (GenericValue) payments.next(); + Map<String, Object> releaseContext = UtilMisc.toMap("userLogin", userLogin, "orderPaymentPreferenceId", paymentPref.getString("orderPaymentPreferenceId")); + Map<String, Object> releaseResult = null; try { releaseResult = dispatcher.runSync("releaseOrderPaymentPreference", releaseContext); } catch ( GenericServiceException e ) { @@ -743,20 +748,96 @@ return result; } - + + public static Map<String, Object> processCreditResult(DispatchContext dctx, Map<String, ? extends Object> context) { + GenericDelegator delegator = dctx.getDelegator(); + LocalDispatcher dispatcher = dctx.getDispatcher(); + GenericValue userLogin = (GenericValue) context.get("userLogin"); + String currencyUomId = (String) context.get("currencyUomId"); + GenericValue paymentPref = (GenericValue) context.get("orderPaymentPreference"); + Boolean creditResponse = (Boolean) context.get("creditResult"); + // create the PaymentGatewayResponse + String responseId = delegator.getNextSeqId("PaymentGatewayResponse"); + GenericValue pgCredit = delegator.makeValue("PaymentGatewayResponse"); + pgCredit.set("paymentGatewayResponseId", responseId); + pgCredit.set("paymentServiceTypeEnumId", CREDIT_SERVICE_TYPE); + pgCredit.set("orderPaymentPreferenceId", paymentPref.get("orderPaymentPreferenceId")); + pgCredit.set("paymentMethodTypeId", paymentPref.get("paymentMethodTypeId")); + pgCredit.set("paymentMethodId", paymentPref.get("paymentMethodId")); + pgCredit.set("transCodeEnumId", "PGT_CREDIT"); + // set the credit info + pgCredit.set("amount", context.get("creditAmount")); + pgCredit.set("referenceNum", context.get("creditRefNum")); + pgCredit.set("altReference", context.get("creditAltRefNum")); + pgCredit.set("gatewayCode", context.get("creditCode")); + pgCredit.set("gatewayFlag", context.get("creditFlag")); + pgCredit.set("gatewayMessage", context.get("creditMessage")); + pgCredit.set("transactionDate", UtilDateTime.nowTimestamp()); + pgCredit.set("currencyUomId", currencyUomId); + // store the gateway response + savePgr(dctx, pgCredit); + // create the internal messages + List<String> messages = UtilGenerics.cast(context.get("internalRespMsgs")); + if (UtilValidate.isNotEmpty(messages)) { + Iterator<String> i = messages.iterator(); + while (i.hasNext()) { + GenericValue respMsg = delegator.makeValue("PaymentGatewayRespMsg"); + String respMsgId = delegator.getNextSeqId("PaymentGatewayRespMsg"); + String message = (String) i.next(); + respMsg.set("paymentGatewayRespMsgId", respMsgId); + respMsg.set("paymentGatewayResponseId", responseId); + respMsg.set("pgrMessage", message); + // store the messages + savePgr(dctx, respMsg); + } + } + if (creditResponse != null && creditResponse.booleanValue()) { + paymentPref.set("statusId", "PAYMENT_CANCELLED"); + try { + paymentPref.store(); + } catch (GenericEntityException e) { + Debug.logError(e, "Problem storing updated payment preference; authorization was credit!", module); + } + // cancel any payment records + List<GenericValue> paymentList = null; + try { + paymentList = paymentPref.getRelated("Payment"); + } catch (GenericEntityException e) { + Debug.logError(e, "Unable to get Payment records from OrderPaymentPreference : " + paymentPref, module); + } + if (paymentList != null) { + Iterator<GenericValue> pi = paymentList.iterator(); + while (pi.hasNext()) { + GenericValue pay = (GenericValue) pi.next(); + try { + Map<String, Object> cancelResults = dispatcher.runSync("setPaymentStatus", UtilMisc.toMap("userLogin", userLogin, "paymentId", pay.get("paymentId"), "statusId", "PMNT_CANCELLED")); + if (ServiceUtil.isError(cancelResults)) { + throw new GenericServiceException(ServiceUtil.getErrorMessage(cancelResults)); + } + } catch (GenericServiceException e) { + Debug.logError(e, "Unable to cancel Payment : " + pay, module); + } + } + } + } else { + String errMsg = "Credit failed for pref : " + paymentPref; + Debug.logError(errMsg, module); + return ServiceUtil.returnFailure(errMsg); + } + return ServiceUtil.returnSuccess(); + } + /** * * Releases authorization for a single OrderPaymentPreference through service calls to the defined processing service for the ProductStore/PaymentMethodType * @return SUCCESS|FAILED|ERROR for complete processing of payment. */ - public static Map releaseOrderPaymentPreference(DispatchContext dctx, Map context) { + public static Map<String, Object> releaseOrderPaymentPreference(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); String orderPaymentPreferenceId = (String) context.get("orderPaymentPreferenceId"); - - Map result = ServiceUtil.returnSuccess(); - + Map<String, Object> result = ServiceUtil.returnSuccess(); // Get the OrderPaymentPreference GenericValue paymentPref = null; try { @@ -766,39 +847,34 @@ Debug.logWarning(e, errMsg, module); return ServiceUtil.returnError(errMsg); } - // Error if no OrderPaymentPreference was found if (paymentPref == null) { String errMsg = "Could not find OrderPaymentPreference with orderPaymentPreferenceId: " + orderPaymentPreferenceId; Debug.logWarning(errMsg, module); return ServiceUtil.returnError(errMsg); } - // Get the OrderHeader GenericValue orderHeader = null; + String orderId = paymentPref.getString("orderId"); try { - orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", paymentPref.getString("orderId"))); + orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId)); } catch ( GenericEntityException e ) { - String errMsg = "Problem getting OrderHeader for orderId " + paymentPref.getString("orderId"); + String errMsg = "Problem getting OrderHeader for orderId " + orderId; Debug.logWarning(e, errMsg, module); return ServiceUtil.returnError(errMsg); } - // Error if no OrderHeader was found if (orderHeader == null) { - String errMsg = "Could not find OrderHeader with orderId: " + paymentPref.getString("orderId") + "; not processing payments."; + String errMsg = "Could not find OrderHeader with orderId: " + orderId + "; not processing payments."; Debug.logWarning(errMsg, module); return ServiceUtil.returnError(errMsg); } - OrderReadHelper orh = new OrderReadHelper(orderHeader); String currency = orh.getCurrency(); - // look up the payment configuration settings String serviceName = null; String paymentConfig = null; String paymentGatewayConfigId = null; - // get the payment settings i.e. serviceName and config properties file name GenericValue paymentSettings = getPaymentSettings(orderHeader, paymentPref, RELEASE_SERVICE_TYPE, false); if (paymentSettings != null) { @@ -811,7 +887,6 @@ } paymentConfig = paymentSettings.getString("paymentPropertiesPath"); paymentGatewayConfigId = paymentSettings.getString("paymentGatewayConfigId"); - if (serviceName == null) { String errMsg = "No payment release service for - " + paymentPref.getString("paymentMethodTypeId"); Debug.logWarning(errMsg, module); @@ -822,22 +897,19 @@ Debug.logWarning(errMsg, module); return ServiceUtil.returnError(errMsg); } - if (paymentConfig == null || paymentConfig.length() == 0) { paymentConfig = "payment.properties"; } - GenericValue authTransaction = PaymentGatewayServices.getAuthTransaction(paymentPref); - Map releaseContext = new HashMap(); + Map<String, Object> releaseContext = FastMap.newInstance(); releaseContext.put("orderPaymentPreference", paymentPref); releaseContext.put("releaseAmount", authTransaction.getBigDecimal("amount")); releaseContext.put("currency", currency); releaseContext.put("paymentConfig", paymentConfig); releaseContext.put("paymentGatewayConfigId", paymentGatewayConfigId); releaseContext.put("userLogin", userLogin); - // run the defined service - Map releaseResult = null; + Map<String, Object> releaseResult = null; try { releaseResult = dispatcher.runSync(serviceName, releaseContext, TX_TIME, true); } catch (GenericServiceException e) { @@ -845,15 +917,14 @@ Debug.logError(e,errMsg, module); return ServiceUtil.returnError(errMsg); } - // get the release result code if (releaseResult != null && !ServiceUtil.isError(releaseResult)) { - Map releaseResRes; + Map<String, Object> releaseResRes; try { ModelService model = dctx.getModelService("processReleaseResult"); releaseResult.put("orderPaymentPreference", paymentPref); releaseResult.put("userLogin", userLogin); - Map resCtx = model.makeValid(releaseResult, ModelService.IN_PARAM); + Map<String, Object> resCtx = model.makeValid(releaseResult, ModelService.IN_PARAM); releaseResRes = dispatcher.runSync(model.name, resCtx); } catch (GenericServiceException e) { Debug.logError(e, module); @@ -866,18 +937,16 @@ saveError(dispatcher, userLogin, paymentPref, releaseResult, RELEASE_SERVICE_TYPE, "PGT_RELEASE"); result = ServiceUtil.returnError(ServiceUtil.getErrorMessage(releaseResult)); } - return result; } - - public static Map processReleaseResult(DispatchContext dctx, Map context) { + + public static Map<String, Object> processReleaseResult(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); - + String currencyUomId = (String) context.get("currencyUomId"); GenericValue paymentPref = (GenericValue) context.get("orderPaymentPreference"); Boolean releaseResponse = (Boolean) context.get("releaseResult"); - // create the PaymentGatewayResponse String responseId = delegator.getNextSeqId("PaymentGatewayResponse"); GenericValue pgResponse = delegator.makeValue("PaymentGatewayResponse"); @@ -887,22 +956,21 @@ pgResponse.set("paymentMethodTypeId", paymentPref.get("paymentMethodTypeId")); pgResponse.set("paymentMethodId", paymentPref.get("paymentMethodId")); pgResponse.set("transCodeEnumId", "PGT_RELEASE"); - // set the release info + pgResponse.set("amount", context.get("releaseAmount")); pgResponse.set("referenceNum", context.get("releaseRefNum")); pgResponse.set("altReference", context.get("releaseAltRefNum")); pgResponse.set("gatewayCode", context.get("releaseCode")); pgResponse.set("gatewayFlag", context.get("releaseFlag")); pgResponse.set("gatewayMessage", context.get("releaseMessage")); pgResponse.set("transactionDate", UtilDateTime.nowTimestamp()); - + pgResponse.set("currencyUomId", currencyUomId); // store the gateway response savePgr(dctx, pgResponse); - // create the internal messages - List messages = (List) context.get("internalRespMsgs"); + List<String> messages = UtilGenerics.cast(context.get("internalRespMsgs")); if (UtilValidate.isNotEmpty(messages)) { - Iterator i = messages.iterator(); + Iterator<String> i = messages.iterator(); while (i.hasNext()) { GenericValue respMsg = delegator.makeValue("PaymentGatewayRespMsg"); String respMsgId = delegator.getNextSeqId("PaymentGatewayRespMsg"); @@ -910,12 +978,11 @@ respMsg.set("paymentGatewayRespMsgId", respMsgId); respMsg.set("paymentGatewayResponseId", responseId); respMsg.set("pgrMessage", message); - // store the messages savePgr(dctx, respMsg); } } - + if (releaseResponse != null && releaseResponse.booleanValue()) { paymentPref.set("statusId", "PAYMENT_CANCELLED"); try { @@ -923,21 +990,19 @@ } catch (GenericEntityException e) { Debug.logError(e, "Problem storing updated payment preference; authorization was released!", module); } - // cancel any payment records - List paymentList = null; + List<GenericValue> paymentList = null; try { paymentList = paymentPref.getRelated("Payment"); } catch (GenericEntityException e) { Debug.logError(e, "Unable to get Payment records from OrderPaymentPreference : " + paymentPref, module); } - if (paymentList != null) { - Iterator pi = paymentList.iterator(); + Iterator<GenericValue> pi = paymentList.iterator(); while (pi.hasNext()) { GenericValue pay = (GenericValue) pi.next(); try { - Map cancelResults = dispatcher.runSync("setPaymentStatus", UtilMisc.toMap("userLogin", userLogin, "paymentId", pay.get("paymentId"), "statusId", "PMNT_CANCELLED")); + Map<String, Object> cancelResults = dispatcher.runSync("setPaymentStatus", UtilMisc.toMap("userLogin", userLogin, "paymentId", pay.get("paymentId"), "statusId", "PMNT_CANCELLED")); if (ServiceUtil.isError(cancelResults)) { throw new GenericServiceException(ServiceUtil.getErrorMessage(cancelResults)); } @@ -951,15 +1016,14 @@ Debug.logError(errMsg, module); return ServiceUtil.returnFailure(errMsg); } - return ServiceUtil.returnSuccess(); } - + /** * Captures payments through service calls to the defined processing service for the ProductStore/PaymentMethodType * @return COMPLETE|FAILED|ERROR for complete processing of ALL payment methods. */ - public static Map capturePaymentsByInvoice(DispatchContext dctx, Map context) { + public static Map<String, Object> capturePaymentsByInvoice(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); @@ -980,7 +1044,7 @@ } // get the OrderItemBilling records for this invoice - List orderItemBillings = null; + List<GenericValue> orderItemBillings = null; try { orderItemBillings = invoice.getRelated("OrderItemBilling"); } catch (GenericEntityException e) { @@ -995,7 +1059,7 @@ String testOrderId = null; boolean allSameOrder = true; if (orderItemBillings != null) { - Iterator oii = orderItemBillings.iterator(); + Iterator<GenericValue> oii = orderItemBillings.iterator(); while (oii.hasNext()) { GenericValue oib = (GenericValue) oii.next(); String orderId = oib.getString("orderId"); @@ -1021,7 +1085,7 @@ if (Debug.infoOn()) Debug.logInfo("(Capture) Invoice [#" + invoiceId + "] total: " + invoiceTotal, module); // now capture the order - Map serviceContext = UtilMisc.toMap("userLogin", userLogin, "orderId", testOrderId, "invoiceId", invoiceId, "captureAmount", invoiceTotal); + Map<String, Object> serviceContext = UtilMisc.toMap("userLogin", userLogin, "orderId", testOrderId, "invoiceId", invoiceId, "captureAmount", invoiceTotal); if (UtilValidate.isNotEmpty(billingAccountId)) { serviceContext.put("billingAccountId", billingAccountId); } @@ -1037,7 +1101,7 @@ * Captures payments through service calls to the defined processing service for the ProductStore/PaymentMethodType * @return COMPLETE|FAILED|ERROR for complete processing of ALL payment methods. */ - public static Map captureOrderPayments(DispatchContext dctx, Map context) { + public static Map<String, Object> captureOrderPayments(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); @@ -1049,15 +1113,15 @@ // get the order header and payment preferences GenericValue orderHeader = null; - List paymentPrefs = null; - List paymentPrefsBa = null; + List<GenericValue> paymentPrefs = null; + List<GenericValue> paymentPrefsBa = null; try { orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId)); // get the payment prefs - Map lookupMap = UtilMisc.toMap("orderId", orderId, "statusId", "PAYMENT_AUTHORIZED"); - List orderList = UtilMisc.toList("-maxAmount"); + Map<String, String> lookupMap = UtilMisc.toMap("orderId", orderId, "statusId", "PAYMENT_AUTHORIZED"); + List<String> orderList = UtilMisc.toList("-maxAmount"); paymentPrefs = delegator.findByAnd("OrderPaymentPreference", lookupMap, orderList); if (UtilValidate.isNotEmpty(billingAccountId)) { @@ -1082,14 +1146,17 @@ BigDecimal totalPayments = PaymentWorker.getPaymentsTotal(orh.getOrderPayments()); totalPayments = totalPayments.setScale(decimals, rounding); BigDecimal remainingTotal = orderGrandTotal.subtract(totalPayments); - if (Debug.infoOn()) Debug.logInfo("The Remaining Total for order: " + orderId + " is: " + remainingTotal, module); + if (Debug.infoOn()) { + Debug.logInfo("The Remaining Total for order: " + orderId + " is: " + remainingTotal, module); + } // The amount to capture cannot be greater than the remaining total amountToCapture = amountToCapture.min(remainingTotal); - if (Debug.infoOn()) Debug.logInfo("Actual Expected Capture Amount : " + amountToCapture, module); - + if (Debug.infoOn()) { + Debug.logInfo("Actual Expected Capture Amount : " + amountToCapture, module); + } // Process billing accounts payments if (UtilValidate.isNotEmpty(paymentPrefsBa)) { - Iterator paymentsBa = paymentPrefsBa.iterator(); + Iterator<GenericValue> paymentsBa = paymentPrefsBa.iterator(); while (paymentsBa.hasNext()) { GenericValue paymentPref = (GenericValue) paymentsBa.next(); @@ -1111,7 +1178,7 @@ // If we have an invoice, we find unapplied payments associated // to the billing account and we apply them to the invoice if (UtilValidate.isNotEmpty(invoiceId)) { - Map captureResult = null; + Map<String, Object> captureResult = null; try { captureResult = dispatcher.runSync("captureBillingAccountPayments", UtilMisc.<String, Object>toMap("invoiceId", invoiceId, "billingAccountId", billingAccountId, @@ -1155,7 +1222,7 @@ if (authAmount.compareTo(amountCaptured) > 0) { BigDecimal splitAmount = authAmount.subtract(amountCaptured); try { - Map splitCtx = UtilMisc.toMap("userLogin", userLogin, "orderPaymentPreference", paymentPref, "splitAmount", splitAmount); + Map<String, Object> splitCtx = UtilMisc.<String, Object>toMap("userLogin", userLogin, "orderPaymentPreference", paymentPref, "splitAmount", splitAmount); dispatcher.addCommitService("processCaptureSplitPayment", splitCtx, true); } catch (GenericServiceException e) { Debug.logWarning(e, "Problem processing the capture split payment", module); @@ -1171,7 +1238,7 @@ // iterate over the prefs and capture each one until we meet our total if (UtilValidate.isNotEmpty(paymentPrefs)) { - Iterator payments = paymentPrefs.iterator(); + Iterator<GenericValue> payments = paymentPrefs.iterator(); while (payments.hasNext()) { // DEJ20060708: Do we really want to just log and ignore the errors like this? I've improved a few of these in a review today, but it is being done all over... GenericValue paymentPref = (GenericValue) payments.next(); @@ -1216,7 +1283,7 @@ amountThisCapture = authAmount; } - Map captureResult = capturePayment(dctx, userLogin, orh, paymentPref, amountThisCapture); + Map<String, Object> captureResult = capturePayment(dctx, userLogin, orh, paymentPref, amountThisCapture); if (captureResult != null && !ServiceUtil.isError(captureResult)) { // credit card processors return captureAmount, but gift certificate processors return processAmount BigDecimal amountCaptured = (BigDecimal) captureResult.get("captureAmount"); @@ -1244,7 +1311,7 @@ if (authAmount.compareTo(amountCaptured) > 0) { BigDecimal splitAmount = authAmount.subtract(amountCaptured); try { - Map splitCtx = UtilMisc.toMap("userLogin", userLogin, "orderPaymentPreference", paymentPref, "splitAmount", splitAmount); + Map<String, Object> splitCtx = UtilMisc.<String, Object>toMap("userLogin", userLogin, "orderPaymentPreference", paymentPref, "splitAmount", splitAmount); dispatcher.addCommitService("processCaptureSplitPayment", splitCtx, true); } catch (GenericServiceException e) { Debug.logWarning(e, "Problem processing the capture split payment", module); @@ -1265,17 +1332,17 @@ return ServiceUtil.returnError("Cannot ship order because credit card captures were unsuccessful"); } } - Map result = ServiceUtil.returnSuccess(); + Map<String, Object> result = ServiceUtil.returnSuccess(); result.put("processResult", "FAILED"); return result; } else { - Map result = ServiceUtil.returnSuccess(); + Map<String, Object> result = ServiceUtil.returnSuccess(); result.put("processResult", "COMPLETE"); return result; } } - public static Map processCaptureSplitPayment(DispatchContext dctx, Map context) { + public static Map<String, Object> processCaptureSplitPayment(DispatchContext dctx, Map<String, ? extends Object> context) { LocalDispatcher dispatcher = dctx.getDispatcher(); GenericDelegator delegator = dctx.getDelegator(); @@ -1302,7 +1369,7 @@ } if (Debug.verboseOn()) Debug.logVerbose("New preference : " + newPref, module); - Map processorResult = null; + Map<String, Object> processorResult = null; try { // create the new payment preference delegator.create(newPref); @@ -1333,7 +1400,7 @@ } // Deprecated: use captureBillingAccountPayments instead of this. - public static Map captureBillingAccountPayment(DispatchContext dctx, Map context) { + public static Map<String, Object> captureBillingAccountPayment(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); @@ -1341,18 +1408,18 @@ String billingAccountId = (String) context.get("billingAccountId"); BigDecimal captureAmount = (BigDecimal) context.get("captureAmount"); String orderId = (String) context.get("orderId"); - Map results = ServiceUtil.returnSuccess(); + Map<String, Object> results = ServiceUtil.returnSuccess(); try { // Note that the partyIdFrom of the Payment should be the partyIdTo of the invoice, since you're receiving a payment from the party you billed GenericValue invoice = delegator.findByPrimaryKey("Invoice", UtilMisc.toMap("invoiceId", invoiceId)); - Map paymentParams = UtilMisc.toMap("paymentTypeId", "CUSTOMER_PAYMENT", "paymentMethodTypeId", "EXT_BILLACT", + Map<String, Object> paymentParams = UtilMisc.<String, Object>toMap("paymentTypeId", "CUSTOMER_PAYMENT", "paymentMethodTypeId", "EXT_BILLACT", "partyIdFrom", invoice.getString("partyId"), "partyIdTo", invoice.getString("partyIdFrom"), "statusId", "PMNT_RECEIVED", "effectiveDate", UtilDateTime.nowTimestamp()); paymentParams.put("amount", captureAmount); paymentParams.put("currencyUomId", invoice.getString("currencyUomId")); paymentParams.put("userLogin", userLogin); - Map tmpResult = dispatcher.runSync("createPayment", paymentParams); + Map<String, Object> tmpResult = dispatcher.runSync("createPayment", paymentParams); if (ServiceUtil.isError(tmpResult)) { return tmpResult; } @@ -1375,7 +1442,7 @@ return ServiceUtil.returnError("No paymentGatewayResponse created for invoice [" + invoiceId + "] and billing account [" + billingAccountId + "]: Order with ID [" + orderId + "] not found!"); } // See if there's an orderPaymentPreference - there should be only one OPP for EXT_BILLACT per order - List orderPaymentPreferences = delegator.findByAnd("OrderPaymentPreference", UtilMisc.toMap("orderId", orderId, "paymentMethodTypeId", "EXT_BILLACT")); + List<GenericValue> orderPaymentPreferences = delegator.findByAnd("OrderPaymentPreference", UtilMisc.toMap("orderId", orderId, "paymentMethodTypeId", "EXT_BILLACT")); if (orderPaymentPreferences.size() > 0) { GenericValue orderPaymentPreference = EntityUtil.getFirst(orderPaymentPreferences); @@ -1416,26 +1483,23 @@ return results; } - public static Map captureBillingAccountPayments(DispatchContext dctx, Map context) { + public static Map<String, Object> captureBillingAccountPayments(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); - LocalDispatcher dispatcher = dctx.getDispatcher(); - GenericValue userLogin = (GenericValue) context.get("userLogin"); String invoiceId = (String) context.get("invoiceId"); String billingAccountId = (String) context.get("billingAccountId"); BigDecimal captureAmount = (BigDecimal) context.get("captureAmount"); captureAmount = captureAmount.setScale(decimals, rounding); - String orderId = (String) context.get("orderId"); BigDecimal capturedAmount = BigDecimal.ZERO; try { // Select all the unapplied payment applications associated to the billing account - List conditionList = UtilMisc.toList(EntityCondition.makeCondition("billingAccountId", EntityOperator.EQUALS, billingAccountId), + List<EntityExpr> conditionList = UtilMisc.toList(EntityCondition.makeCondition("billingAccountId", EntityOperator.EQUALS, billingAccountId), EntityCondition.makeCondition("invoiceId", EntityOperator.EQUALS, GenericEntity.NULL_FIELD)); EntityCondition conditions = EntityCondition.makeCondition(conditionList, EntityOperator.AND); - List paymentApplications = delegator.findList("PaymentApplication", conditions, null, UtilMisc.toList("-amountApplied"), null, false); + List<GenericValue> paymentApplications = delegator.findList("PaymentApplication", conditions, null, UtilMisc.toList("-amountApplied"), null, false); if (UtilValidate.isNotEmpty(paymentApplications)) { - Iterator paymentApplicationsIt = paymentApplications.iterator(); + Iterator<GenericValue> paymentApplicationsIt = paymentApplications.iterator(); while (paymentApplicationsIt.hasNext()) { if (capturedAmount.compareTo(captureAmount) >= 0) { // we have captured all the amount required @@ -1475,16 +1539,16 @@ return ServiceUtil.returnError(ex.getMessage()); } capturedAmount = capturedAmount.setScale(decimals, rounding); - Map results = ServiceUtil.returnSuccess(); + Map<String, Object> results = ServiceUtil.returnSuccess(); results.put("captureAmount", capturedAmount); return results; } - private static Map capturePayment(DispatchContext dctx, GenericValue userLogin, OrderReadHelper orh, GenericValue paymentPref, BigDecimal amount) { + private static Map<String, Object> capturePayment(DispatchContext dctx, GenericValue userLogin, OrderReadHelper orh, GenericValue paymentPref, BigDecimal amount) { return capturePayment(dctx, userLogin, orh, paymentPref, amount, null); } - private static Map capturePayment(DispatchContext dctx, GenericValue userLogin, OrderReadHelper orh, GenericValue paymentPref, BigDecimal amount, GenericValue authTrans) { + private static Map<String, Object> capturePayment(DispatchContext dctx, GenericValue userLogin, OrderReadHelper orh, GenericValue paymentPref, BigDecimal amount, GenericValue authTrans) { LocalDispatcher dispatcher = dctx.getDispatcher(); // look up the payment configuration settings String serviceName = null; @@ -1521,7 +1585,7 @@ if (!PaymentGatewayServices.checkAuthValidity(paymentPref, paymentConfig)) { try { // re-auth required before capture - Map processorResult = PaymentGatewayServices.authPayment(dispatcher, userLogin, orh, paymentPref, amount, true, null); + Map<String, Object> processorResult = PaymentGatewayServices.authPayment(dispatcher, userLogin, orh, paymentPref, amount, true, null); boolean authResult = false; if (processorResult != null) { @@ -1553,7 +1617,7 @@ } // prepare the context for the capture service (must follow the ccCaptureInterface - Map captureContext = new HashMap(); + Map<String, Object> captureContext = FastMap.newInstance(); captureContext.put("userLogin", userLogin); captureContext.put("orderPaymentPreference", paymentPref); captureContext.put("paymentConfig", paymentConfig); @@ -1563,7 +1627,7 @@ // this is necessary because the ccCaptureInterface uses "captureAmount" but the paymentProcessInterface uses "processAmount" try { ModelService captureService = dctx.getModelService(serviceName); - Set inParams = captureService.getInParamNames(); + Set<String> inParams = captureService.getInParamNames(); if (inParams.contains("captureAmount")) { captureContext.put("captureAmount", amount); } else if (inParams.contains("processAmount")) { @@ -1583,7 +1647,7 @@ Debug.logInfo("Capture [" + serviceName + "] : " + captureContext, module); // now invoke the capture service - Map captureResult = null; + Map<String, Object> captureResult = null; try { // NOTE DEJ20070819 calling this with a new transaction synchronously caused a deadlock because in this //transaction OrderHeader was updated and with this transaction paused and waiting for the new transaction @@ -1615,8 +1679,8 @@ return captureResult; } - private static void saveError(LocalDispatcher dispatcher, GenericValue userLogin, GenericValue paymentPref, Map result, String serviceType, String transactionCode) { - Map serviceContext = new HashMap(); + private static void saveError(LocalDispatcher dispatcher, GenericValue userLogin, GenericValue paymentPref, Map<String, Object> result, String serviceType, String transactionCode) { + Map<String, Object> serviceContext = FastMap.newInstance(); serviceContext.put("paymentServiceTypeEnumId", serviceType); serviceContext.put("orderPaymentPreference", paymentPref); serviceContext.put("transCodeEnumId", transactionCode); @@ -1630,13 +1694,12 @@ } } - public static Map storePaymentErrorMessage(DispatchContext dctx, Map context) { + public static Map<String, Object> storePaymentErrorMessage(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); GenericValue paymentPref = (GenericValue) context.get("orderPaymentPreference"); String serviceType = (String) context.get("paymentServiceTypeEnumId"); String transactionCode = (String) context.get("transCodeEnumId"); - Map result = (Map) context.get("serviceResultMap"); - + Map<String, Object> result = UtilGenerics.cast(context.get("serviceResultMap")); String responseId = delegator.getNextSeqId("PaymentGatewayResponse"); GenericValue response = delegator.makeValue("PaymentGatewayResponse"); String message = ServiceUtil.getErrorMessage(result); @@ -1664,7 +1727,7 @@ return ServiceUtil.returnSuccess(); } - private static boolean processResult(DispatchContext dctx, Map result, GenericValue userLogin, GenericValue paymentPreference) throws GeneralException { + private static boolean processResult(DispatchContext dctx, Map<String, Object> result, GenericValue userLogin, GenericValue paymentPreference) throws GeneralException { Boolean authResult = (Boolean) result.get("authResult"); Boolean captureResult = (Boolean) result.get("captureResult"); boolean resultPassed = false; @@ -1684,18 +1747,18 @@ return resultPassed; } - private static void processAuthResult(DispatchContext dctx, Map result, GenericValue userLogin, GenericValue paymentPreference) throws GeneralException { + private static void processAuthResult(DispatchContext dctx, Map<String, Object> result, GenericValue userLogin, GenericValue paymentPreference) throws GeneralException { LocalDispatcher dispatcher = dctx.getDispatcher(); result.put("userLogin", userLogin); result.put("orderPaymentPreference", paymentPreference); ModelService model = dctx.getModelService("processAuthResult"); - Map context = model.makeValid(result, ModelService.IN_PARAM); + Map<String, Object> context = model.makeValid(result, ModelService.IN_PARAM); // in case we rollback make sure this service gets called dispatcher.addRollbackService(model.name, context, true); // invoke the service - Map resResp; + Map<String, Object> resResp; try { resResp = dispatcher.runSync(model.name, context); } catch (GenericServiceException e) { @@ -1707,7 +1770,7 @@ } } - public static Map processAuthResult(DispatchContext dctx, Map context) { + public static Map<String, Object> processAuthResult(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); GenericValue orderPaymentPreference = (GenericValue) context.get("orderPaymentPreference"); Boolean authResult = (Boolean) context.get("authResult"); @@ -1771,9 +1834,9 @@ savePgr(dctx, response); // create the internal messages - List messages = (List) context.get("internalRespMsgs"); + List<String> messages = UtilGenerics.cast(context.get("internalRespMsgs")); if (UtilValidate.isNotEmpty(messages)) { - Iterator i = messages.iterator(); + Iterator<String> i = messages.iterator(); while (i.hasNext()) { GenericValue respMsg = delegator.makeValue("PaymentGatewayRespMsg"); String respMsgId = delegator.getNextSeqId("PaymentGatewayRespMsg"); @@ -1854,7 +1917,7 @@ return ServiceUtil.returnSuccess(); } - private static boolean needsNsfRetry(GenericValue orderPaymentPreference, Map processContext, GenericDelegator delegator) throws GenericEntityException { + private static boolean needsNsfRetry(GenericValue orderPaymentPreference, Map<String, ? extends Object> processContext, GenericDelegator delegator) throws GenericEntityException { boolean needsNsfRetry = false; if (Boolean.TRUE.equals((Boolean) processContext.get("resultNsf"))) { // only track this for auto-orders, since we will only not fail and re-try on those @@ -1886,16 +1949,16 @@ return needsNsfRetry; } - private static GenericValue processAuthRetryResult(DispatchContext dctx, Map result, GenericValue userLogin, GenericValue paymentPreference) throws GeneralException { + private static GenericValue processAuthRetryResult(DispatchContext dctx, Map<String, Object> result, GenericValue userLogin, GenericValue paymentPreference) throws GeneralException { processAuthResult(dctx, result, userLogin, paymentPreference); return getAuthTransaction(paymentPreference); } - private static void processCaptureResult(DispatchContext dctx, Map result, GenericValue userLogin, GenericValue paymentPreference) throws GeneralException { + private static void processCaptureResult(DispatchContext dctx, Map<String, Object> result, GenericValue userLogin, GenericValue paymentPreference) throws GeneralException { processCaptureResult(dctx, result, userLogin, paymentPreference, null); } - private static void processCaptureResult(DispatchContext dctx, Map result, GenericValue userLogin, GenericValue paymentPreference, String authServiceType) throws GeneralException { + private static void processCaptureResult(DispatchContext dctx, Map<String, Object> result, GenericValue userLogin, GenericValue paymentPreference, String authServiceType) throws GeneralException { if (result == null) { throw new GeneralException("Null capture result sent to processCaptureResult; fatal error"); } @@ -1922,8 +1985,8 @@ result.put("serviceTypeEnum", authServiceType); ModelService model = dctx.getModelService("processCaptureResult"); - Map context = model.makeValid(result, ModelService.IN_PARAM); - Map capRes; + Map<String, Object> context = model.makeValid(result, ModelService.IN_PARAM); + Map<String, Object> capRes; try { capRes = dispatcher.runSync("processCaptureResult", context); } catch (GenericServiceException e) { @@ -1944,7 +2007,7 @@ } } - private static void processReAuthFromCaptureFailure(DispatchContext dctx, Map result, BigDecimal amount, GenericValue userLogin, GenericValue paymentPreference) throws GeneralException { + private static void processReAuthFromCaptureFailure(DispatchContext dctx, Map<String, Object> result, BigDecimal amount, GenericValue userLogin, GenericValue paymentPreference) throws GeneralException { LocalDispatcher dispatcher = dctx.getDispatcher(); // lookup the order header @@ -1973,7 +2036,7 @@ Debug.log("reauth with amount: " + amount, module); // first re-auth the card - Map authPayRes = authPayment(dispatcher, userLogin, orh, paymentPreference, amount, true, null); + Map<String, Object> authPayRes = authPayment(dispatcher, userLogin, orh, paymentPreference, amount, true, null); if (authPayRes == null) { throw new GeneralException("Null result returned from payment re-authorization"); } @@ -1988,7 +2051,7 @@ processCaptureResult(dctx, result, userLogin, paymentPreference); } else { // no auto-capture; do manual capture now - Map capPayRes = capturePayment(dctx, userLogin, orh, paymentPreference, amount, authTrans); + Map<String, Object> capPayRes = capturePayment(dctx, userLogin, orh, paymentPreference, amount, authTrans); if (capPayRes == null) { throw new GeneralException("Problems trying to capture payment (null result)"); } @@ -2007,7 +2070,7 @@ } } - public static Map processCaptureResult(DispatchContext dctx, Map context) { + public static Map<String, Object> processCaptureResult(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); @@ -2080,9 +2143,9 @@ savePgr(dctx, response); // create the internal messages - List messages = (List) context.get("internalRespMsgs"); + List<String> messages = UtilGenerics.cast(context.get("internalRespMsgs")); if (UtilValidate.isNotEmpty(messages)) { - Iterator i = messages.iterator(); + Iterator<String> i = messages.iterator(); while (i.hasNext()) { GenericValue respMsg = delegator.makeValue("PaymentGatewayRespMsg"); String respMsgId = delegator.getNextSeqId("PaymentGatewayRespMsg"); @@ -2116,7 +2179,7 @@ } else { // otherwise get the party from the order's OrderRole String orderId = paymentPreference.getString("orderId"); - List orl = null; + List<GenericValue> orl = null; try { orl = delegator.findByAnd("OrderRole", UtilMisc.toMap("orderId", orderId, "roleTypeId", "BILL_TO_CUSTOMER")); } catch (GenericEntityException e) { @@ -2144,7 +2207,7 @@ } - Map paymentCtx = UtilMisc.toMap("paymentTypeId", "CUSTOMER_PAYMENT"); + Map<String, Object> paymentCtx = UtilMisc.<String, Object>toMap("paymentTypeId", "CUSTOMER_PAYMENT"); paymentCtx.put("paymentMethodTypeId", paymentPreference.get("paymentMethodTypeId")); paymentCtx.put("paymentMethodId", paymentPreference.get("paymentMethodId")); paymentCtx.put("paymentGatewayResponseId", responseId); @@ -2157,7 +2220,7 @@ paymentCtx.put("userLogin", userLogin); paymentCtx.put("paymentRefNum", context.get("captureRefNum")); - Map payRes; + Map<String, Object> payRes; try { payRes = dispatcher.runSync("createPayment", paymentCtx); } catch (GenericServiceException e) { @@ -2173,10 +2236,10 @@ // create the PaymentApplication if invoiceId is available if (invoiceId != null) { Debug.logInfo("Processing Invoice #" + invoiceId, module); - Map paCtx = UtilMisc.toMap("paymentId", paymentId, "invoiceId", invoiceId); + Map<String, Object> paCtx = UtilMisc.<String, Object>toMap("paymentId", paymentId, "invoiceId", invoiceId); paCtx.put("amountApplied", context.get("captureAmount")); paCtx.put("userLogin", userLogin); - Map paRes; + Map<String, Object> paRes; try { paRes = dispatcher.runSync("createPaymentApplication", paCtx); } catch (GenericServiceException e) { @@ -2190,8 +2253,36 @@ } return ServiceUtil.returnSuccess(); } - - public static Map refundPayment(DispatchContext dctx, Map context) { + + public static Map<String, Object> refundOrderPaymentPreference(DispatchContext dctx, Map<String, ? extends Object> context) { + GenericDelegator delegator = dctx.getDelegator(); + LocalDispatcher dispatcher = dctx.getDispatcher(); + GenericValue userLogin = (GenericValue) context.get("userLogin"); + String orderPaymentPreferenceId = (String) context.get("orderPaymentPreferenceId"); + BigDecimal amount = (BigDecimal) context.get("amount"); + GenericValue orderPaymentPreference = null; + try { + orderPaymentPreference = delegator.findOne("OrderPaymentPreference", UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreferenceId), false); + } catch (GenericEntityException e) { + Debug.logError(e, module); + return ServiceUtil.returnError("Problems getting required information: orderPaymentPreference [" + orderPaymentPreferenceId + "]"); + } + // call the service refundPayment + Map<String, Object> refundResponse = null; + try { + Map<String, Object> serviceContext = FastMap.newInstance(); + serviceContext.put("orderPaymentPreference", orderPaymentPreference); + serviceContext.put("refundAmount", amount); + serviceContext.put("userLogin", userLogin); + refundResponse = dispatcher.runSync("refundPayment", serviceContext, TX_TIME, true); + } catch (GenericServiceException e) { + Debug.logError(e, "Problem refunding payment through processor", module); + return ServiceUtil.returnError("Refund processor problems; see logs"); + } + return refundResponse; + } + + public static Map<String, Object> refundPayment(DispatchContext dctx, Map<String, ? extends Object> context) { LocalDispatcher dispatcher = dctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); @@ -2228,7 +2319,7 @@ paymentGatewayConfigId = paymentSettings.getString("paymentGatewayConfigId"); if (serviceName != null) { - Map serviceContext = new HashMap(); + Map<String, Object> serviceContext = FastMap.newInstance(); serviceContext.put("orderPaymentPreference", paymentPref); serviceContext.put("paymentConfig", paymentConfig); serviceContext.put("paymentGatewayConfigId", paymentGatewayConfigId); @@ -2237,7 +2328,7 @@ // get the creditCard/address/email String payToPartyId = null; try { - payToPartyId = getBillingInformation(orh, paymentPref, new HashMap()); + payToPartyId = getBillingInformation(orh, paymentPref, FastMap.<String, Object>newInstance()); } catch (GenericEntityException e) { Debug.logError(e, "Problems getting billing information", module); return ServiceUtil.returnError("Problems getting billing information"); @@ -2248,7 +2339,7 @@ serviceContext.put("userLogin", userLogin); // call the service - Map refundResponse = null; + Map<String, Object> refundResponse = null; try { refundResponse = dispatcher.runSync(serviceName, serviceContext, TX_TIME, true); } catch (GenericServiceException e) { @@ -2264,10 +2355,10 @@ String payFromPartyId = getPayToPartyId(orderHeader); // process the refund result - Map refundResRes; + Map<String, Object> refundResRes; try { ModelService model = dctx.getModelService("processRefundResult"); - Map refundResCtx = model.makeValid(context, ModelService.IN_PARAM); + Map<String, Object> refundResCtx = model.makeValid(context, ModelService.IN_PARAM); refundResCtx.put("currencyUomId", orh.getCurrency()); refundResCtx.put("payToPartyId", payToPartyId); refundResCtx.put("payFromPartyId", payFromPartyId); @@ -2299,7 +2390,7 @@ } } - public static Map processRefundResult(DispatchContext dctx, Map context) { + public static Map<String, Object> processRefundResult(DispatchContext dctx, Map<String, ? extends Object> context) { LocalDispatcher dispatcher = dctx.getDispatcher(); GenericDelegator delegator = dctx.getDelegator(); @@ -2333,9 +2424,9 @@ savePgr(dctx, response); // create the internal messages - List messages = (List) context.get("internalRespMsgs"); + List<String> messages = UtilGenerics.cast(context.get("internalRespMsgs")); if (UtilValidate.isNotEmpty(messages)) { - Iterator i = messages.iterator(); + Iterator<String> i = messages.iterator(); while (i.hasNext()) { GenericValue respMsg = delegator.makeValue("PaymentGatewayRespMsg"); String respMsgId = delegator.getNextSeqId("PaymentGatewayRespMsg"); @@ -2361,7 +2452,7 @@ } // handle the (reverse) payment - Map paymentCtx = UtilMisc.toMap("paymentTypeId", "CUSTOMER_REFUND"); + Map<String, Object> paymentCtx = UtilMisc.<String, Object>toMap("paymentTypeId", "CUSTOMER_REFUND"); paymentCtx.put("paymentMethodTypeId", paymentPref.get("paymentMethodTypeId")); paymentCtx.put("paymentMethodId", paymentPref.get("paymentMethodId")); paymentCtx.put("paymentGatewayResponseId", responseId); @@ -2377,7 +2468,7 @@ String paymentId = null; try { - Map payRes = dispatcher.runSync("createPayment", paymentCtx); + Map<String, Object> payRes = dispatcher.runSync("createPayment", paymentCtx); if (ModelService.RESPOND_ERROR.equals(payRes.get(ModelService.RESPONSE_MESSAGE))) { return ServiceUtil.returnError((String) payRes.get(ModelService.ERROR_MESSAGE)); } else { @@ -2393,7 +2484,7 @@ return ServiceUtil.returnError("Create payment failed"); } - Map result = ServiceUtil.returnSuccess(); + Map<String, Object> result = ServiceUtil.returnSuccess(); result.put("paymentId", paymentId); return result; } else { @@ -2401,7 +2492,7 @@ } } - public static Map retryFailedOrderAuth(DispatchContext dctx, Map context) { + public static Map<String, Object>retryFailedOrderAuth(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); String orderId = (String) context.get("orderId"); @@ -2429,7 +2520,7 @@ } // run the auth service and check for failure(s) - Map serviceResult = null; + Map<String, Object> serviceResult = null; try { serviceResult = dispatcher.runSync("authOrderPayments", UtilMisc.<String, Object>toMap("orderId", orderId, "userLogin", userLogin)); } catch (GenericServiceException e) { @@ -2458,27 +2549,27 @@ } } - Map result = ServiceUtil.returnSuccess(); + Map<String, Object> result = ServiceUtil.returnSuccess(); result.put("processResult", authResp); return result; } - public static Map retryFailedAuths(DispatchContext dctx, Map context) { + public static Map<String, Object>retryFailedAuths(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); // get a list of all payment prefs still pending - List exprs = UtilMisc.toList(EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PAYMENT_NOT_AUTH"), + List<EntityExpr> exprs = UtilMisc.toList(EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PAYMENT_NOT_AUTH"), EntityCondition.makeCondition("processAttempt", EntityOperator.GREATER_THAN, new Long(0))); EntityListIterator eli = null; try { eli = delegator.find("OrderPaymentPreference", EntityCondition.makeCondition(exprs, EntityOperator.AND), null, null, UtilMisc.toList("orderId"), null); - List processList = new ArrayList(); + List<String> processList = FastList.newInstance(); if (eli != null) { Debug.logInfo("Processing failed order re-auth(s)", module); GenericValue value = null; @@ -2510,7 +2601,7 @@ return ServiceUtil.returnSuccess(); } - public static Map retryFailedAuthNsfs(DispatchContext dctx, Map context) { + public static Map<String, Object>retryFailedAuthNsfs(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); @@ -2527,7 +2618,7 @@ EntityCondition.makeCondition(EntityCondition.makeCondition("needsNsfRetry", EntityOperator.EQUALS, "Y"), EntityOperator.AND, EntityCondition.makeCondition(ModelEntity.STAMP_FIELD, EntityOperator.LESS_THAN_EQUAL_TO, oneWeekAgo)), null, null, UtilMisc.toList("orderId"), null); - List processList = FastList.newInstance(); + List<String> processList = FastList.newInstance(); if (eli != null) { Debug.logInfo("Processing failed order re-auth(s)", module); GenericValue value = null; @@ -2555,27 +2646,23 @@ } } } - return ServiceUtil.returnSuccess(); } - + public static GenericValue getCaptureTransaction(GenericValue orderPaymentPreference) { GenericValue capTrans = null; try { - List order = UtilMisc.toList("-transactionDate"); - List transactions = orderPaymentPreference.getRelated("PaymentGatewayResponse", null, order); - - List exprs = UtilMisc.toList(EntityCondition.makeCondition("paymentServiceTypeEnumId", EntityOperator.EQUALS, CAPTURE_SERVICE_TYPE)); - - List capTransactions = EntityUtil.filterByAnd(transactions, exprs); - + List<String> order = UtilMisc.toList("-transactionDate"); + List<GenericValue> transactions = orderPaymentPreference.getRelated("PaymentGatewayResponse", null, order); + List<EntityExpr> exprs = UtilMisc.toList(EntityCondition.makeCondition("paymentServiceTypeEnumId", EntityOperator.EQUALS, CAPTURE_SERVICE_TYPE)); + List<GenericValue> capTransactions = EntityUtil.filterByAnd(transactions, exprs); capTrans = EntityUtil.getFirst(capTransactions); } catch (GenericEntityException e) { Debug.logError(e, "ERROR: Problem getting capture information from PaymentGatewayResponse", module); } return capTrans; } - + /** * Gets the chronologically latest PaymentGatewayResponse from an OrderPaymentPreference which is either a PRDS_PAY_AUTH * or PRDS_PAY_REAUTH. Used for capturing. @@ -2585,14 +2672,11 @@ public static GenericValue getAuthTransaction(GenericValue orderPaymentPreference) { GenericValue authTrans = null; try { - List order = UtilMisc.toList("-transactionDate"); - List transactions = orderPaymentPreference.getRelated("PaymentGatewayResponse", null, order); - - List exprs = UtilMisc.toList(EntityCondition.makeCondition("paymentServiceTypeEnumId", EntityOperator.EQUALS, AUTH_SERVICE_TYPE), + List<String> order = UtilMisc.toList("-transactionDate"); + List<GenericValue> transactions = orderPaymentPreference.getRelated("PaymentGatewayResponse", null, order); + List<EntityExpr> exprs = UtilMisc.toList(EntityCondition.makeCondition("paymentServiceTypeEnumId", EntityOperator.EQUALS, AUTH_SERVICE_TYPE), EntityCondition.makeCondition("paymentServiceTypeEnumId", EntityOperator.EQUALS, REAUTH_SERVICE_TYPE)); - - List authTransactions = EntityUtil.filterByOr(transactions, exprs); - + List<GenericValue> authTransactions = EntityUtil.filterByOr(transactions, exprs); authTrans = EntityUtil.getFirst(authTransactions); } catch (GenericEntityException e) { Debug.logError(e, "ERROR: Problem getting authorization information from PaymentGatewayResponse", module); @@ -2672,7 +2756,7 @@ // safe payment gateway store private static void savePgr(DispatchContext dctx, GenericValue pgr) { - Map context = UtilMisc.toMap("paymentGatewayResponse", pgr); + Map<String, GenericValue> context = UtilMisc.<String, GenericValue>toMap("paymentGatewayResponse", pgr); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericDelegator delegator = dctx.getDelegator(); @@ -2684,7 +2768,7 @@ } } - public static Map savePaymentGatewayResponse(DispatchContext dctx, Map context) { + public static Map<String, Object> savePaymentGatewayResponse(DispatchContext dctx, Map<String, ? extends Object> context) { GenericDelegator delegator = dctx.getDelegator(); GenericValue pgr = (GenericValue) context.get("paymentGatewayResponse"); String message = pgr.getString("gatewayMessage"); @@ -2700,9 +2784,9 @@ return ServiceUtil.returnSuccess(); } - + // manual auth service - public static Map processManualCcAuth(DispatchContext dctx, Map context) { + public static Map<String, Object> processManualCcAuth(DispatchContext dctx, Map<String, ? extends Object> context) { GenericValue userLogin = (GenericValue) context.get("userLogin"); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericDelegator delegator = dctx.getDelegator(); @@ -2770,7 +2854,6 @@ } paymentConfig = paymentSettings.getString("paymentPropertiesPath"); paymentGatewayConfigId = paymentSettings.getString("paymentGatewayConfigId"); - if (UtilValidate.isEmpty(paymentConfig)) { paymentConfig = "payment.properties"; } @@ -2806,7 +2889,7 @@ authContext.put("userLogin", userLogin); // call the auth service - Map response; + Map<String, Object> response; try { Debug.logInfo("Running authorization service: " + paymentService, module); response = dispatcher.runSync(paymentService, authContext, TX_TIME, true); @@ -2826,21 +2909,19 @@ return ServiceUtil.returnError("Authorization failed"); } } - + // manual processing service - - public static Map processManualCcTx(DispatchContext dctx, Map context) { + public static Map<String, Object> processManualCcTx(DispatchContext dctx, Map<String, ? extends Object> context) { GenericValue userLogin = (GenericValue) context.get("userLogin"); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericDelegator delegator = dctx.getDelegator(); Security security = dctx.getSecurity(); - // security check if (!security.hasEntityPermission("MANUAL", "_PAYMENT", userLogin)) { Debug.logWarning("**** Security [" + (new Date()).toString() + "]: " + userLogin.get("userLoginId") + " attempt to run manual payment transaction!", module); return ServiceUtil.returnError("You do not have permission for this transaction."); } - + String orderPaymentPreferenceId = (String) context.get("orderPaymentPreferenceId"); String paymentMethodTypeId = (String) context.get("paymentMethodTypeId"); String productStoreId = (String) context.get("productStoreId"); String transactionType = (String) context.get("transactionType"); @@ -2848,23 +2929,53 @@ if (referenceCode == null) { referenceCode = new Long(System.currentTimeMillis()).toString(); } - + // Get the OrderPaymentPreference + GenericValue paymentPref = null; + try { + paymentPref = delegator.findOne("OrderPaymentPreference", UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreferenceId), false); + } catch ( GenericEntityException e ) { + String errMsg = "Problem getting OrderPaymentPreference for orderPaymentPreferenceId " + orderPaymentPreferenceId; + Debug.logWarning(e, errMsg, module); + return ServiceUtil.returnError(errMsg); + } + // Error if no OrderPaymentPreference was found + if (paymentPref == null) { + String errMsg = "Could not find OrderPaymentPreference with orderPaymentPreferenceId: " + orderPaymentPreferenceId; + Debug.logWarning(errMsg, module); + return ServiceUtil.returnError(errMsg); + } + // Get the OrderHeader + GenericValue orderHeader = null; + String orderId = paymentPref.getString("orderId"); + try { + orderHeader = delegator.findOne("OrderHeader", UtilMisc.toMap("orderId", orderId), false); + } catch ( GenericEntityException e ) { + String errMsg = "Problem getting OrderHeader for orderId " + orderId; + Debug.logWarning(e, errMsg, module); + return ServiceUtil.returnError(errMsg); + } + // Error if no OrderHeader was found + if (orderHeader == null) { + String errMsg = "Could not find OrderHeader with orderId: " + orderId + "; not processing payments."; + Debug.logWarning(errMsg, module); + return ServiceUtil.returnError(errMsg); + } + OrderReadHelper orh = new OrderReadHelper(orderHeader); // check valid implemented types if (!transactionType.equals(CREDIT_SERVICE_TYPE)) { return ServiceUtil.returnError("This transaction type is not yet supported."); } - // transaction request context - Map requestContext = new HashMap(); + Map<String, Object> requestContext = FastMap.newInstance(); String paymentService = null; String paymentConfig = null; String paymentGatewayConfigId = null; - // get the transaction settings GenericValue paymentSettings = ProductStoreWorker.getProductStorePaymentSetting(delegator, productStoreId, paymentMethodTypeId, transactionType, false); if (paymentSettings == null) { return ServiceUtil.returnError("No valid payment settings found for : " + productStoreId + "/" + transactionType); } else { + paymentGatewayConfigId = paymentSettings.getString("paymentGatewayConfigId"); String customMethodId = paymentSettings.getString("paymentCustomMethodId"); if (UtilValidate.isNotEmpty(customMethodId)) { paymentService = getPaymentCustomMethod(delegator, customMethodId); @@ -2873,16 +2984,17 @@ paymentService = paymentSettings.getString("paymentService"); } paymentConfig = paymentSettings.getString("paymentPropertiesPath"); - paymentGatewayConfigId = paymentSettings.getString("paymentGatewayConfigId"); + if (paymentConfig == null) { + paymentConfig = "payment.properties"; + } requestContext.put("paymentConfig", paymentConfig); requestContext.put("paymentGatewayConfigId", paymentGatewayConfigId); } - // check the service name - if (paymentService == null || paymentConfig == null) { + if (paymentService == null || (paymentGatewayConfigId == null && paymentConfig == null)) { return ServiceUtil.returnError("Invalid product store payment settings"); } - + if (paymentMethodTypeId.equals("CREDIT_CARD")) { GenericValue creditCard = delegator.makeValue("CreditCard"); creditCard.setAllFields(context, true, null, null); @@ -2895,63 +3007,69 @@ creditCard.set("expireDate", expDate); requestContext.put("creditCard", creditCard); requestContext.put("cardSecurityCode", context.get("cardSecurityCode")); - GenericValue billingAddress = delegator.makeValue("PostalAddress"); billingAddress.setAllFields(context, true, null, null); if (billingAddress.get("address1") == null || billingAddress.get("city") == null || billingAddress.get("postalCode") == null) { return ServiceUtil.returnError("Credit card billing address is missing required fields."); } requestContext.put("billingAddress", billingAddress); - - /* This is not needed any more, using names on CC as a kludge instead of these kludge names until we get a firstName/lastName on the shipping PostalAddress - GenericValue contactPerson = delegator.makeValue("Person"); - contactPerson.setAllFields(context, true, null, null); - if (contactPerson.get("firstName") == null || contactPerson.get("lastName") == null) { - return ServiceUtil.returnError("Contact person is missing required fields."); - } - requestContext.put("contactPerson", contactPerson); - */ - GenericValue billToEmail = delegator.makeValue("ContactMech"); billToEmail.set("infoString", context.get("infoString")); if (billToEmail.get("infoString") == null) { return ServiceUtil.returnError("Email address field cannot be empty."); } + requestContext.put("billToParty", orh.getBillToParty()); requestContext.put("billToEmail", billToEmail); requestContext.put("referenceCode", referenceCode); String currency = UtilProperties.getPropertyValue("general.properties", "currency.uom.id.default", "USD"); requestContext.put("currency", currency); - requestContext.put("creditAmount", context.get("amount")); // TODO fix me to work w/ other services + requestContext.put("creditAmount", context.get("amount")); } else { return ServiceUtil.returnError("Payment method type : " + paymentMethodTypeId + " is not yet implemented for manual transactions"); } - // process the transaction - Map response = null; + Map<String, Object> response = null; try { response = dispatcher.runSync(paymentService, requestContext, TX_TIME, true); } catch (GenericServiceException e) { Debug.logError(e, module); return ServiceUtil.returnError("Error calling service : " + paymentService + " / " + requestContext); } - + // get the response result code + if (response != null && !ServiceUtil.isError(response)) { + Map<String, Object> responseRes; + try { + ModelService model = dctx.getModelService("processCreditResult"); + response.put("orderPaymentPreference", paymentPref); + response.put("userLogin", userLogin); + Map<String, Object> resCtx = model.makeValid(response, ModelService.IN_PARAM); + responseRes = dispatcher.runSync(model.name, resCtx); + } catch (GenericServiceException e) { + Debug.logError(e, module); + return ServiceUtil.returnError("Trouble processing the release results: " + e.getMessage()); + } + if (responseRes != null && ServiceUtil.isError(responseRes)) { + return ServiceUtil.returnError(ServiceUtil.getErrorMessage(responseRes)); + } + } else if (ServiceUtil.isError(response)) { + saveError(dispatcher, userLogin, paymentPref, response, CREDIT_SERVICE_TYPE, "PGT_CREDIT"); + return ServiceUtil.returnError(ServiceUtil.getErrorMessage(response)); + } // check for errors if (ServiceUtil.isError(response)) { return ServiceUtil.returnError(ServiceUtil.makeErrorMessage(response, null, null, null, null)); } - - // get the reference number // TODO add support for other tx types + // get the reference number String refNum = (String) response.get("creditRefNum"); String code = (String) response.get("creditCode"); String msg = (String) response.get("creditMessage"); - Map returnResults = ServiceUtil.returnSuccess("Transaction result [" + msg + "/" + code +"] Ref#: " + refNum); + Map<String, Object> returnResults = ServiceUtil.returnSuccess("Transaction result [" + msg + "/" + code +"] Ref#: " + refNum); returnResults.put("referenceNum", refNum); return returnResults; } - + // Verify Credit Card (Manually) Service - - public static Map verifyCreditCard(DispatchContext dctx, Map context) { + public static Map<String, Object>verifyCreditCard(DispatchContext dctx, Map<String, ? extends Object> context) { LocalDispatcher dispatcher = dctx.getDispatcher(); GenericDelegator delegator = dctx.getDelegator(); String productStoreId = (String) context.get("productStoreId"); @@ -3012,8 +3130,8 @@ /** * Simple test processor; declines all orders < 100.00; approves all orders >= 100.00 */ - public static Map testProcessor(DispatchContext dctx, Map context) { - Map result = new HashMap(); + public static Map<String, Object> testProcessor(DispatchContext dctx, Map<String, ? extends Object> context) { + Map<String, Object> result = FastMap.newInstance(); BigDecimal processAmount = (BigDecimal) context.get("processAmount"); if (processAmount != null && processAmount.compareTo(new BigDecimal("100.00")) >= 0) @@ -3039,8 +3157,8 @@ /** * Simple test processor; declines all orders < 100.00; approves all orders > 100.00 */ - public static Map testProcessorWithCapture(DispatchContext dctx, Map context) { - Map result = new HashMap(); + public static Map<String, Object> testProcessorWithCapture(DispatchContext dctx, Map<String, ? extends Object> context) { + Map<String, Object> result = FastMap.newInstance(); BigDecimal processAmount = (BigDecimal) context.get("processAmount"); if (processAmount != null && processAmount.compareTo(new BigDecimal("100.00")) >= 0) @@ -3071,8 +3189,8 @@ /** * Test authorize - does random declines */ - public static Map testRandomAuthorize(DispatchContext dctx, Map context) { - Map result = ServiceUtil.returnSuccess(); + public static Map<String, Object> testRandomAuthorize(DispatchContext dctx, Map<String, ? extends Object> context) { + Map<String, Object> result = ServiceUtil.returnSuccess(); String refNum = UtilDateTime.nowAsString(); Random r = new Random(); int i = r.nextInt(9); @@ -3096,8 +3214,8 @@ /** * Always approve processor. */ - public static Map alwaysApproveProcessor(DispatchContext dctx, Map context) { - Map result = new HashMap(); + public static Map<String, Object> alwaysApproveProcessor(DispatchContext dctx, Map<String, ? extends Object> context) { + Map<String, Object> result = FastMap.newInstance(); Debug.logInfo("Test Processor Approving Credit Card", module); String refNum = UtilDateTime.nowAsString(); @@ -3112,8 +3230,8 @@ return result; } - public static Map alwaysApproveWithCapture(DispatchContext dctx, Map context) { - Map result = new HashMap(); + public static Map<String, Object> alwaysApproveWithCapture(DispatchContext dctx, Map<String, ? extends Object> context) { + Map<String, Object> result = FastMap.newInstance(); String refNum = UtilDateTime.nowAsString(); Debug.logInfo("Test Processor Approving Credit Card with Capture", module); @@ -3135,8 +3253,8 @@ /** * Always decline processor */ - public static Map alwaysDeclineProcessor(DispatchContext dctx, Map context) { - Map result = ServiceUtil.returnSuccess(); + public static Map<String, Object> alwaysDeclineProcessor(DispatchContext dctx, Map<String, ? extends Object> context) { + Map<String, Object> result = ServiceUtil.returnSuccess(); BigDecimal processAmount = (BigDecimal) context.get("processAmount"); Debug.logInfo("Test Processor Declining Credit Card", module); @@ -3154,8 +3272,8 @@ /** * Always NSF (not sufficient funds) processor */ - public static Map alwaysNsfProcessor(DispatchContext dctx, Map context) { - Map result = ServiceUtil.returnSuccess(); + public static Map<String, Object> alwaysNsfProcessor(DispatchContext dctx, Map<String, ? extends Object> context) { + Map<String, Object> result = ServiceUtil.returnSuccess(); BigDecimal processAmount = (BigDecimal) context.get("processAmount"); Debug.logInfo("Test Processor NSF Credit Card", module); @@ -3174,8 +3292,8 @@ /** * Always fail/bad expire date processor */ - public static Map alwaysBadExpireProcessor(DispatchContext dctx, Map context) { - Map result = ServiceUtil.returnSuccess(); + public static Map<String, Object> alwaysBadExpireProcessor(DispatchContext dctx, Map<String, ? extends Object> context) { + Map<String, Object> result = ServiceUtil.returnSuccess(); BigDecimal processAmount = (BigDecimal) context.get("processAmount"); Debug.logInfo("Test Processor Bad Expire Date Credit Card", module); @@ -3194,7 +3312,7 @@ /** * Fail/bad expire date when year is even processor */ - public static Map badExpireEvenProcessor(DispatchContext dctx, Map context) { + public static Map<String, Object>badExpireEvenProcessor(DispatchContext dctx, Map<String, ? extends Object> context) { GenericValue creditCard = (GenericValue) context.get("creditCard"); String expireDate = creditCard.getString("expireDate"); String lastNumberStr = expireDate.substring(expireDate.length() - 1); @@ -3210,8 +3328,8 @@ /** * Always bad card number processor */ - public static Map alwaysBadCardNumberProcessor(DispatchContext dctx, Map context) { - Map result = ServiceUtil.returnSuccess(); + public static Map<String, Object> alwaysBadCardNumberProcessor(DispatchContext dctx, Map<String, ? extends Object> context) { + Map<String, Object> result = ServiceUtil.returnSuccess(); BigDecimal processAmount = (BigDecimal) context.get("processAmount"); [... 81 lines stripped ...] |
Free forum by Nabble | Edit this page |