public boolean process(PaymentDTOEx paymentInfo) throws PluggableTaskException { boolean retValue = false; if (paymentInfo.getPayoutId() != null) { return true; } try { if (!new PaymentInformationBL().isCreditCard(paymentInfo.getInstrument())) { log.error("Can't process without a credit card"); throw new TaskException("Credit card not present in payment"); } if (paymentInfo.getIsRefund() == 1 && (paymentInfo.getPayment() == null || paymentInfo.getPayment().getAuthorization() == null)) { log.error("Can't process refund without a payment with an authorization record"); throw new TaskException("Refund without previous authorization"); } validateParameters(); Map<String, Object> data; if (paymentInfo.getIsRefund() == 0) { data = getChargeData(paymentInfo); } else { data = getRefundData(paymentInfo); } if ("true".equals(getOptionalParameter(PARAMETER_AVS.getName(), "false"))) { addAVSFields(paymentInfo.getUserId(), data); /* #12686 - We do not want to log credit card numbers */ Map<String, Object> dataLog = (Map<String, Object>) ((HashMap<String, Object>) data).clone(); // dataLog.remove("accountNumber"); dataLog.put("accountNumber", "******"); // TODO: check this log log.debug("returning after avs " + dataLog); } PaymentAuthorizationDTO response = makeCall(data, true); paymentInfo.setAuthorization(response); if ("1".equals(response.getCode1())) { paymentInfo.setPaymentResult(new PaymentResultDAS().find(Constants.RESULT_OK)); log.debug("result is ok"); } else { paymentInfo.setPaymentResult(new PaymentResultDAS().find(Constants.RESULT_FAIL)); log.debug("result is fail"); } PaymentAuthorizationBL bl = new PaymentAuthorizationBL(); bl.create(response, paymentInfo.getId()); } catch (MalformedURLException e) { log.error("MalformedURLException exception when calling Atlas", e); paymentInfo.setPaymentResult(new PaymentResultDAS().find(Constants.RESULT_UNAVAILABLE)); retValue = true; } catch (XmlRpcException e) { log.error("XmlRpcException exception when calling Atlas", e); paymentInfo.setPaymentResult(new PaymentResultDAS().find(Constants.RESULT_UNAVAILABLE)); retValue = false; } catch (PluggableTaskException e) { log.error("PluggableTaskException", e); throw e; } catch (Exception e) { log.error("Exception", e); throw new PluggableTaskException(e); } log.debug("returning " + retValue); return retValue; }
private PaymentAuthorizationDTO makeCall(Map<String, Object> data, boolean isCharge) throws XmlRpcException, MalformedURLException, PluggableTaskException { URL callURL = null; if ("true".equals(getOptionalParameter(PARAMETER_TEST.getName(), "false"))) { callURL = new URL(TEST_URL); log.debug("Running Atlas task in test mode!"); } else { callURL = new URL(URL); } String merchantAccountCode = ensureGetParameter(PARAMETER_MERCHANT_ACCOUNT_CODE.getName()); int merchantCode = Integer.parseInt(merchantAccountCode); merchantCode = merchantCode - (merchantCode % 1000); XmlRpcClient paymentProcessor = new XmlRpcClient(); paymentProcessor.setTransportFactory(new XmlRpcCommonsTransportFactory(paymentProcessor)); XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); config.setServerURL(callURL); config.setEnabledForExtensions(true); config.setConnectionTimeout(CONNECTION_TIME_OUT); config.setReplyTimeout(REPLY_TIME_OUT); paymentProcessor.setConfig(config); List<Map<String, Object>> transactionRequestList = new ArrayList<Map<String, Object>>(1); transactionRequestList.add(data); Map<String, Object> configParam = new HashMap<String, Object>(); if (isCharge) { configParam.put("waitConfirmation", "ignore"); } else { configParam.put("waitConfirmation", "terminate"); } Object[] params = new Object[] { String.valueOf(merchantCode), ensureGetParameter(PARAMETER_PASSWORD.getName()), transactionRequestList, configParam }; Object[] resresponse = (Object[]) paymentProcessor.execute("XMLRPCGates.processRetail", params); Map<String, Object> transactionResponseMap = (Map<String, Object>) resresponse[0]; log.debug("Got response:" + transactionResponseMap); boolean isCredit = "credit-response".equals(transactionResponseMap.get("type")); PaymentAuthorizationDTO dbRow = new PaymentAuthorizationDTO(); if (!isCredit && "A01".equals(transactionResponseMap.get("responseCode"))) { dbRow.setCode1("1"); // code if 1 it is ok } else if (isCredit && "A02".equals(transactionResponseMap.get("responseCode"))) { dbRow.setCode1("1"); } else if ('A' != ((String) transactionResponseMap.get("responseCode")).charAt(0)) { dbRow.setCode1("2"); } else { dbRow.setCode1("0"); } dbRow.setCode3((String) transactionResponseMap.get("responseCode")); dbRow.setResponseMessage((String) transactionResponseMap.get("responseMessage")); dbRow.setApprovalCode((String) transactionResponseMap.get("processorCode")); dbRow.setAvs((String) transactionResponseMap.get("avsResultCode")); dbRow.setTransactionId((String) transactionResponseMap.get("referenceNumber")); dbRow.setProcessor("Intrannuity"); return dbRow; }