blob: d20a3335deaf32bd5366f0120cb2f40e24b082a9 [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.eway;
import java.math.BigDecimal;
import org.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 + ">";
}
}