diff --git a/src/main/java/com/adyen/Client.java b/src/main/java/com/adyen/Client.java index 8df6b87f6..224c3482f 100644 --- a/src/main/java/com/adyen/Client.java +++ b/src/main/java/com/adyen/Client.java @@ -30,6 +30,7 @@ public class Client { public static final String ENDPOINT_TEST = "https://pal-test.adyen.com"; public static final String ENDPOINT_LIVE = "https://pal-live.adyen.com"; + public static final String ENDPOINT_LIVE_SUFFIX = "-pal-live.adyenpayments.com"; public static final String HPP_TEST = "https://test.adyen.com/hpp"; public static final String HPP_LIVE = "https://live.adyen.com/hpp"; public static final String MARKETPAY_ENDPOINT_TEST = "https://cal-test.adyen.com/cal/services"; @@ -41,10 +42,11 @@ public class Client { public static final String MARKETPAY_NOTIFICATION_API_VERSION = "v1"; public static final String USER_AGENT_SUFFIX = "adyen-java-api-library/"; public static final String LIB_VERSION = "1.5.3"; - public static final String CHECKOUT_ENDPOINT_TEST = "https://checkout-test.adyen.com"; - public static final String CHECKOUT_ENDPOINT_LIVE = "https://checkout-live.adyen.com"; + public static final String CHECKOUT_ENDPOINT_TEST = "https://checkout-test.adyen.com/checkout"; + public static final String CHECKOUT_ENDPOINT_LIVE_SUFFIX = "-checkout-live.adyenpayments.com/checkout"; public static final String CHECKOUT_API_VERSION = "v32"; public static final String CHECKOUT_UTILITY_API_VERSION = "v1"; + public static final String ENDPOINT_PROTOCOL = "https://"; public Client() { this.config = new Config(); @@ -87,23 +89,53 @@ public Client(String apiKey, Environment environment, int connectionTimeoutMilli this.config.setConnectionTimeoutMillis(connectionTimeoutMillis); } + public Client(String username, String password, Environment environment, int connectionTimeoutMillis, String liveEndpointUrlPrefix) { + + this.config = new Config(); + this.config.setUsername(username); + this.config.setPassword(password); + this.setEnvironment(environment, liveEndpointUrlPrefix); + this.config.setConnectionTimeoutMillis(connectionTimeoutMillis); + } + + public Client(String apiKey, Environment environment, int connectionTimeoutMillis, String liveEndpointUrlPrefix) { + + this.config = new Config(); + this.config.setApiKey(apiKey); + this.setEnvironment(environment, liveEndpointUrlPrefix); + this.config.setConnectionTimeoutMillis(connectionTimeoutMillis); + } + + /** + * @deprecated As of library version 1.5.4, replaced by {@link #setEnvironment(Environment environment, String liveEndpointUrlPrefix)}. + */ public void setEnvironment(Environment environment) { + this.setEnvironment(environment, null); + } - if (environment.equals(Environment.TEST)) { + /** + * @param environment + * @param liveEndpointUrlPrefix Provide the unique live url prefix from the "API URLs and Response" menu in the Adyen Customer Area + */ + public void setEnvironment(Environment environment, String liveEndpointUrlPrefix) { + + if (Environment.TEST.equals(environment)) { this.config.setEnvironment(environment); this.config.setEndpoint(ENDPOINT_TEST); this.config.setMarketPayEndpoint(MARKETPAY_ENDPOINT_TEST); this.config.setHppEndpoint(HPP_TEST); this.config.setCheckoutEndpoint(CHECKOUT_ENDPOINT_TEST); - - } else if (environment.equals(Environment.LIVE)) { + } else if (Environment.LIVE.equals(environment)) { this.config.setEnvironment(environment); - this.config.setEndpoint(ENDPOINT_LIVE); this.config.setMarketPayEndpoint(MARKETPAY_ENDPOINT_LIVE); this.config.setHppEndpoint(HPP_LIVE); - this.config.setCheckoutEndpoint(CHECKOUT_ENDPOINT_LIVE); - } else { - // throw exception + if (liveEndpointUrlPrefix != null && ! liveEndpointUrlPrefix.isEmpty()) { + this.config.setEndpoint(ENDPOINT_PROTOCOL + liveEndpointUrlPrefix + ENDPOINT_LIVE_SUFFIX); + this.config.setCheckoutEndpoint(ENDPOINT_PROTOCOL + liveEndpointUrlPrefix + CHECKOUT_ENDPOINT_LIVE_SUFFIX); + } else { + this.config.setEndpoint(ENDPOINT_LIVE); + this.config.setCheckoutEndpoint(null); + } } } diff --git a/src/main/java/com/adyen/Config.java b/src/main/java/com/adyen/Config.java index d3cc07b2d..e9aacf16c 100644 --- a/src/main/java/com/adyen/Config.java +++ b/src/main/java/com/adyen/Config.java @@ -41,7 +41,6 @@ public class Config { //Checkout Specific protected String checkoutEndpoint; - public Config() { // do nothing } @@ -135,6 +134,10 @@ public void setHmacKey(String hmacKey) { } public String getCheckoutEndpoint() { + if (checkoutEndpoint == null || checkoutEndpoint.isEmpty()) { + String message = "Please provide your unique live url prefix on the setEnvironment() call on the Client or provide checkoutEndpoint in your config object."; + throw new IllegalArgumentException(message); + } return checkoutEndpoint; } @@ -150,5 +153,4 @@ public void setConnectionTimeoutMillis(int connectionTimeoutMillis) { this.connectionTimeoutMillis = connectionTimeoutMillis; } - } diff --git a/src/main/java/com/adyen/service/Checkout.java b/src/main/java/com/adyen/service/Checkout.java index 2004f4e9d..20ede3c9c 100644 --- a/src/main/java/com/adyen/service/Checkout.java +++ b/src/main/java/com/adyen/service/Checkout.java @@ -21,6 +21,7 @@ package com.adyen.service; +import java.io.IOException; import com.adyen.ApiKeyAuthenticatedService; import com.adyen.Client; import com.adyen.model.checkout.*; @@ -28,7 +29,6 @@ import com.adyen.service.resource.checkout.*; import com.google.gson.reflect.TypeToken; -import java.io.IOException; public class Checkout extends ApiKeyAuthenticatedService { diff --git a/src/main/java/com/adyen/service/Resource.java b/src/main/java/com/adyen/service/Resource.java index 8e3fe4c4e..cc7208d8b 100644 --- a/src/main/java/com/adyen/service/Resource.java +++ b/src/main/java/com/adyen/service/Resource.java @@ -67,7 +67,7 @@ public String request(String json) throws ApiException, IOException { }.getType()); apiException.setError(apiError); } catch (JsonSyntaxException ignored) { - throw new ApiException("Invalid respose or an invalid X-API-Key key was used", apiException.getStatusCode()); + throw new ApiException("Invalid response or an invalid X-API-Key key was used", apiException.getStatusCode()); } throw apiException; diff --git a/src/test/java/com/adyen/BaseTest.java b/src/test/java/com/adyen/BaseTest.java index 55b4f0d8a..beac69b75 100644 --- a/src/test/java/com/adyen/BaseTest.java +++ b/src/test/java/com/adyen/BaseTest.java @@ -58,6 +58,7 @@ protected Client createMockClientFromResponse(String response) { Config config = new Config(); config.setHmacKey("DFB1EB5485895CFA84146406857104ABB4CBCABDC8AAF103A624C8F6A3EAAB00"); + config.setCheckoutEndpoint(client.CHECKOUT_ENDPOINT_TEST); client.setConfig(config); return client; diff --git a/src/test/java/com/adyen/CheckoutTest.java b/src/test/java/com/adyen/CheckoutTest.java index 3b61bf51b..af908d752 100644 --- a/src/test/java/com/adyen/CheckoutTest.java +++ b/src/test/java/com/adyen/CheckoutTest.java @@ -27,6 +27,7 @@ import java.util.HashMap; +import static com.adyen.enums.Environment.LIVE; import static junit.framework.TestCase.assertNull; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -180,6 +181,21 @@ public void TestPaymentsResultErrorMocked() throws Exception { assertNull(paymentResultResponse.getResultCode()); } + /** + * Test error flow on Checkout creation + */ + @Test + public void TestPaymentMethodsFailureMissingIdentifierOnLive() throws Exception { + Client client = createMockClientFromFile("mocks/checkout/paymentsresult-error-invalid-data-payload-422.json"); + client.setEnvironment(LIVE); + try { + new Checkout(client); + } catch (IllegalArgumentException e) { + assertEquals("Please provide your unique live url prefix on the setEnvironment() call on the Client or provide checkoutEndpoint in your config object.", e.getMessage()); + } + + } + /** * Returns a sample PaymentSessionRequest opbject with test data */