| /******************************************************************************* |
| * 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(); |
| } |
| } |