Package org.ofbiz.accounting.thirdparty.eway

Source Code of org.ofbiz.accounting.thirdparty.eway.GatewayResponse

/*******************************************************************************
* 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.io.InputStream;
import java.math.BigDecimal;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.ofbiz.base.util.Debug;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

/**
* A class representing the payment gateway's response to a request. It holds
* fields of the response which are filled in when the response arrives and
* available through getter methods. This response class supports all 3 payment
* methods.
*
* Based on public domain sample code provided by eWay.com.au
*/
public class GatewayResponse {

    private static final String module = GatewayResponse.class.getName();
   
    // private field definitions, values are set to default
   
    private double txBeagleScore = -1;
    private int txReturnAmount = 0;
   
    private boolean txTrxnStatus = false;
   
    private String txTrxnNumber = "";
    private String txTrxnReference = "";
    private String txTrxnOption1 = "";
    private String txTrxnOption2 = "";
    private String txTrxnOption3 = "";   
    private String txAuthCode = "";
    private String txTrxnError = "";
   
    // getter methods for the response fields
   
    public String getTrxnNumber() {
        return txTrxnNumber;
    }

    public String getTrxnReference() {
        return txTrxnReference;
    }

    public String getTrxnOption1() {
        return txTrxnOption1;
    }

    public String getTrxnOption2() {
        return txTrxnOption2;
    }

    public String getTrxnOption3() {
        return txTrxnOption3;
    }

    public String getAuthCode() {
        return txAuthCode;
    }

    public String getTrxnError() {
        return txTrxnError;
    }

    public int getReturnAmount() {
        return txReturnAmount;
    }
   
    public BigDecimal getTransactionAmount() {
        BigDecimal amt = new BigDecimal(getReturnAmount());
        amt = amt.divide(new BigDecimal(100));
        return amt.setScale(2, BigDecimal.ROUND_HALF_UP);
    }

    public boolean getTrxnStatus() {
        return txTrxnStatus;
    }

    /**
     * Gets the beagle score. Defaults to -1 in case of non-Beagle payment
     * methods or if the response does not contain this field.
     *
     * @return The beagle score or -1 if it was not defined in the response
     */
    public double getBeagleScore() {
        return txBeagleScore;
    }

    /**
     * Creates the GatewayResponse object by parsing an xml from a stream. Fills
     * in the fields of the object that are available through getters after this
     * method returns.
     *
     * @param xmlstream
     *            the stream to parse the response from
     * @throws Exception
     *             if the xml contains a root element with a bad name or an
     *             unknown element, or if the xml is badly formatted
     */
    public GatewayResponse(InputStream xmlstream, GatewayRequest req) throws Exception {

        DocumentBuilderFactory builderFactory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document doc = builder.parse(xmlstream);

        // get the root node
        Node rootnode = doc.getDocumentElement();
        String root = rootnode.getNodeName();

        if (root != "ewayResponse") {
            throw new Exception("Bad root element in response: " + root);
        }

        // get all elements
        NodeList list = doc.getElementsByTagName("*");
        for (int i = 0; i < list.getLength(); i++) {           
            Node node = list.item(i);                       
            String name = node.getNodeName();
            if (name == "ewayResponse")
                continue;
            Text textnode = (Text) node.getFirstChild();
            String value = "";
            if (textnode != null)
                value = textnode.getNodeValue();

            if (name == "ewayTrxnError")
                txTrxnError = value;
            else if (name == "ewayTrxnStatus") {
                if (value.toLowerCase().trim().equals("true")) {
                    txTrxnStatus = true;
                }
            }
            else if (name == "ewayTrxnNumber")
                txTrxnNumber = value;
            else if (name == "ewayTrxnOption1")
                txTrxnOption1 = value;
            else if (name == "ewayTrxnOption2")
                txTrxnOption2 = value;
            else if (name == "ewayTrxnOption3")
                txTrxnOption3 = value;
            else if (name == "ewayReturnAmount") {
                if (!value.equals("")) {
                    txReturnAmount = Integer.parseInt(value);
                }
            }
            else if (name == "ewayAuthCode")
                txAuthCode = value;
            else if (name == "ewayTrxnReference")
                txTrxnReference = value;
            else if (name == "ewayBeagleScore") {
                if (!value.equals("")) {
                    txBeagleScore = Double.parseDouble(value);
                }
            }
            else {
                throw new Exception("Unknown field in response: " + name);
            }
        }
       
        if (req.isTestMode()) {
            Debug.logInfo("[eWay Reply]\n" + this.toString(), module);
        }
    }
   
    @Override
    public String toString() {
        StringBuffer buf = new StringBuffer();
        buf.append("<ewayResponse>").append("\n");
        buf.append("\t<ewayTrxnError>").append(txTrxnError).append("</ewayTrxnError>\n");
        buf.append("\t<ewayTrxnStatus>").append(txTrxnStatus).append("</ewayTrxnStatus>\n");
        buf.append("\t<ewayTrxnNumber>").append(txTrxnNumber).append("</ewayTrxnNumber>\n");
        buf.append("\t<ewayTrxnOption1>").append(txTrxnOption1).append("</ewayTrxnOption1>\n");
        buf.append("\t<ewayTrxnOption2>").append(txTrxnOption2).append("</ewayTrxnOption2>\n");
        buf.append("\t<ewayTrxnOption3>").append(txTrxnOption3).append("</ewayTrxnOption3>\n");
        buf.append("\t<ewayReturnAmount>").append(txReturnAmount).append("</ewayReturnAmount>\n");
        buf.append("\t<ewayAuthCode>").append(txAuthCode).append("</ewayAuthCode>\n");
        buf.append("\t<ewayBeagleScore>").append(txBeagleScore).append("</ewayBeagleScore>\n");
        buf.append("\t<ewayTrxnReference>").append(txTrxnReference).append("</ewayTrxnReference>\n");       
        buf.append("</ewayResponse>").append("\n");
        return buf.toString();
    }
}
TOP

Related Classes of org.ofbiz.accounting.thirdparty.eway.GatewayResponse

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.