From a4c4d56f6233988eecd0685f7c63de08b2bf1de7 Mon Sep 17 00:00:00 2001 From: Kumar Date: Tue, 26 Sep 2017 07:57:16 -0400 Subject: [PATCH 1/5] Changed for lightBox --- .../src/main/java/com/realexpayments/hpp/HPPManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java index af7405d..cf95270 100644 --- a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java +++ b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java @@ -55,7 +55,7 @@ public static boolean isLightBox() { return lightBox; } - private static boolean lightBox = true; + private static boolean lightBox = false; /** * From 82fa4ef56b7ab50c07bd455689b237a2133d8223 Mon Sep 17 00:00:00 2001 From: Kumar Date: Tue, 26 Sep 2017 13:06:06 -0400 Subject: [PATCH 2/5] Changed for lightbox --- .../java/com/realexpayments/hpp/HPPManager.java | 4 +++- .../realexpayments/hpp/HPPManagerFragment.java | 15 +++++++++++++++ .../java/com/realexpayments/hpp/HPPResponse.java | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java index cf95270..0cc6aaa 100644 --- a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java +++ b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java @@ -42,11 +42,13 @@ public class HPPManager extends HPPResponse { public static final String HPPREQUEST_PRODUCER_URL = "HPPREQUEST_PRODUCER_URL"; public static final String HPPRESPONSE_CONSUMER_URL = "HPPRESPONSE_CONSUMER_URL"; public static final String HPPURL = "HPPURL"; + public static final String hppPOST = "https://www.mydomain.com"; private String hppRequestProducerURL = ""; private String hppResponseConsumerURL = ""; private String hppURL = "https://pay.realexpayments.com/pay"; + //Supplementary data to be sent to Realex Payments. This will be returned in the HPP response. private HashMap supplementaryData = new HashMap(); @@ -55,7 +57,7 @@ public static boolean isLightBox() { return lightBox; } - private static boolean lightBox = false; + private static boolean lightBox = true; /** * diff --git a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java index 18e1fff..5deec54 100644 --- a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java +++ b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java @@ -67,8 +67,18 @@ public HPPManagerFragment() { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { + Fragment hppManagerFragment = hppManager.newInstance(); + getFragmentManager() + .beginTransaction() + .add(R.id.hpp_web_view,hppManagerFragment) + .commit(); hppManager = HPPManager.createFromBundle(getArguments()); } + Fragment hppManagerFragment = hppManager.newInstance(); + getFragmentManager() + .beginTransaction() + .add(R.id.hpp_web_view,hppManagerFragment) + .commit(); } @Override @@ -270,6 +280,11 @@ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError e Uri uri = Uri.parse(hppManager.getHppRequestProducerURL()); params.put(HPPManager.HPP_ORIGIN, uri.getScheme() + "://" + uri.getHost()); } + else { + params.put(HPPManager.HPP_VERSION, "2"); + Uri uri = Uri.parse(hppManager.getHppRequestProducerURL()); + params.put(HPPManager.HPP_POST_RESPONSE, uri.getScheme() + "://" + uri.getHost()); + } for (String key : params.keySet()) { if (params.get(key) != null && params.get(key).length() > 0) diff --git a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPResponse.java b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPResponse.java index 39da1c3..1d9cbdb 100644 --- a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPResponse.java +++ b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPResponse.java @@ -39,6 +39,8 @@ public class HPPResponse { public static final String HPP_TEMPLATE_TYPE = "HPP_TEMPLATE_TYPE"; public static final String HPP_ORIGIN = "HPP_ORIGIN"; public static final String SUPPLEMENTARYDATA = "SUPPLEMENTARYDATA"; + public static final String HPP_VERSION = "HPP_VERSION"; + public static final String HPP_POST_RESPONSE = "HPP_POST_RESPONSE"; /** * Getter for merchant ID. From 45bd87ca95ef0d653f7dd493242ef0690e03798b Mon Sep 17 00:00:00 2001 From: Kumar Date: Mon, 9 Oct 2017 11:15:20 -0400 Subject: [PATCH 3/5] Added code for decode --- .../com/realexpayments/hpp/HPPManager.java | 12 +++-- .../hpp/HPPManagerFragment.java | 49 +++++++++---------- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java index 0cc6aaa..3d305be 100644 --- a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java +++ b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java @@ -42,22 +42,23 @@ public class HPPManager extends HPPResponse { public static final String HPPREQUEST_PRODUCER_URL = "HPPREQUEST_PRODUCER_URL"; public static final String HPPRESPONSE_CONSUMER_URL = "HPPRESPONSE_CONSUMER_URL"; public static final String HPPURL = "HPPURL"; - public static final String hppPOST = "https://www.mydomain.com"; private String hppRequestProducerURL = ""; private String hppResponseConsumerURL = ""; private String hppURL = "https://pay.realexpayments.com/pay"; - //Supplementary data to be sent to Realex Payments. This will be returned in the HPP response. private HashMap supplementaryData = new HashMap(); + private static boolean isEncoded = false; - public static boolean isLightBox() { - return lightBox; + public static boolean isEncoded() { + return isEncoded; } - private static boolean lightBox = true; + public static void setIsEncoded(boolean isEncoded) { + HPPManager.isEncoded = isEncoded; + } /** * @@ -81,6 +82,7 @@ public void setHppRequestProducerURL(String hppRequestProducerURL) { * @return hpp response consumer url */ public String getHppResponseConsumerURL() { + return hppResponseConsumerURL; } diff --git a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java index 5deec54..f498ea1 100644 --- a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java +++ b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java @@ -38,6 +38,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import android.util.Base64; import retrofit.Callback; import retrofit.RetrofitError; @@ -47,9 +48,9 @@ /** * Payment form fragment. * - Insert the HppManager fragment into your activity as follows; - Fragment hppManagerFragment = hppManager.newInstance();

 - getFragmentManager()
.beginTransaction().add(R.id.container,hppManagerFrament)
.commit(); + Insert the HppManager fragment into your activity as follows; + Fragment hppManagerFragment = hppManager.newInstance();

 + getFragmentManager()
.beginTransaction().add(R.id.container,hppManagerFrament)
.commit(); **/ @@ -67,18 +68,8 @@ public HPPManagerFragment() { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { - Fragment hppManagerFragment = hppManager.newInstance(); - getFragmentManager() - .beginTransaction() - .add(R.id.hpp_web_view,hppManagerFragment) - .commit(); hppManager = HPPManager.createFromBundle(getArguments()); } - Fragment hppManagerFragment = hppManager.newInstance(); - getFragmentManager() - .beginTransaction() - .add(R.id.hpp_web_view,hppManagerFragment) - .commit(); } @Override @@ -225,7 +216,7 @@ public void onReceiveValue(String value) { @SuppressLint("NewApi") @Override - public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { + public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { super.onReceivedHttpError(view, request, errorResponse); if (this.url.equals(hppManager.getHppURL())) { @@ -275,20 +266,28 @@ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError e params.put(key, consumer_response_params.get(key)); } - if (hppManager.isLightBox()) { - params.put(HPPManager.HPP_TEMPLATE_TYPE, "LIGHTBOX"); - Uri uri = Uri.parse(hppManager.getHppRequestProducerURL()); - params.put(HPPManager.HPP_ORIGIN, uri.getScheme() + "://" + uri.getHost()); - } - else { - params.put(HPPManager.HPP_VERSION, "2"); - Uri uri = Uri.parse(hppManager.getHppRequestProducerURL()); - params.put(HPPManager.HPP_POST_RESPONSE, uri.getScheme() + "://" + uri.getHost()); - } + params.put(HPPManager.HPP_VERSION, "2"); + Uri uri = Uri.parse(hppManager.getHppRequestProducerURL()); + params.put(HPPManager.HPP_POST_RESPONSE, uri.getScheme() + "://" + uri.getHost()); for (String key : params.keySet()) { if (params.get(key) != null && params.get(key).length() > 0) - nvps.add(new BasicNameValuePair(key, params.get(key))); + + if (hppManager.isEncoded()) { + if (key.equals("SHA1HASH") || key.equals("TIMESTAMP") || key.equals("ACCOUNT") || key.equals("AMOUNT") + || key.equals("ORDER_ID") || key.equals("MERCHANT_ID") || key.equals("CURRENCY") || key.equals("AUTO_SETTLE_FLAG") + ) { + String encodeValue = params.get(key); + byte[] decodeValue = Base64.decode(encodeValue.toString(), Base64.DEFAULT); + String decodeValues = new String(decodeValue); + nvps.add(new BasicNameValuePair(key, decodeValues)); + } else { + nvps.add(new BasicNameValuePair(key, params.get(key))); + } + } + else{ + nvps.add(new BasicNameValuePair(key, params.get(key))); + } } try { From 54061f5fe279b806ae61c16eee744ec49fdec90f Mon Sep 17 00:00:00 2001 From: Kumar Date: Wed, 11 Oct 2017 13:01:36 -0400 Subject: [PATCH 4/5] Changed the code for decode --- .../realexpayments/hpp/HPPManagerFragment.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java index f498ea1..3bb310d 100644 --- a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java +++ b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java @@ -271,23 +271,18 @@ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError e params.put(HPPManager.HPP_POST_RESPONSE, uri.getScheme() + "://" + uri.getHost()); for (String key : params.keySet()) { - if (params.get(key) != null && params.get(key).length() > 0) - + if (params.get(key) != null && params.get(key).length() > 0) { if (hppManager.isEncoded()) { - if (key.equals("SHA1HASH") || key.equals("TIMESTAMP") || key.equals("ACCOUNT") || key.equals("AMOUNT") - || key.equals("ORDER_ID") || key.equals("MERCHANT_ID") || key.equals("CURRENCY") || key.equals("AUTO_SETTLE_FLAG") - ) { - String encodeValue = params.get(key); + if (!key.equals("HPP_POST_RESPONSE") && !key.equals("HPP_VERSION")) { + String encodeValue = new String(params.get(key)); byte[] decodeValue = Base64.decode(encodeValue.toString(), Base64.DEFAULT); String decodeValues = new String(decodeValue); - nvps.add(new BasicNameValuePair(key, decodeValues)); - } else { - nvps.add(new BasicNameValuePair(key, params.get(key))); + nvps.add(new BasicNameValuePair(key, decodeValues.toString())); } - } - else{ + } else { nvps.add(new BasicNameValuePair(key, params.get(key))); } + } } try { From 2f45c5f210d5bfc2c2e8c1778c2d91176776d338 Mon Sep 17 00:00:00 2001 From: rxp-developers Date: Thu, 19 Oct 2017 09:21:41 +0100 Subject: [PATCH 5/5] Small fixes to default to HPP Version 2. --- .../java/com/realexpayments/hpp/HPPManager.java | 9 ++++----- .../com/realexpayments/hpp/HPPManagerFragment.java | 13 ++++++++----- .../java/com/realexpayments/hpp/HPPResponse.java | 8 ++++++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java index 3d305be..11b7b31 100644 --- a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java +++ b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManager.java @@ -16,19 +16,14 @@ You set these three URLs as follows; hppManager.setHppRequestProducerURL("https://myserver.com/HPP_Request_Producer.php"); - hppManager.setHppResponseConsumerURL("https://myserver.com/HPP_Response_Consumer.php""); - hppManager.setHppURL("https://pay.sandbox.realexpayments.com/pay"; Set HPP Properties hppManager.setMerchantId("realexsandbox"); - hppManager.setAccount("internet"); - hppManager.setAmount("100"); - hppManager.setCurrency("EUR"); it is also possible to set options by createFromBundle function @@ -158,6 +153,8 @@ public static HPPManager createFromBundle(Bundle arg) { hppManager.variableReference = arg.getString(VAR_REF); hppManager.productId = arg.getString(PROD_ID); hppManager.language = arg.getString(HPP_LANG); + hppManager.hppVersion = arg.getString(HPP_VERSION); + hppManager.hppPostResponse = arg.getString(HPP_POST_RESPONSE); hppManager.cardPaymentButtonText = arg.getString(CARD_PAYMENT_BUTTON); hppManager.cardStorageEnable = arg.getString(CARD_STORAGE_ENABLE); hppManager.offerSaveCard = arg.getString(OFFER_SAVE_CARD); @@ -207,6 +204,8 @@ public Fragment newInstance() { args.putString(VAR_REF, variableReference); args.putString(PROD_ID, productId); args.putString(HPP_LANG, language); + args.putString(HPP_VERSION, hppVersion); + args.putString(HPP_POST_RESPONSE, hppPostResponse); args.putString(CARD_PAYMENT_BUTTON, cardPaymentButtonText); args.putString(CARD_STORAGE_ENABLE, cardStorageEnable); args.putString(OFFER_SAVE_CARD, offerSaveCard); diff --git a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java index 3bb310d..1a20895 100644 --- a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java +++ b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPManagerFragment.java @@ -266,20 +266,23 @@ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError e params.put(key, consumer_response_params.get(key)); } - params.put(HPPManager.HPP_VERSION, "2"); + // default to HPP Version 2 + nvps.add(new BasicNameValuePair("HPP_VERSION", "2")); + + // determine the target origin to receive the response Uri uri = Uri.parse(hppManager.getHppRequestProducerURL()); - params.put(HPPManager.HPP_POST_RESPONSE, uri.getScheme() + "://" + uri.getHost()); + nvps.add(new BasicNameValuePair("HPP_POST_RESPONSE", uri.getScheme() + "://" + uri.getHost())); for (String key : params.keySet()) { if (params.get(key) != null && params.get(key).length() > 0) { if (hppManager.isEncoded()) { - if (!key.equals("HPP_POST_RESPONSE") && !key.equals("HPP_VERSION")) { String encodeValue = new String(params.get(key)); byte[] decodeValue = Base64.decode(encodeValue.toString(), Base64.DEFAULT); String decodeValues = new String(decodeValue); nvps.add(new BasicNameValuePair(key, decodeValues.toString())); - } - } else { + } + + else { nvps.add(new BasicNameValuePair(key, params.get(key))); } } diff --git a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPResponse.java b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPResponse.java index 1d9cbdb..10cb788 100644 --- a/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPResponse.java +++ b/rxp-hpp-android/src/main/java/com/realexpayments/hpp/HPPResponse.java @@ -726,6 +726,12 @@ public void setTemplateType(String templateType) { @SerializedName(HPP_ORIGIN) protected String origin; + @SerializedName(HPP_VERSION) + protected String hppVersion; + + @SerializedName(HPP_POST_RESPONSE) + protected String hppPostResponse; + public HashMap getMap() { HashMap parameters = new HashMap<>(); @@ -758,6 +764,8 @@ public HashMap getMap() { parameters.put(SHA1_HASH, sha1Hash); parameters.put(HPP_TEMPLATE_TYPE, templateType); parameters.put(HPP_ORIGIN, origin); + parameters.put(HPP_VERSION, hppVersion); + parameters.put(HPP_POST_RESPONSE, hppPostResponse); return parameters; }