Commit 2ca46422 by Tuomas Riihimäki

Checkout refactoring for bill validation check requests

1 parent 44b77763
...@@ -37,8 +37,7 @@ public class CheckoutBank { ...@@ -37,8 +37,7 @@ public class CheckoutBank {
private static final Logger logger = LoggerFactory.getLogger(CheckoutBank.class); private static final Logger logger = LoggerFactory.getLogger(CheckoutBank.class);
public CheckoutBank(Node bank) { public CheckoutBank(Node bank) {
if (bank.getNodeType() != 1) if (bank.getNodeType() != Node.ELEMENT_NODE) {
{
throw new RuntimeException("Wrong type of node " + bank + " type " + bank.getNodeType()); throw new RuntimeException("Wrong type of node " + bank + " type " + bank.getNodeType());
} }
key = bank.getNodeName(); key = bank.getNodeName();
...@@ -47,8 +46,7 @@ public class CheckoutBank { ...@@ -47,8 +46,7 @@ public class CheckoutBank {
String iconval = null; String iconval = null;
String nameval = null; String nameval = null;
String urlval = null; String urlval = null;
for (int j = 0; j < attrs.getLength(); ++j) for (int j = 0; j < attrs.getLength(); ++j) {
{
Node attr = attrs.item(j); Node attr = attrs.item(j);
if (attr.getNodeName().equals("icon")) { if (attr.getNodeName().equals("icon")) {
iconval = attr.getNodeValue(); iconval = attr.getNodeValue();
...@@ -63,18 +61,14 @@ public class CheckoutBank { ...@@ -63,18 +61,14 @@ public class CheckoutBank {
url = urlval; url = urlval;
NodeList children = bank.getChildNodes(); NodeList children = bank.getChildNodes();
for (int i = 0; i < children.getLength(); ++i) for (int i = 0; i < children.getLength(); ++i) {
{
Node childnode = children.item(i); Node childnode = children.item(i);
if (childnode.getNodeType() == 1) if (childnode.getNodeType() == Node.ELEMENT_NODE) {
{
String paramName = childnode.getNodeName(); String paramName = childnode.getNodeName();
String paramValue = childnode.getTextContent(); String paramValue = childnode.getTextContent();
getPostParams().add(new Valuepair(paramName, paramValue)); getPostParams().add(new Valuepair(paramName, paramValue));
logger.info("Added param for {} name {} value {}", new Object[] { key, paramName, paramValue });
} }
} }
// System.out.println();
} }
......
package fi.codecrew.moya.checkoutfi;
public enum CheckoutFiCheckParam implements CheckoutQuery {
// DO NOT CHANGE THE ORDER OF THESE!
// The md5 checksum is calculated from
// these values...
VERSION("0001"),
STAMP(null),
REFERENCE(null),
MERCHANT(null),
AMOUNT(null),
CURRENCY("EUR"),
FORMAT("1"),
ALGORITHM("1"),
// MAC gets added automatically in querybuilder
;
private final String defaultValue;
private CheckoutFiCheckParam(String def) {
defaultValue = def;
}
public String getDefaultValue() {
return defaultValue;
}
}
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
*/ */
package fi.codecrew.moya.checkoutfi; package fi.codecrew.moya.checkoutfi;
public enum CheckoutFiParam { public enum CheckoutFiParam implements CheckoutQuery {
// DO NOT CHANGE THE ORDER OF THESE! // DO NOT CHANGE THE ORDER OF THESE!
// The md5 checksum is calculated from // The md5 checksum is calculated from
...@@ -45,7 +45,10 @@ public enum CheckoutFiParam { ...@@ -45,7 +45,10 @@ public enum CheckoutFiParam {
FAMILYNAME(null), FAMILYNAME(null),
ADDRESS(null), ADDRESS(null),
POSTCODE(null), POSTCODE(null),
POSTOFFICE(null), ; POSTOFFICE(null),
// MAC gets added automatically in querybuilder
;
private final String defaultValue; private final String defaultValue;
......
package fi.codecrew.moya.checkoutfi;
public interface CheckoutQuery {
public String name();
public String getDefaultValue();
}
package fi.codecrew.moya.beans;
import static org.testng.AssertJUnit.*;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.http.NameValuePair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
import fi.codecrew.moya.beans.CheckoutFiBean.QueryBuilder;
import fi.codecrew.moya.checkoutfi.CheckoutFiParam;
import fi.codecrew.moya.clientutils.BortalLocalContextHolder;
import fi.codecrew.moya.model.Bill;
import fi.codecrew.moya.model.BillLine;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.Product;
import fi.codecrew.moya.util.CheckoutBank;
@Test
public class CheckoutFiBeanTests extends CheckoutFiBean {
private static final Logger logger = LoggerFactory.getLogger(CheckoutFiBeanTests.class);
@Test
public void testQuery() {
QueryBuilder<CheckoutFiParam> queryBuilder = new QueryBuilder<CheckoutFiParam>(CheckoutFiParam.class, CheckoutFiParam.values(), new Date(System.currentTimeMillis() + 60000), "375917", "SAIPPUAKAUPPIAS");
assertTrue("Credentials are valid!", queryBuilder.isCredentialsValid());
final String returnUrl = new StringBuilder()
.append("https://")
.append("localhost")
.append("/MoyaWeb/checkout/")
.toString();
LanEvent lanevent = new LanEvent();
lanevent.setReferenceNumberBase(100000);
Date d = new Date(1427495053008l);
Bill bill = new Bill();
bill.setEvent(lanevent);
bill.setId(67890);
bill.setBillNumber(12345);
bill.setAddr1("Teemu Teekkari");
bill.setAddr2("Hervannantie 1");
bill.setAddr3("33600 Tampere");
bill.setAddr4("FINLAND");
bill.setSentDateTime(d);
Product prod = new Product();
prod.setName("Hurr");
prod.setPrice(new BigDecimal(111.11).setScale(4, RoundingMode.HALF_UP));
bill.getBillLines().add(new BillLine(bill, prod, new BigDecimal(5)));
logger.info("Total price{}" + bill.getTotalPrice());
final String priceInCents = Integer.valueOf(bill.totalPrice().multiply(TO_CENTS).intValue()).toString();
final Map<String, String> requiredParams = new HashMap<>();
requiredParams.put("VERSION", "0001");
requiredParams.put("COUNTRY", "FIN");
requiredParams.put("CURRENCY", "EUR");
requiredParams.put("DEVICE", "10");
requiredParams.put("CONTENT", "1");
requiredParams.put("TYPE", "0");
requiredParams.put("ALGORITHM", "2");
requiredParams.put("LANGUAGE", "FI");
queryBuilder.addParam(CheckoutFiParam.STAMP, getStamp(bill));
requiredParams.put("STAMP", "67890a1427495053");
queryBuilder.addParam(CheckoutFiParam.AMOUNT, priceInCents);
requiredParams.put("AMOUNT", "55555");
queryBuilder.addParam(CheckoutFiParam.REFERENCE, bill.getReferenceNumber().toString());
// 112345 + checksum(2)
requiredParams.put("REFERENCE", "1123452");
queryBuilder.addParam(CheckoutFiParam.MERCHANT, queryBuilder.getMerchantId());
requiredParams.put("MERCHANT", "375917");
queryBuilder.addParam(CheckoutFiParam.RETURN, returnUrl + "return.jsf");
requiredParams.put("RETURN", "https://localhost/MoyaWeb/checkout/return.jsf");
queryBuilder.addParam(CheckoutFiParam.CANCEL, returnUrl + "cancel.jsf");
requiredParams.put("CANCEL", "https://localhost/MoyaWeb/checkout/cancel.jsf");
queryBuilder.addParam(CheckoutFiParam.REJECT, returnUrl + "reject.jsf");
requiredParams.put("REJECT", "https://localhost/MoyaWeb/checkout/reject.jsf");
queryBuilder.addParam(CheckoutFiParam.DELAYED, returnUrl + "delayed.jsf");
requiredParams.put("DELAYED", "https://localhost/MoyaWeb/checkout/delayed.jsf");
queryBuilder.addParam(CheckoutFiParam.DELIVERY_DATE, new SimpleDateFormat(DATEFORMAT).format(d));
requiredParams.put("DELIVERY_DATE", "20150328");
requiredParams.put("MAC", "7FBDC5A633794B7292E6B02020330E64");
List<NameValuePair> nvpairs = queryBuilder.getNameValuePairs();
for (NameValuePair p : nvpairs) {
assertTrue("Missing required param: " + p.getName() + " val " + p.getValue(), requiredParams.containsKey(p.getName()));
String val = requiredParams.remove(p.getName());
assertEquals("Wrong value for " + p.getName(), val, p.getValue());
}
for (Entry<String, String> p : requiredParams.entrySet()) {
logger.warn("Not found param {} with value {}", p.getKey(), p.getValue());
}
}
@Test
public void testXml()
{
InputStream testfile1 = getClass().getResourceAsStream("checkoutTestfile.xml");
List<CheckoutBank> ret = CheckoutFiBean.parseTokenXml(testfile1);
// Huom! Neopay, ape ja tilisiirto poistettu parsinnassa.
assertEquals(8, ret.size());
for (int i = 0; i < ret.size(); ++i) {
CheckoutBank bnk = ret.get(i);
switch (i) {
case 0:
assertEquals("nordea", bnk.getKey());
assertEquals(17, bnk.getPostParams().size());
break;
case 1:
assertEquals("osuuspankki", bnk.getKey());
assertEquals(13, bnk.getPostParams().size());
break;
case 2:
assertEquals("samlink", bnk.getKey());
assertEquals(13, bnk.getPostParams().size());
break;
case 3:
assertEquals("sampo", bnk.getKey());
assertEquals(9, bnk.getPostParams().size());
break;
case 4:
assertEquals("handelsbanken", bnk.getKey());
assertEquals(13, bnk.getPostParams().size());
break;
case 5:
assertEquals("spankki", bnk.getKey());
assertEquals(17, bnk.getPostParams().size());
break;
case 6:
assertEquals("alandsbanken", bnk.getKey());
assertEquals(18, bnk.getPostParams().size());
break;
case 7:
assertEquals("tapiola", bnk.getKey());
assertEquals(18, bnk.getPostParams().size());
break;
case 8:
assertEquals("neopay", bnk.getKey());
assertEquals(9, bnk.getPostParams().size());
break;
case 9:
assertEquals("tilisiirto", bnk.getKey());
assertEquals(6, bnk.getPostParams().size());
break;
case 10:
assertEquals("ape", bnk.getKey());
assertEquals(4, bnk.getPostParams().size());
break;
default:
fail("Wrong number of banks: " + i);
break;
}
}
}
private static final String pollReturnXML = "<?xml version=\"1.0\"?> <trade> <status> 2 </status></trade> ";
private static final String LATIN1 = "ISO-8859-1";
@Test
public void testPollXml() throws UnsupportedEncodingException
{
String ret = CheckoutFiBean.parsePollXml(new ByteArrayInputStream(pollReturnXML.getBytes(LATIN1)));
assertEquals("2", ret);
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!