Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Riina Antikainen
/
Moya
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 2ca46422
authored
Mar 28, 2015
by
Tuomas Riihimäki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Checkout refactoring for bill validation check requests
1 parent
44b77763
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
240 additions
and
12 deletions
code/moya-beans-client/ejbModule/fi/codecrew/moya/util/CheckoutBank.java
code/moya-beans/ejbModule/fi/codecrew/moya/beans/CheckoutFiBean.java
code/moya-beans/ejbModule/fi/codecrew/moya/checkoutfi/CheckoutFiCheckParam.java
code/moya-beans/ejbModule/fi/codecrew/moya/checkoutfi/CheckoutFiParam.java
code/moya-beans/ejbModule/fi/codecrew/moya/checkoutfi/CheckoutQuery.java
code/moya-beans/src/test/java/fi/codecrew/moya/beans/CheckoutFiBeanTests.java
code/moya-beans-client/ejbModule/fi/codecrew/moya/util/CheckoutBank.java
View file @
2ca4642
...
...
@@ -37,8 +37,7 @@ public class CheckoutBank {
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
CheckoutBank
.
class
);
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
());
}
key
=
bank
.
getNodeName
();
...
...
@@ -47,8 +46,7 @@ public class CheckoutBank {
String
iconval
=
null
;
String
nameval
=
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
);
if
(
attr
.
getNodeName
().
equals
(
"icon"
))
{
iconval
=
attr
.
getNodeValue
();
...
...
@@ -63,18 +61,14 @@ public class CheckoutBank {
url
=
urlval
;
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
);
if
(
childnode
.
getNodeType
()
==
1
)
{
if
(
childnode
.
getNodeType
()
==
Node
.
ELEMENT_NODE
)
{
String
paramName
=
childnode
.
getNodeName
();
String
paramValue
=
childnode
.
getTextContent
();
getPostParams
().
add
(
new
Valuepair
(
paramName
,
paramValue
));
logger
.
info
(
"Added param for {} name {} value {}"
,
new
Object
[]
{
key
,
paramName
,
paramValue
});
}
}
// System.out.println();
}
...
...
code/moya-beans/ejbModule/fi/codecrew/moya/beans/CheckoutFiBean.java
View file @
2ca4642
This diff is collapsed.
Click to expand it.
code/moya-beans/ejbModule/fi/codecrew/moya/checkoutfi/CheckoutFiCheckParam.java
0 → 100644
View file @
2ca4642
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
;
}
}
code/moya-beans/ejbModule/fi/codecrew/moya/checkoutfi/CheckoutFiParam.java
View file @
2ca4642
...
...
@@ -18,7 +18,7 @@
*/
package
fi
.
codecrew
.
moya
.
checkoutfi
;
public
enum
CheckoutFiParam
{
public
enum
CheckoutFiParam
implements
CheckoutQuery
{
// DO NOT CHANGE THE ORDER OF THESE!
// The md5 checksum is calculated from
...
...
@@ -45,7 +45,10 @@ public enum CheckoutFiParam {
FAMILYNAME
(
null
),
ADDRESS
(
null
),
POSTCODE
(
null
),
POSTOFFICE
(
null
),
;
POSTOFFICE
(
null
),
// MAC gets added automatically in querybuilder
;
private
final
String
defaultValue
;
...
...
code/moya-beans/ejbModule/fi/codecrew/moya/checkoutfi/CheckoutQuery.java
0 → 100644
View file @
2ca4642
package
fi
.
codecrew
.
moya
.
checkoutfi
;
public
interface
CheckoutQuery
{
public
String
name
();
public
String
getDefaultValue
();
}
code/moya-beans/src/test/java/fi/codecrew/moya/beans/CheckoutFiBeanTests.java
0 → 100644
View file @
2ca4642
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
(
1427495053008
l
);
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
);
}
}
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment