· 7 years ago · Mar 21, 2018, 05:58 AM
1<form id="payment_confirmation" action="https://testsecureacceptance.cybersource.com/pay" method="post">
2 <input type="hidden" name="access_key" value="*******" />
3
4 <input type="hidden" name="profile_id" value="*******">
5 <input type="hidden" name="amount" value="1.00">
6 <input type="hidden" name="currency" value="USD">
7 <input type="hidden" name="locale" value="en">
8 <input type="hidden" name="reference_number" value="121239237934424">
9 <input type="hidden" name="signed_date_time" value="<%= getUTCDateTime() %>">
10 <input type="hidden" name="transaction_type" size="25" value="authorization">
11 <input type="hidden" name="payment_method" size="25" value="card">
12 <input type="hidden" name="transaction_uuid" value="<%= UUID.randomUUID() %>">
13 <input type="hidden" name="unsigned_field_names" value="card_type, card_number, card_expiry_date">
14 <input type="hidden" name="signed_field_names" value="access_key,profile_id,transaction_uuid,signed_field_names,unsigned_field_names,signed_date_time,locale,transaction_type,reference_number,amount,currency">
15<!-- <input type="hidden" id="card_type" name="card_type" value="001"/>
16<input type="hidden" id="card_number" name="card_number" value="4242424242424242"/>
17<input type="hidden" id="card_expiry_date" name="card_expiry_date" value="11-2020"/> -->
18 <input type="hidden" id="signature" name="signature" value="${signature}" />
19 <input type="submit" id="submit" value="Confirm"/>
20 </form>
21
22private String sign(HttpServletRequest request) throws InvalidKeyException,
23 NoSuchAlgorithmException, UnsupportedEncodingException {
24 return sign(buildDataToSign(request), SECRET_KEY);
25 }
26
27 private String sign(String data, String secretKey)
28 throws InvalidKeyException, NoSuchAlgorithmException,
29 UnsupportedEncodingException {
30 SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(),
31 HMAC_SHA256);
32 Mac mac = Mac.getInstance(HMAC_SHA256);
33 mac.init(secretKeySpec);
34 byte[] rawHmac = mac.doFinal(data.getBytes("UTF-8"));
35 return DatatypeConverter.printBase64Binary(rawHmac).replace("n", "");
36 }
37
38 private String buildDataToSign(HttpServletRequest request) {
39 String[] signedFieldNames = String.valueOf(
40 request.getParameter("signed_field_names")).split(",");
41 ArrayList<String> dataToSign = new ArrayList<String>();
42 for (String signedFieldName : signedFieldNames) {
43 dataToSign.add(signedFieldName + "="
44 + String.valueOf(request.getParameter(signedFieldName)));
45 }
46 return commaSeparate(dataToSign);
47 }
48
49 private String commaSeparate(ArrayList<String> dataToSign) {
50 StringBuilder csv = new StringBuilder();
51 for (Iterator<String> it = dataToSign.iterator(); it.hasNext();) {
52 csv.append(it.next());
53 if (it.hasNext()) {
54 csv.append(",");
55 }
56 }
57 return csv.toString();
58 }