/******************************************************************************* * 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.apache.ofbiz.accounting.thirdparty.eway; import java.math.BigDecimal; import org.apache.ofbiz.base.util.Debug; /** * A class representing a payment request. It holds the fields of the request, * provides setters and getters to manipulate them. It also holds information * about the type of the request: the request can be of Real-time, CVN, and * Beagle type, or the combination of the latter two. You set the request type * in the constructor of the object. * * Based on public domain sample code provided by eWay.com.au */ public class GatewayRequest { private static final String module = GatewayRequest.class.getName(); // request urls public static final String REQUEST_URL_REFUND_TEST = ""; public static final String REQUEST_URL_REFUND = "https://www.eway.com.au/gateway/xmlpaymentrefund.asp"; public static final String REQUEST_URL_BEAGLE_TEST = "https://www.eway.com.au/gateway_cvn/xmltest/testpage.asp"; public static final String REQUEST_URL_BEAGLE = "https://www.eway.com.au/gateway_cvn/xmlbeagle.asp"; public static final String REQUEST_URL_CVN_TEST = "https://www.eway.com.au/gateway_cvn/xmltest/testpage.asp"; public static final String REQUEST_URL_CVN = "https://www.eway.com.au/gateway_cvn/xmlpayment.asp"; public static final String REQUEST_URL_RT_TEST = "https://www.eway.com.au/gateway/xmltest/testpage.asp"; public static final String REQUEST_URL_RT = "https://www.eway.com.au/gateway/xmlpayment.asp"; /** * Constant value to be used with the CVN payment method */ public static final int REQUEST_METHOD_CVN = 1; /** * Constant value to be used with the Beagle (GeoIP) payment method */ public static final int REQUEST_METHOD_BEAGLE = 2; /** * Constant value to be used with the Refund method */ public static final int REQUEST_METHOD_REFUND = 4; /** * The request method used in the transaction, set in the constructor. * This value is the boolean * combination of the values REQUEST_METHOD_CVN and REQUEST_METHOD_BEAGLE. * Defaults to 0, meaning that Real-time payment method is used. */ private BigDecimal txTotalAmount = BigDecimal.ZERO; private boolean isTestMode = false; private int requestMethod = 0; private String txCustomerID = ""; private String txCardHoldersName = ""; private String txCardNumber = ""; private String txCardExpiryMonth = ""; private String txCardExpiryYear = ""; private String txTrxnNumber = ""; private String txCustomerFirstName = ""; private String txCustomerLastName = ""; private String txCustomerEmailAddress = ""; private String txCustomerAddress = ""; private String txCustomerPostcode = ""; private String txCustomerInvoiceRef = ""; private String txCustomerInvoiceDescription = ""; private String txCVN = ""; private String txOption1 = ""; private String txOption2 = ""; private String txOption3 = ""; private String txCustomerIPAddress = ""; private String txCustomerBillingCountry = ""; private String txRefundPassword = ""; /** * Default constructor to be used with the Real-Time payment method. The * same as calling <code>GatewayRequest(0)</code>; */ public GatewayRequest() { requestMethod = 0; } /** * Constructor to be used with the CVN and Beagle payment methods. * @param method Logical combination of the REQUEST_METHOD_CVN and * REQUEST_METHOD_BEAGLE constants. */ public GatewayRequest(int method) { requestMethod = method; } /** * Gets the request method given when constructing the object. * @return the request method as a logical combination of the * REQUEST_METHOD_CVN and REQUEST_METHOD_BEAGLE constants. */ public int getRequestMethod() { return requestMethod; } /** * Gets the URL for the configured request */ public String getUrl() { if ((requestMethod & REQUEST_METHOD_REFUND) != 0) { if (isTestMode()) { return null; } else { return REQUEST_URL_REFUND; } } else if ((requestMethod & REQUEST_METHOD_BEAGLE) != 0) { if (isTestMode()) { return REQUEST_URL_BEAGLE_TEST; } else { return REQUEST_URL_BEAGLE; } } else if ((requestMethod & REQUEST_METHOD_CVN) != 0) { if (isTestMode()) { return REQUEST_URL_CVN_TEST; } else { return REQUEST_URL_CVN; } } else { if (isTestMode()) { return REQUEST_URL_RT_TEST; } else { return REQUEST_URL_RT; } } } /* * Getters and setters follow for each defined field of the request. */ public String getCustomerID() { return txCustomerID; } public void setCustomerID(String value) { txCustomerID = value; } public String getRefundPassword() { return txRefundPassword; } public void setRefundPassword(String value) { txRefundPassword = value; } public BigDecimal getTotalAmount() { return txTotalAmount; } public void setTotalAmount(BigDecimal value) { txTotalAmount = value; } public String getCardHoldersName() { return txCardHoldersName; } public void setCardHoldersName(String value) { txCardHoldersName = value; } public String getCardNumber() { return txCardNumber; } public void setCardNumber(String value) { txCardNumber = value; } public String getCardExpiryMonth() { return txCardExpiryMonth; } public void setCardExpiryMonth(String value) { txCardExpiryMonth = value; } public String getCardExpiryYear() { return txCardExpiryYear; } public void setCardExpiryYear(String value) { txCardExpiryYear = value; } public String getTrxnNumber() { return txTrxnNumber; } public void setTrxnNumber(String value) { txTrxnNumber = value; } public String getCustomerFirstName() { return txCustomerFirstName; } public void setCustomerFirstName(String value) { txCustomerFirstName = value; } public String getCustomerLastName() { return txCustomerLastName; } public void setCustomerLastName(String value) { txCustomerLastName = value; } public String getCustomerEmailAddress() { return txCustomerEmailAddress; } public void setCustomerEmailAddress(String value) { txCustomerEmailAddress = value; } public String getCustomerAddress() { return txCustomerAddress; } public void setCustomerAddress(String value) { txCustomerAddress = value; } public String getCustomerPostcode() { return txCustomerPostcode; } public void setCustomerPostcode(String value) { txCustomerPostcode = value; } public String getCustomerInvoiceRef() { return txCustomerInvoiceRef; } public void setCustomerInvoiceRef(String value) { txCustomerInvoiceRef = value; } public String getCustomerInvoiceDescription() { return txCustomerInvoiceDescription; } public void setCustomerInvoiceDescription(String value) { txCustomerInvoiceDescription = value; } public String getCVN() { return txCVN; } public void setCVN(String value) { txCVN = value; } public String getOption1() { return txOption1; } public void setOption1(String value) { txOption1 = value; } public String getOption2() { return txOption2; } public void setOption2(String value) { txOption2 = value; } public String getOption3() { return txOption3; } public void setOption3(String value) { txOption3 = value; } public String getCustomerIPAddress() { return txCustomerIPAddress; } public void setCustomerIPAddress(String value) { txCustomerIPAddress = value; } public String getCustomerBillingCountry() { return txCustomerBillingCountry; } public void setCustomerBillingCountry(String value) { txCustomerBillingCountry = value; } public boolean isTestMode() { return isTestMode; } public void setTestMode(boolean b) { isTestMode = b; } /** * Gives the xml representation of this object. This xml will be sent to * the gateway. This method is public only for debugging purposes, you * might wish to examine the xml content. The special fields of the CVN * and Beagle requests are added only if the request belongs to the CVN or * Beagle types, respectively. * @return The GatewayRequest object as an xml string. */ public String toXml() { // We don't really need the overhead of creating an XML DOM object // just to concatenate a String together. Integer totalInt = txTotalAmount.multiply(new BigDecimal(100)).intValue(); StringBuffer xml = new StringBuffer("<ewaygateway>"); xml.append(createNode("ewayCustomerID", txCustomerID)); xml.append(createNode("ewayTotalAmount", "" + totalInt)); xml.append(createNode("ewayCustomerInvoiceRef", txCustomerInvoiceRef)); xml.append(createNode("ewayCardExpiryMonth", txCardExpiryMonth)); xml.append(createNode("ewayCardExpiryYear", txCardExpiryYear)); // all charge methods (not refund) if (requestMethod != REQUEST_METHOD_REFUND) { xml.append(createNode("ewayCardHoldersName", txCardHoldersName)); xml.append(createNode("ewayCardNumber", txCardNumber)); xml.append(createNode("ewayTrxnNumber", txTrxnNumber)); xml.append(createNode("ewayCustomerInvoiceDescription", txCustomerInvoiceDescription)); xml.append(createNode("ewayCustomerFirstName", txCustomerFirstName)); xml.append(createNode("ewayCustomerLastName", txCustomerLastName)); xml.append(createNode("ewayCustomerEmail", txCustomerEmailAddress)); xml.append(createNode("ewayCustomerAddress", txCustomerAddress)); xml.append(createNode("ewayCustomerPostcode", txCustomerPostcode)); } // fill in also CVN data if the request is of CVN type if (requestMethod == REQUEST_METHOD_CVN || requestMethod == REQUEST_METHOD_BEAGLE) { xml.append(createNode("ewayCVN", txCVN)); } xml.append(createNode("ewayOption1", txOption1)); xml.append(createNode("ewayOption2", txOption2)); xml.append(createNode("ewayOption3", txOption3)); // fill in also Beagle data if the request is of Beagle type if (requestMethod == REQUEST_METHOD_BEAGLE) { xml.append(createNode("ewayCustomerIPAddress", txCustomerIPAddress)); xml.append(createNode("ewayCustomerBillingCountry", txCustomerBillingCountry)); } // fill in the refund password if REFUND type if (requestMethod == REQUEST_METHOD_REFUND) { xml.append(createNode("ewayOriginalTrxnNumber", txTrxnNumber)); xml.append(createNode("ewayRefundPassword", txRefundPassword)); } xml.append("</ewaygateway>"); // log the request for test mode if (isTestMode()) { Debug.logInfo("[eWay Request] : " + xml.toString(), module); } return xml.toString(); } /** * Helper method to build an XML node. * * @param nodeName * The name of the node being created. * @param nodeValue * The value of the node being created. * @return An XML node as a String in <nodName>nodeValue</nodeName> format */ private String createNode(String nodeName, String nodeValue) { return "<" + nodeName + ">" + nodeValue + "</" + nodeName + ">"; } }