From 38ea48072e3993ed907a2121e5c933b52517bfd4 Mon Sep 17 00:00:00 2001 From: "marina.nekrassova" Date: Fri, 2 Nov 2018 10:47:27 +0200 Subject: [PATCH 1/8] Custom read timeout for HttpURLConnection --- src/main/java/com/adyen/Client.java | 48 ++++--------------- src/main/java/com/adyen/Config.java | 9 ++++ .../httpclient/HttpURLConnectionClient.java | 6 ++- 3 files changed, 23 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/adyen/Client.java b/src/main/java/com/adyen/Client.java index e6ab081b8..18bc2ed37 100644 --- a/src/main/java/com/adyen/Client.java +++ b/src/main/java/com/adyen/Client.java @@ -57,28 +57,20 @@ public Client(Config config) { } public Client(String username, String password, Environment environment, String applicationName) { - - this.config = new Config(); - this.config.setUsername(username); - this.config.setPassword(password); - this.setEnvironment(environment); - this.config.setApplicationName(applicationName); + this(username, password, environment, null, applicationName); } - public Client(String username, String password, Environment environment, int connectionTimeoutMillis) { + public Client(String username, String password, Environment environment, String liveEndpointUrlPrefix, String applicationName) { this.config = new Config(); this.config.setUsername(username); this.config.setPassword(password); - this.setEnvironment(environment); - this.config.setConnectionTimeoutMillis(connectionTimeoutMillis); + this.setEnvironment(environment, liveEndpointUrlPrefix); + this.config.setApplicationName(applicationName); } public Client(String apiKey, Environment environment) { - - this.config = new Config(); - this.config.setApiKey(apiKey); - this.setEnvironment(environment); + this(apiKey, environment, null); } public Client(String apiKey, Environment environment, String liveEndpointUrlPrefix) { @@ -87,31 +79,6 @@ public Client(String apiKey, Environment environment, String liveEndpointUrlPref this.setEnvironment(environment, liveEndpointUrlPrefix); } - public Client(String apiKey, Environment environment, int connectionTimeoutMillis) { - - this.config = new Config(); - this.config.setApiKey(apiKey); - this.setEnvironment(environment); - 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)}. */ @@ -176,4 +143,9 @@ public void setApplicationName(String applicationName) { this.config.setApplicationName(applicationName); } + public void setTimeouts(int connectionTimeoutMillis, int readTimeoutMillis) { + this.config.setConnectionTimeoutMillis(connectionTimeoutMillis); + this.config.setReadTimeoutMillis(readTimeoutMillis); + } + } diff --git a/src/main/java/com/adyen/Config.java b/src/main/java/com/adyen/Config.java index e9aacf16c..f2322e2c0 100644 --- a/src/main/java/com/adyen/Config.java +++ b/src/main/java/com/adyen/Config.java @@ -32,6 +32,7 @@ public class Config { protected String applicationName; protected String apiKey; protected int connectionTimeoutMillis; + protected int readTimeoutMillis; //HPP specific protected String hppEndpoint; @@ -153,4 +154,12 @@ public void setConnectionTimeoutMillis(int connectionTimeoutMillis) { this.connectionTimeoutMillis = connectionTimeoutMillis; } + public int getReadTimeoutMillis() { + return readTimeoutMillis; + } + + public void setReadTimeoutMillis(int readTimeoutMillis) { + this.readTimeoutMillis = readTimeoutMillis; + } + } diff --git a/src/main/java/com/adyen/httpclient/HttpURLConnectionClient.java b/src/main/java/com/adyen/httpclient/HttpURLConnectionClient.java index 7bb53fb3d..ec78040ff 100644 --- a/src/main/java/com/adyen/httpclient/HttpURLConnectionClient.java +++ b/src/main/java/com/adyen/httpclient/HttpURLConnectionClient.java @@ -67,8 +67,8 @@ public String request(String endpoint, String json, Config config, boolean isApi @Override public String request(String requestUrl, String requestBody, Config config, boolean isApiKeyRequired, RequestOptions requestOptions) throws IOException, HTTPClientException { HttpURLConnection httpConnection = createRequest(requestUrl, config.getApplicationName(), requestOptions); + String apiKey = config.getApiKey(); - int connectionTimeoutMillis = config.getConnectionTimeoutMillis(); // Use Api key if required or if provided if (isApiKeyRequired || (apiKey != null && ! apiKey.isEmpty())) { setApiKey(httpConnection, apiKey); @@ -76,7 +76,9 @@ public String request(String requestUrl, String requestBody, Config config, bool setBasicAuthentication(httpConnection, config.getUsername(), config.getPassword()); } - httpConnection.setConnectTimeout(connectionTimeoutMillis); + httpConnection.setConnectTimeout(config.getConnectionTimeoutMillis()); + httpConnection.setReadTimeout(config.getReadTimeoutMillis()); + setContentType(httpConnection, APPLICATION_JSON_TYPE); return doPostRequest(httpConnection, requestBody); From 1c60954e62c59ffa38654b662e3387140d80c47b Mon Sep 17 00:00:00 2001 From: Giorgos Adam Date: Wed, 7 Nov 2018 11:40:29 +0100 Subject: [PATCH 2/8] Route checkout api calls to v40 (additional fields are not included) Added application info --- src/main/java/com/adyen/Client.java | 4 +- .../httpclient/HttpURLConnectionClient.java | 2 +- .../applicationinfo/ApplicationInfo.java | 122 ++++++++++++++++++ .../model/applicationinfo/CommonField.java | 52 ++++++++ .../applicationinfo/ExternalPlatform.java | 41 ++++++ .../model/applicationinfo/MerchantDevice.java | 63 +++++++++ .../ShopperInteractionDevice.java | 63 +++++++++ .../adyen/model/checkout/PaymentsRequest.java | 37 +++++- src/test/java/com/adyen/CheckoutTest.java | 9 +- 9 files changed, 380 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/adyen/model/applicationinfo/ApplicationInfo.java create mode 100644 src/main/java/com/adyen/model/applicationinfo/CommonField.java create mode 100644 src/main/java/com/adyen/model/applicationinfo/ExternalPlatform.java create mode 100644 src/main/java/com/adyen/model/applicationinfo/MerchantDevice.java create mode 100644 src/main/java/com/adyen/model/applicationinfo/ShopperInteractionDevice.java diff --git a/src/main/java/com/adyen/Client.java b/src/main/java/com/adyen/Client.java index e6ab081b8..566c86b32 100644 --- a/src/main/java/com/adyen/Client.java +++ b/src/main/java/com/adyen/Client.java @@ -40,11 +40,11 @@ public class Client { public static final String MARKETPAY_ACCOUNT_API_VERSION = "v4"; public static final String MARKETPAY_FUND_API_VERSION = "v3"; 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_NAME = "adyen-java-api-library"; public static final String LIB_VERSION = "1.6.0"; 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_API_VERSION = "v40"; public static final String CHECKOUT_UTILITY_API_VERSION = "v1"; public static final String ENDPOINT_PROTOCOL = "https://"; diff --git a/src/main/java/com/adyen/httpclient/HttpURLConnectionClient.java b/src/main/java/com/adyen/httpclient/HttpURLConnectionClient.java index 7bb53fb3d..1a75eabda 100644 --- a/src/main/java/com/adyen/httpclient/HttpURLConnectionClient.java +++ b/src/main/java/com/adyen/httpclient/HttpURLConnectionClient.java @@ -150,7 +150,7 @@ private HttpURLConnection createRequest(String requestUrl, String applicationNam httpConnection.setRequestMethod(METHOD_POST); httpConnection.setRequestProperty(ACCEPT_CHARSET, CHARSET); - httpConnection.setRequestProperty(USER_AGENT, String.format("%s %s%s", applicationName, Client.USER_AGENT_SUFFIX, Client.LIB_VERSION)); + httpConnection.setRequestProperty(USER_AGENT, String.format("%s %s/%s", applicationName, Client.LIB_NAME, Client.LIB_VERSION)); if (requestOptions != null && requestOptions.getIdempotencyKey() != null) { httpConnection.setRequestProperty(IDEMPOTENCY_KEY, requestOptions.getIdempotencyKey()); } diff --git a/src/main/java/com/adyen/model/applicationinfo/ApplicationInfo.java b/src/main/java/com/adyen/model/applicationinfo/ApplicationInfo.java new file mode 100644 index 000000000..7b82d333e --- /dev/null +++ b/src/main/java/com/adyen/model/applicationinfo/ApplicationInfo.java @@ -0,0 +1,122 @@ +/* + * ###### + * ###### + * ############ ####( ###### #####. ###### ############ ############ + * ############# #####( ###### #####. ###### ############# ############# + * ###### #####( ###### #####. ###### ##### ###### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ###### + * ############# ############# ############# ############# ##### ###### + * ############ ############ ############# ############ ##### ###### + * ###### + * ############# + * ############ + * + * Adyen Java API Library + * + * Copyright (c) 2017 Adyen B.V. + * This file is open source and available under the MIT license. + * See the LICENSE file for more info. + */ +package com.adyen.model.applicationinfo; + +import com.google.gson.annotations.SerializedName; + +public class ApplicationInfo { + @SerializedName("adyenLibrary") + private CommonField adyenLibrary; + + @SerializedName("adyenPaymentSource") + private CommonField adyenPaymentSource; + + @SerializedName("merchantApplication") + private CommonField merchantApplication; + + @SerializedName("merchantDevice") + private MerchantDevice merchantDevice; + + @SerializedName("externalPlatform") + private ExternalPlatform externalPlatform; + + @SerializedName("paymentDetailsSource") + private CommonField paymentDetailsSource; + + @SerializedName("shopperInteractionDevice") + private ShopperInteractionDevice shopperInteractionDevice; + + public CommonField getAdyenLibrary() { + return adyenLibrary; + } + + public void setAdyenLibrary(CommonField adyenLibrary) { + this.adyenLibrary = adyenLibrary; + } + + public CommonField getAdyenPaymentSource() { + return adyenPaymentSource; + } + + public void setAdyenPaymentSource(CommonField adyenPaymentSource) { + this.adyenPaymentSource = adyenPaymentSource; + } + + public CommonField getMerchantApplication() { + return merchantApplication; + } + + public void setMerchantApplication(CommonField merchantApplication) { + this.merchantApplication = merchantApplication; + } + + public MerchantDevice getMerchantDevice() { + return merchantDevice; + } + + public void setMerchantDevice(MerchantDevice merchantDevice) { + this.merchantDevice = merchantDevice; + } + + public ExternalPlatform getExternalPlatform() { + return externalPlatform; + } + + public void setExternalPlatform(ExternalPlatform externalPlatform) { + this.externalPlatform = externalPlatform; + } + + public CommonField getPaymentDetailsSource() { + return paymentDetailsSource; + } + + public void setPaymentDetailsSource(CommonField paymentDetailsSource) { + this.paymentDetailsSource = paymentDetailsSource; + } + + public ShopperInteractionDevice getShopperInteractionDevice() { + return shopperInteractionDevice; + } + + public void setShopperInteractionDevice(ShopperInteractionDevice shopperInteractionDevice) { + this.shopperInteractionDevice = shopperInteractionDevice; + } + + @Override + public String toString() { + return "ApplicationInfo{" + + "adyenLibrary=" + + adyenLibrary + + ", adyenPaymentSource=" + + adyenPaymentSource + + ", merchantApplication=" + + merchantApplication + + ", merchantDevice=" + + merchantDevice + + ", externalPlatform=" + + externalPlatform + + ", paymentDetailsSource=" + + paymentDetailsSource + + ", shopperInteractionDevice=" + + shopperInteractionDevice + + '}'; + } +} diff --git a/src/main/java/com/adyen/model/applicationinfo/CommonField.java b/src/main/java/com/adyen/model/applicationinfo/CommonField.java new file mode 100644 index 000000000..37eb2bd1c --- /dev/null +++ b/src/main/java/com/adyen/model/applicationinfo/CommonField.java @@ -0,0 +1,52 @@ +/* + * ###### + * ###### + * ############ ####( ###### #####. ###### ############ ############ + * ############# #####( ###### #####. ###### ############# ############# + * ###### #####( ###### #####. ###### ##### ###### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ###### + * ############# ############# ############# ############# ##### ###### + * ############ ############ ############# ############ ##### ###### + * ###### + * ############# + * ############ + * + * Adyen Java API Library + * + * Copyright (c) 2017 Adyen B.V. + * This file is open source and available under the MIT license. + * See the LICENSE file for more info. + */ +package com.adyen.model.applicationinfo; + +import com.google.gson.annotations.SerializedName; + +public class CommonField { + @SerializedName("name") + private String name; + + @SerializedName("version") + private String version; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + @Override + public String toString() { + return "CommonField{" + "name='" + name + '\'' + ", version='" + version + '\'' + '}'; + } +} diff --git a/src/main/java/com/adyen/model/applicationinfo/ExternalPlatform.java b/src/main/java/com/adyen/model/applicationinfo/ExternalPlatform.java new file mode 100644 index 000000000..2ca900649 --- /dev/null +++ b/src/main/java/com/adyen/model/applicationinfo/ExternalPlatform.java @@ -0,0 +1,41 @@ +/* + * ###### + * ###### + * ############ ####( ###### #####. ###### ############ ############ + * ############# #####( ###### #####. ###### ############# ############# + * ###### #####( ###### #####. ###### ##### ###### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ###### + * ############# ############# ############# ############# ##### ###### + * ############ ############ ############# ############ ##### ###### + * ###### + * ############# + * ############ + * + * Adyen Java API Library + * + * Copyright (c) 2017 Adyen B.V. + * This file is open source and available under the MIT license. + * See the LICENSE file for more info. + */ +package com.adyen.model.applicationinfo; + +import com.google.gson.annotations.SerializedName; + +public class ExternalPlatform { + @SerializedName("integrator") + private String integrator; + + public String getIntegrator() { + return integrator; + } + + public void setIntegrator(String integrator) { + this.integrator = integrator; + } + + @Override + public String toString() { + return "ExternalPlatform{" + "integrator='" + integrator + '\'' + '}'; + } +} diff --git a/src/main/java/com/adyen/model/applicationinfo/MerchantDevice.java b/src/main/java/com/adyen/model/applicationinfo/MerchantDevice.java new file mode 100644 index 000000000..bf91542b7 --- /dev/null +++ b/src/main/java/com/adyen/model/applicationinfo/MerchantDevice.java @@ -0,0 +1,63 @@ +/* + * ###### + * ###### + * ############ ####( ###### #####. ###### ############ ############ + * ############# #####( ###### #####. ###### ############# ############# + * ###### #####( ###### #####. ###### ##### ###### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ###### + * ############# ############# ############# ############# ##### ###### + * ############ ############ ############# ############ ##### ###### + * ###### + * ############# + * ############ + * + * Adyen Java API Library + * + * Copyright (c) 2017 Adyen B.V. + * This file is open source and available under the MIT license. + * See the LICENSE file for more info. + */ +package com.adyen.model.applicationinfo; + +import com.google.gson.annotations.SerializedName; + +public class MerchantDevice { + @SerializedName("os") + private String os; + + @SerializedName("osVersion") + private String osVersion; + + @SerializedName("reference") + private String reference; + + public String getOs() { + return os; + } + + public void setOs(String os) { + this.os = os; + } + + public String getOsVersion() { + return osVersion; + } + + public void setOsVersion(String osVersion) { + this.osVersion = osVersion; + } + + public String getReference() { + return reference; + } + + public void setReference(String reference) { + this.reference = reference; + } + + @Override + public String toString() { + return "MerchantDevice{" + "os='" + os + '\'' + ", osVersion='" + osVersion + '\'' + ", reference='" + reference + '\'' + '}'; + } +} diff --git a/src/main/java/com/adyen/model/applicationinfo/ShopperInteractionDevice.java b/src/main/java/com/adyen/model/applicationinfo/ShopperInteractionDevice.java new file mode 100644 index 000000000..383394cc5 --- /dev/null +++ b/src/main/java/com/adyen/model/applicationinfo/ShopperInteractionDevice.java @@ -0,0 +1,63 @@ +/* + * ###### + * ###### + * ############ ####( ###### #####. ###### ############ ############ + * ############# #####( ###### #####. ###### ############# ############# + * ###### #####( ###### #####. ###### ##### ###### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ###### + * ############# ############# ############# ############# ##### ###### + * ############ ############ ############# ############ ##### ###### + * ###### + * ############# + * ############ + * + * Adyen Java API Library + * + * Copyright (c) 2017 Adyen B.V. + * This file is open source and available under the MIT license. + * See the LICENSE file for more info. + */ +package com.adyen.model.applicationinfo; + +import com.google.gson.annotations.SerializedName; + +public class ShopperInteractionDevice { + @SerializedName("os") + private String os; + + @SerializedName("osVersion") + private String osVersion; + + @SerializedName("locale") + private String locale; + + public String getOs() { + return os; + } + + public void setOs(String os) { + this.os = os; + } + + public String getOsVersion() { + return osVersion; + } + + public void setOsVersion(String osVersion) { + this.osVersion = osVersion; + } + + public String getLocale() { + return locale; + } + + public void setLocale(String locale) { + this.locale = locale; + } + + @Override + public String toString() { + return "ShopperInteractionDevice{" + "os='" + os + '\'' + ", osVersion='" + osVersion + '\'' + ", locale='" + locale + '\'' + '}'; + } +} diff --git a/src/main/java/com/adyen/model/checkout/PaymentsRequest.java b/src/main/java/com/adyen/model/checkout/PaymentsRequest.java index 00e8afca5..e4bdadb56 100755 --- a/src/main/java/com/adyen/model/checkout/PaymentsRequest.java +++ b/src/main/java/com/adyen/model/checkout/PaymentsRequest.java @@ -18,8 +18,6 @@ * This file is open source and available under the MIT license. * See the LICENSE file for more info. */ - - package com.adyen.model.checkout; import java.io.IOException; @@ -35,6 +33,8 @@ import com.adyen.model.ForexQuote; import com.adyen.model.Installments; import com.adyen.model.Name; +import com.adyen.model.applicationinfo.ApplicationInfo; +import com.adyen.model.applicationinfo.CommonField; import com.adyen.serializer.DateSerializer; import com.adyen.serializer.DateTimeGMTSerializer; import com.google.gson.TypeAdapter; @@ -42,22 +42,20 @@ import com.google.gson.annotations.SerializedName; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; +import static com.adyen.Client.LIB_NAME; +import static com.adyen.Client.LIB_VERSION; import static com.adyen.constants.ApiConstants.PaymentMethodType.TYPE_SCHEME; /** * PaymentsRequest */ public class PaymentsRequest { - @SerializedName("additionalData") private Map additionalData = null; - @SerializedName("amount") private Amount amount = null; - @SerializedName("billingAddress") private Address billingAddress = null; - @SerializedName("captureDelayHours") private Integer captureDelayHours = null; @SerializedName("channel") @@ -130,6 +128,17 @@ public class PaymentsRequest { private BrowserInfo browserInfo = null; @SerializedName("deviceFingerprint") private String deviceFingerprint = null; + @SerializedName("applicationInfo") + private ApplicationInfo applicationInfo; + + public PaymentsRequest() { + CommonField adyenLibrary = new CommonField(); + adyenLibrary.setName(LIB_NAME); + adyenLibrary.setVersion(LIB_VERSION); + + this.applicationInfo = new ApplicationInfo(); + this.applicationInfo.setAdyenLibrary(adyenLibrary); + } public PaymentsRequest additionalData(Map additionalData) { this.additionalData = additionalData; @@ -901,6 +910,19 @@ public PaymentsRequest deviceFingerprint(String deviceFingerprint) { return this; } + public ApplicationInfo getApplicationInfo() { + return applicationInfo; + } + + public void setApplicationInfo(ApplicationInfo applicationInfo) { + this.applicationInfo = applicationInfo; + } + + public PaymentsRequest applicationInfo(ApplicationInfo applicationInfo) { + this.applicationInfo = applicationInfo; + return this; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -947,6 +969,7 @@ public boolean equals(Object o) { && Objects.equals(this.shopperStatement, paymentsRequest.shopperStatement) && Objects.equals(this.socialSecurityNumber, paymentsRequest.socialSecurityNumber) && Objects.equals(this.deviceFingerprint, paymentsRequest.deviceFingerprint) + && Objects.equals(this.applicationInfo, paymentsRequest.applicationInfo) && Objects.equals(this.telephoneNumber, paymentsRequest.telephoneNumber); } @@ -988,6 +1011,7 @@ public int hashCode() { shopperStatement, socialSecurityNumber, deviceFingerprint, + applicationInfo, telephoneNumber); } @@ -1032,6 +1056,7 @@ public String toString() { sb.append(" shopperStatement: ").append(toIndentedString(shopperStatement)).append("\n"); sb.append(" socialSecurityNumber: ").append(toIndentedString(socialSecurityNumber)).append("\n"); sb.append(" deviceFingerprint: ").append(toIndentedString(deviceFingerprint)).append("\n"); + sb.append(" applicationInfo: ").append(toIndentedString(applicationInfo)).append("\n"); sb.append(" telephoneNumber: ").append(toIndentedString(telephoneNumber)).append("\n"); sb.append("}"); return sb.toString(); diff --git a/src/test/java/com/adyen/CheckoutTest.java b/src/test/java/com/adyen/CheckoutTest.java index d8f3399a1..1a712606d 100644 --- a/src/test/java/com/adyen/CheckoutTest.java +++ b/src/test/java/com/adyen/CheckoutTest.java @@ -200,7 +200,7 @@ public void TestPaymentsResultErrorMocked() throws Exception { @Test public void TestPaymentMethodsFailureMissingIdentifierOnLive() throws Exception { Client client = createMockClientFromFile("mocks/checkout/paymentsresult-error-invalid-data-payload-422.json"); - client.setEnvironment(LIVE); + client.setEnvironment(LIVE, "dumyPrefix"); try { new Checkout(client); } catch (IllegalArgumentException e) { @@ -214,7 +214,7 @@ public void TestPaymentMethodDetails() { PaymentsRequest paymentsRequest = createPaymentsCheckoutRequest(); String jsonRequest = GSON.toJson(paymentsRequest); assertEquals( - "{\"amount\":{\"value\":1000,\"currency\":\"USD\"},\"merchantAccount\":\"MagentoMerchantTest\",\"paymentMethod\":{\"type\":\"scheme\",\"number\":\"4111111111111111\",\"expiryMonth\":\"10\",\"expiryYear\":\"2018\",\"holderName\":\"John Smith\",\"cvc\":\"737\"},\"reference\":\"Your order number\",\"returnUrl\":\"https://your-company.com/...\"}", + "{\"amount\":{\"value\":1000,\"currency\":\"USD\"},\"merchantAccount\":\"MagentoMerchantTest\",\"paymentMethod\":{\"type\":\"scheme\",\"number\":\"4111111111111111\",\"expiryMonth\":\"10\",\"expiryYear\":\"2018\",\"holderName\":\"John Smith\",\"cvc\":\"737\"},\"reference\":\"Your order number\",\"returnUrl\":\"https://your-company.com/...\",\"applicationInfo\":{\"adyenLibrary\":{\"name\":\"adyen-java-api-library\",\"version\":\"1.6.0\"}}}", jsonRequest); TestPaymentMethodDetails testPaymentMethodDetails = new TestPaymentMethodDetails(); @@ -224,7 +224,7 @@ public void TestPaymentMethodDetails() { jsonRequest = GSON.toJson(paymentsRequest); assertEquals( - "{\"amount\":{\"value\":1000,\"currency\":\"USD\"},\"merchantAccount\":\"MagentoMerchantTest\",\"paymentMethod\":{\"testKey\":\"testValue\",\"type\":\"testType\"},\"reference\":\"Your order number\",\"returnUrl\":\"https://your-company.com/...\"}", + "{\"amount\":{\"value\":1000,\"currency\":\"USD\"},\"merchantAccount\":\"MagentoMerchantTest\",\"paymentMethod\":{\"testKey\":\"testValue\",\"type\":\"testType\"},\"reference\":\"Your order number\",\"returnUrl\":\"https://your-company.com/...\",\"applicationInfo\":{\"adyenLibrary\":{\"name\":\"adyen-java-api-library\",\"version\":\"1.6.0\"}}}", jsonRequest); } @@ -239,7 +239,8 @@ public void TestDateSerializers() throws ParseException { paymentsRequest.setDateOfBirth(d); paymentsRequest.setDeliveryDate(d); String jsonRequest = GSON.toJson(paymentsRequest); - assertEquals("{\"dateOfBirth\":\"2018-10-31\",\"deliveryDate\":\"2018-10-31T00:00:00.000Z\"}", jsonRequest); + assertEquals("{\"dateOfBirth\":\"2018-10-31\",\"deliveryDate\":\"2018-10-31T00:00:00.000Z\",\"applicationInfo\":{\"adyenLibrary\":{\"name\":\"adyen-java-api-library\",\"version\":\"1.6.0\"}}}", + jsonRequest); } /** From 254b71f37101d12a253fe37645d7446d98c692cc Mon Sep 17 00:00:00 2001 From: Giorgos Adam Date: Wed, 7 Nov 2018 18:01:14 +0100 Subject: [PATCH 3/8] Added application info to modifications and /authorise calls --- .../java/com/adyen/model/PaymentResult.java | 21 ++++++++++++++++- .../applicationinfo/ExternalPlatform.java | 4 ++-- .../AbstractModificationRequest.java | 23 +++++++++++++++++-- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/adyen/model/PaymentResult.java b/src/main/java/com/adyen/model/PaymentResult.java index e9226d96f..82bbb4ce0 100644 --- a/src/main/java/com/adyen/model/PaymentResult.java +++ b/src/main/java/com/adyen/model/PaymentResult.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.Objects; import com.adyen.Util.DateUtil; +import com.adyen.model.applicationinfo.ApplicationInfo; import com.google.gson.annotations.SerializedName; import static com.adyen.constants.ApiConstants.AdditionalData.AVS_RESULT; import static com.adyen.constants.ApiConstants.AdditionalData.BOLETO_BARCODE_REFERENCE; @@ -113,6 +114,9 @@ public String toString() { @SerializedName("fraudResult") private FraudResult fraudResult = null; + @SerializedName("applicationInfo") + private ApplicationInfo applicationInfo; + public PaymentResult authCode(String authCode) { this.authCode = authCode; return this; @@ -311,6 +315,19 @@ public void setFraudResult(FraudResult fraudResult) { this.fraudResult = fraudResult; } + public ApplicationInfo getApplicationInfo() { + return applicationInfo; + } + + public void setApplicationInfo(ApplicationInfo applicationInfo) { + this.applicationInfo = applicationInfo; + } + + public PaymentResult applicationInfo(ApplicationInfo applicationInfo) { + this.applicationInfo = applicationInfo; + return this; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -330,12 +347,13 @@ public boolean equals(Object o) { && Objects.equals(this.resultCode, paymentResult.resultCode) && Objects.equals(this.additionalData, paymentResult.additionalData) && Objects.equals(this.refusalReason, paymentResult.refusalReason) + && Objects.equals(this.applicationInfo, paymentResult.applicationInfo) && Objects.equals(this.fraudResult, paymentResult.fraudResult); } @Override public int hashCode() { - return Objects.hash(authCode, paRequest, issuerUrl, md, dccAmount, dccSignature, pspReference, resultCode, additionalData, refusalReason, fraudResult); + return Objects.hash(authCode, paRequest, issuerUrl, md, dccAmount, dccSignature, pspReference, resultCode, additionalData, refusalReason, fraudResult, applicationInfo); } @@ -354,6 +372,7 @@ public String toString() { sb.append(" resultCode: ").append(toIndentedString(resultCode)).append("\n"); sb.append(" additionalData: ").append(toIndentedString(additionalData)).append("\n"); sb.append(" refusalReason: ").append(toIndentedString(refusalReason)).append("\n"); + sb.append(" applicationInfo: ").append(toIndentedString(applicationInfo)).append("\n"); sb.append(" fraudResult: ").append(toIndentedString(fraudResult)).append("\n"); sb.append("}"); return sb.toString(); diff --git a/src/main/java/com/adyen/model/applicationinfo/ExternalPlatform.java b/src/main/java/com/adyen/model/applicationinfo/ExternalPlatform.java index 2ca900649..4729b89cc 100644 --- a/src/main/java/com/adyen/model/applicationinfo/ExternalPlatform.java +++ b/src/main/java/com/adyen/model/applicationinfo/ExternalPlatform.java @@ -22,7 +22,7 @@ import com.google.gson.annotations.SerializedName; -public class ExternalPlatform { +public class ExternalPlatform extends CommonField { @SerializedName("integrator") private String integrator; @@ -36,6 +36,6 @@ public void setIntegrator(String integrator) { @Override public String toString() { - return "ExternalPlatform{" + "integrator='" + integrator + '\'' + '}'; + return "ExternalPlatform{" + "integrator='" + integrator + '\'' + "} extends " + super.toString(); } } diff --git a/src/main/java/com/adyen/model/modification/AbstractModificationRequest.java b/src/main/java/com/adyen/model/modification/AbstractModificationRequest.java index 03592c372..90adbb2d4 100644 --- a/src/main/java/com/adyen/model/modification/AbstractModificationRequest.java +++ b/src/main/java/com/adyen/model/modification/AbstractModificationRequest.java @@ -1,4 +1,4 @@ -/** +/* * ###### * ###### * ############ ####( ###### #####. ###### ############ ############ @@ -27,6 +27,7 @@ import com.adyen.model.additionalData.InvoiceLine; import com.adyen.model.additionalData.SplitPayment; import com.adyen.model.additionalData.SplitPaymentItem; +import com.adyen.model.applicationinfo.ApplicationInfo; import com.google.gson.annotations.SerializedName; /** @@ -48,6 +49,9 @@ public class AbstractModificationRequest additionalData = null; + @SerializedName("applicationInfo") + private ApplicationInfo applicationInfo; + public T reference(String reference) { this.reference = reference; return (T) this; @@ -120,6 +124,19 @@ public void setMerchantAccount(String merchantAccount) { this.merchantAccount = merchantAccount; } + public ApplicationInfo getApplicationInfo() { + return applicationInfo; + } + + public void setApplicationInfo(ApplicationInfo applicationInfo) { + this.applicationInfo = applicationInfo; + } + + public T applicationInfo(ApplicationInfo applicationInfo) { + this.applicationInfo = applicationInfo; + return (T) this; + } + public Map getAdditionalData() { return additionalData; } @@ -221,12 +238,13 @@ public boolean equals(Object o) { && Objects.equals(this.originalReference, modificationRequest.originalReference) && Objects.equals(this.merchantAccount, modificationRequest.merchantAccount) + && Objects.equals(this.applicationInfo, modificationRequest.applicationInfo) && Objects.equals(this.additionalData, modificationRequest.additionalData); } @Override public int hashCode() { - return Objects.hash(reference, authorisationCode, originalReference, merchantAccount, additionalData); + return Objects.hash(reference, authorisationCode, originalReference, merchantAccount, additionalData, applicationInfo); } @Override @@ -237,6 +255,7 @@ public String toString() { sb.append(" authorisationCode: ").append(toIndentedString(authorisationCode)).append("\n"); sb.append(" originalReference: ").append(toIndentedString(originalReference)).append("\n"); sb.append(" merchantAccount: ").append(toIndentedString(merchantAccount)).append("\n"); + sb.append(" applicationInfo: ").append(toIndentedString(additionalData)).append("\n"); sb.append(" additionalData: ").append(toIndentedString(additionalData)).append("\n"); return sb.toString(); From 57e71bee5d75f8124825a8f839e1b7e27f26c2e8 Mon Sep 17 00:00:00 2001 From: Giorgos Adam Date: Fri, 9 Nov 2018 14:33:00 +0100 Subject: [PATCH 4/8] Routing PaymentService to v40 Pre-populating modifications application info --- src/main/java/com/adyen/Client.java | 2 +- .../java/com/adyen/model/PaymentRequest.java | 34 ++++++++++++- .../java/com/adyen/model/PaymentResult.java | 21 +------- .../AbstractModificationRequest.java | 12 +++++ src/test/java/com/adyen/BaseTest.java | 45 +++++++++++------ src/test/java/com/adyen/CheckoutTest.java | 49 ++++++++++++++----- .../com/adyen/PaymentRequestBuilderTest.java | 5 +- 7 files changed, 116 insertions(+), 52 deletions(-) diff --git a/src/main/java/com/adyen/Client.java b/src/main/java/com/adyen/Client.java index 566c86b32..a3302b6bb 100644 --- a/src/main/java/com/adyen/Client.java +++ b/src/main/java/com/adyen/Client.java @@ -35,7 +35,7 @@ public class Client { 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"; public static final String MARKETPAY_ENDPOINT_LIVE = "https://cal-live.adyen.com/cal/services"; - public static final String API_VERSION = "v30"; + public static final String API_VERSION = "v40"; public static final String RECURRING_API_VERSION = "v25"; public static final String MARKETPAY_ACCOUNT_API_VERSION = "v4"; public static final String MARKETPAY_FUND_API_VERSION = "v3"; diff --git a/src/main/java/com/adyen/model/PaymentRequest.java b/src/main/java/com/adyen/model/PaymentRequest.java index 792c2878e..6117913e2 100644 --- a/src/main/java/com/adyen/model/PaymentRequest.java +++ b/src/main/java/com/adyen/model/PaymentRequest.java @@ -27,7 +27,11 @@ import com.adyen.model.additionalData.InvoiceLine; import com.adyen.model.additionalData.SplitPayment; import com.adyen.model.additionalData.SplitPaymentItem; +import com.adyen.model.applicationinfo.ApplicationInfo; +import com.adyen.model.applicationinfo.CommonField; import com.google.gson.annotations.SerializedName; +import static com.adyen.Client.LIB_NAME; +import static com.adyen.Client.LIB_VERSION; /** * PaymentRequest @@ -47,6 +51,18 @@ public class PaymentRequest extends AbstractPaymentRequest { @SerializedName("store") private String store = null; + @SerializedName("applicationInfo") + private ApplicationInfo applicationInfo; + + public PaymentRequest() { + CommonField adyenLibrary = new CommonField(); + adyenLibrary.setName(LIB_NAME); + adyenLibrary.setVersion(LIB_VERSION); + + this.applicationInfo = new ApplicationInfo(); + this.applicationInfo.setAdyenLibrary(adyenLibrary); + } + /** * how the shopper interacts with the system */ @@ -287,6 +303,19 @@ public void setStore(String store) { this.store = store; } + public ApplicationInfo getApplicationInfo() { + return applicationInfo; + } + + public void setApplicationInfo(ApplicationInfo applicationInfo) { + this.applicationInfo = applicationInfo; + } + + public PaymentRequest applicationInfo(ApplicationInfo applicationInfo) { + this.applicationInfo = applicationInfo; + return this; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -299,7 +328,9 @@ public boolean equals(Object o) { return super.equals(paymentRequest) && Objects.equals(this.card, paymentRequest.card) && Objects.equals(this.mpiData, paymentRequest.mpiData) - && Objects.equals(this.bankAccount, paymentRequest.bankAccount) + && Objects.equals(this.bankAccount, + paymentRequest.bankAccount) + && Objects.equals(this.applicationInfo, paymentRequest.applicationInfo) && Objects.equals(this.store, paymentRequest.store); } @@ -317,6 +348,7 @@ public String toString() { sb.append(" mpiData: ").append(toIndentedString(mpiData)).append("\n"); sb.append(" bankAccount: ").append(toIndentedString(bankAccount)).append("\n"); sb.append(" recurringProcessingModel: ").append(toIndentedString(recurringProcessingModel)).append("\n"); + sb.append(" applicationInfo: ").append(toIndentedString(applicationInfo)).append("\n"); sb.append("}"); return sb.toString(); } diff --git a/src/main/java/com/adyen/model/PaymentResult.java b/src/main/java/com/adyen/model/PaymentResult.java index 82bbb4ce0..e9226d96f 100644 --- a/src/main/java/com/adyen/model/PaymentResult.java +++ b/src/main/java/com/adyen/model/PaymentResult.java @@ -24,7 +24,6 @@ import java.util.Map; import java.util.Objects; import com.adyen.Util.DateUtil; -import com.adyen.model.applicationinfo.ApplicationInfo; import com.google.gson.annotations.SerializedName; import static com.adyen.constants.ApiConstants.AdditionalData.AVS_RESULT; import static com.adyen.constants.ApiConstants.AdditionalData.BOLETO_BARCODE_REFERENCE; @@ -114,9 +113,6 @@ public String toString() { @SerializedName("fraudResult") private FraudResult fraudResult = null; - @SerializedName("applicationInfo") - private ApplicationInfo applicationInfo; - public PaymentResult authCode(String authCode) { this.authCode = authCode; return this; @@ -315,19 +311,6 @@ public void setFraudResult(FraudResult fraudResult) { this.fraudResult = fraudResult; } - public ApplicationInfo getApplicationInfo() { - return applicationInfo; - } - - public void setApplicationInfo(ApplicationInfo applicationInfo) { - this.applicationInfo = applicationInfo; - } - - public PaymentResult applicationInfo(ApplicationInfo applicationInfo) { - this.applicationInfo = applicationInfo; - return this; - } - @Override public boolean equals(Object o) { if (this == o) { @@ -347,13 +330,12 @@ public boolean equals(Object o) { && Objects.equals(this.resultCode, paymentResult.resultCode) && Objects.equals(this.additionalData, paymentResult.additionalData) && Objects.equals(this.refusalReason, paymentResult.refusalReason) - && Objects.equals(this.applicationInfo, paymentResult.applicationInfo) && Objects.equals(this.fraudResult, paymentResult.fraudResult); } @Override public int hashCode() { - return Objects.hash(authCode, paRequest, issuerUrl, md, dccAmount, dccSignature, pspReference, resultCode, additionalData, refusalReason, fraudResult, applicationInfo); + return Objects.hash(authCode, paRequest, issuerUrl, md, dccAmount, dccSignature, pspReference, resultCode, additionalData, refusalReason, fraudResult); } @@ -372,7 +354,6 @@ public String toString() { sb.append(" resultCode: ").append(toIndentedString(resultCode)).append("\n"); sb.append(" additionalData: ").append(toIndentedString(additionalData)).append("\n"); sb.append(" refusalReason: ").append(toIndentedString(refusalReason)).append("\n"); - sb.append(" applicationInfo: ").append(toIndentedString(applicationInfo)).append("\n"); sb.append(" fraudResult: ").append(toIndentedString(fraudResult)).append("\n"); sb.append("}"); return sb.toString(); diff --git a/src/main/java/com/adyen/model/modification/AbstractModificationRequest.java b/src/main/java/com/adyen/model/modification/AbstractModificationRequest.java index 90adbb2d4..d25ec8908 100644 --- a/src/main/java/com/adyen/model/modification/AbstractModificationRequest.java +++ b/src/main/java/com/adyen/model/modification/AbstractModificationRequest.java @@ -28,7 +28,10 @@ import com.adyen.model.additionalData.SplitPayment; import com.adyen.model.additionalData.SplitPaymentItem; import com.adyen.model.applicationinfo.ApplicationInfo; +import com.adyen.model.applicationinfo.CommonField; import com.google.gson.annotations.SerializedName; +import static com.adyen.Client.LIB_NAME; +import static com.adyen.Client.LIB_VERSION; /** * Abstract class for modification requests @@ -52,6 +55,15 @@ public class AbstractModificationRequest T createBasePaymentRequest(T abstractPaymentRequest) { abstractPaymentRequest.merchantAccount("AMerchant") - .setBrowserInfoData("User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36", "*/*") - .setShopperIP("1.2.3.4"); + .setBrowserInfoData("User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36", "*/*") + .setShopperIP("1.2.3.4"); return abstractPaymentRequest; } @@ -114,8 +129,8 @@ protected T createBasePaymentRequest(T abstra */ protected PaymentRequest createFullCardPaymentRequest() { PaymentRequest paymentRequest = createBasePaymentRequest(new PaymentRequest()).reference("123456") - .setAmountData("1000", "EUR") - .setCardData("5136333333333335", "John Doe", "08", "2018", "737"); + .setAmountData("1000", "EUR") + .setCardData("5136333333333335", "John Doe", "08", "2018", "737"); return paymentRequest; } diff --git a/src/test/java/com/adyen/CheckoutTest.java b/src/test/java/com/adyen/CheckoutTest.java index 1a712606d..6a2f94d72 100644 --- a/src/test/java/com/adyen/CheckoutTest.java +++ b/src/test/java/com/adyen/CheckoutTest.java @@ -39,7 +39,6 @@ import com.adyen.model.checkout.PaymentsResponse; import com.adyen.service.Checkout; import com.google.gson.annotations.SerializedName; -import static com.adyen.Service.GSON; import static com.adyen.enums.Environment.LIVE; import static junit.framework.TestCase.assertNull; import static org.junit.Assert.assertEquals; @@ -212,25 +211,52 @@ public void TestPaymentMethodsFailureMissingIdentifierOnLive() throws Exception @Test public void TestPaymentMethodDetails() { PaymentsRequest paymentsRequest = createPaymentsCheckoutRequest(); - String jsonRequest = GSON.toJson(paymentsRequest); - assertEquals( - "{\"amount\":{\"value\":1000,\"currency\":\"USD\"},\"merchantAccount\":\"MagentoMerchantTest\",\"paymentMethod\":{\"type\":\"scheme\",\"number\":\"4111111111111111\",\"expiryMonth\":\"10\",\"expiryYear\":\"2018\",\"holderName\":\"John Smith\",\"cvc\":\"737\"},\"reference\":\"Your order number\",\"returnUrl\":\"https://your-company.com/...\",\"applicationInfo\":{\"adyenLibrary\":{\"name\":\"adyen-java-api-library\",\"version\":\"1.6.0\"}}}", - jsonRequest); + paymentsRequest.setApplicationInfo(null); + String jsonRequest = PRETTY_PRINT_GSON.toJson(paymentsRequest); + + assertEquals("{\n" + + " \"amount\": {\n" + + " \"value\": 1000,\n" + + " \"currency\": \"USD\"\n" + + " },\n" + + " \"merchantAccount\": \"MagentoMerchantTest\",\n" + + " \"paymentMethod\": {\n" + + " \"type\": \"scheme\",\n" + + " \"number\": \"4111111111111111\",\n" + + " \"expiryMonth\": \"10\",\n" + + " \"expiryYear\": \"2018\",\n" + + " \"holderName\": \"John Smith\",\n" + + " \"cvc\": \"737\"\n" + + " },\n" + + " \"reference\": \"Your order number\",\n" + + " \"returnUrl\": \"https://your-company.com/...\"\n" + + "}", jsonRequest); TestPaymentMethodDetails testPaymentMethodDetails = new TestPaymentMethodDetails(); testPaymentMethodDetails.setType("testType"); testPaymentMethodDetails.setTestValue("testValue"); paymentsRequest.setPaymentMethod(testPaymentMethodDetails); - jsonRequest = GSON.toJson(paymentsRequest); - assertEquals( - "{\"amount\":{\"value\":1000,\"currency\":\"USD\"},\"merchantAccount\":\"MagentoMerchantTest\",\"paymentMethod\":{\"testKey\":\"testValue\",\"type\":\"testType\"},\"reference\":\"Your order number\",\"returnUrl\":\"https://your-company.com/...\",\"applicationInfo\":{\"adyenLibrary\":{\"name\":\"adyen-java-api-library\",\"version\":\"1.6.0\"}}}", - jsonRequest); + jsonRequest = PRETTY_PRINT_GSON.toJson(paymentsRequest); + assertEquals("{\n" + + " \"amount\": {\n" + + " \"value\": 1000,\n" + + " \"currency\": \"USD\"\n" + + " },\n" + + " \"merchantAccount\": \"MagentoMerchantTest\",\n" + + " \"paymentMethod\": {\n" + + " \"testKey\": \"testValue\",\n" + + " \"type\": \"testType\"\n" + + " },\n" + + " \"reference\": \"Your order number\",\n" + + " \"returnUrl\": \"https://your-company.com/...\"\n" + + "}", jsonRequest); } @Test public void TestDateSerializers() throws ParseException { PaymentsRequest paymentsRequest = new PaymentsRequest(); + paymentsRequest.setApplicationInfo(null); SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); fmt.setTimeZone(TimeZone.getTimeZone("GMT")); @@ -238,9 +264,8 @@ public void TestDateSerializers() throws ParseException { Date d = fmt.parse("2018-10-31"); paymentsRequest.setDateOfBirth(d); paymentsRequest.setDeliveryDate(d); - String jsonRequest = GSON.toJson(paymentsRequest); - assertEquals("{\"dateOfBirth\":\"2018-10-31\",\"deliveryDate\":\"2018-10-31T00:00:00.000Z\",\"applicationInfo\":{\"adyenLibrary\":{\"name\":\"adyen-java-api-library\",\"version\":\"1.6.0\"}}}", - jsonRequest); + String jsonRequest = PRETTY_PRINT_GSON.toJson(paymentsRequest); + assertEquals("{\n" + " \"dateOfBirth\": \"2018-10-31\",\n" + " \"deliveryDate\": \"2018-10-31T00:00:00.000Z\"\n" + "}", jsonRequest); } /** diff --git a/src/test/java/com/adyen/PaymentRequestBuilderTest.java b/src/test/java/com/adyen/PaymentRequestBuilderTest.java index 069cb7f45..63b4130d4 100644 --- a/src/test/java/com/adyen/PaymentRequestBuilderTest.java +++ b/src/test/java/com/adyen/PaymentRequestBuilderTest.java @@ -25,17 +25,15 @@ import com.adyen.constants.ApiConstants; import com.adyen.model.PaymentRequest; import com.adyen.model.PaymentRequest3d; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import static org.junit.Assert.assertEquals; public class PaymentRequestBuilderTest extends BaseTest { - private static final Gson PRETTY_PRINT_GSON = new GsonBuilder().setPrettyPrinting().create(); @Test public void TestCCPaymentRequest() { PaymentRequest paymentRequest = createFullCardPaymentRequest(); + paymentRequest.setApplicationInfo(null); // Test metadata paymentRequest.setMetadata(new HashMap()); @@ -77,6 +75,7 @@ public void TestCCPaymentRequest() { @Test public void TestCSEPaymentRequest() { PaymentRequest paymentRequest = createCSEPaymentRequest(); + paymentRequest.setApplicationInfo(null); String paymentRequestJson = PRETTY_PRINT_GSON.toJson(paymentRequest); From 604f40ff195c4611f25148114b7fad553f2c8bf8 Mon Sep 17 00:00:00 2001 From: "marina.nekrassova" Date: Mon, 12 Nov 2018 09:16:51 +0200 Subject: [PATCH 5/8] Revert the removed Client constructors to maintain backwards compatibility; mark them as deprecated --- src/main/java/com/adyen/Client.java | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/main/java/com/adyen/Client.java b/src/main/java/com/adyen/Client.java index 18bc2ed37..a65649e72 100644 --- a/src/main/java/com/adyen/Client.java +++ b/src/main/java/com/adyen/Client.java @@ -69,6 +69,26 @@ public Client(String username, String password, Environment environment, String this.config.setApplicationName(applicationName); } + /** + * @deprecated As of library version 1.6.1, timeouts should be set by {@link #setTimeouts(int connectionTimeoutMillis, int readTimeoutMillis)} or directly by {@link com.adyen.Config#setConnectionTimeoutMillis(int connectionTimeoutMillis)}. + */ + @Deprecated + public Client(String username, String password, Environment environment, int connectionTimeoutMillis) { + + this(username, password, environment, null); + this.config.setConnectionTimeoutMillis(connectionTimeoutMillis); + } + + /** + * @deprecated As of library version 1.6.1, timeouts should be set by {@link #setTimeouts(int connectionTimeoutMillis, int readTimeoutMillis)} or directly by {@link com.adyen.Config#setConnectionTimeoutMillis(int connectionTimeoutMillis)}. + */ + @Deprecated + public Client(String username, String password, Environment environment, int connectionTimeoutMillis, String liveEndpointUrlPrefix) { + + this(username, password, environment, liveEndpointUrlPrefix, null); + this.config.setConnectionTimeoutMillis(connectionTimeoutMillis); + } + public Client(String apiKey, Environment environment) { this(apiKey, environment, null); } @@ -79,6 +99,26 @@ public Client(String apiKey, Environment environment, String liveEndpointUrlPref this.setEnvironment(environment, liveEndpointUrlPrefix); } + /** + * @deprecated As of library version 1.6.1, timeouts should be set by {@link #setTimeouts(int connectionTimeoutMillis, int readTimeoutMillis)} or directly by {@link com.adyen.Config#setConnectionTimeoutMillis(int connectionTimeoutMillis)}. + */ + @Deprecated + public Client(String apiKey, Environment environment, int connectionTimeoutMillis) { + + this(apiKey, environment); + this.config.setConnectionTimeoutMillis(connectionTimeoutMillis); + } + + /** + * @deprecated As of library version 1.6.1, timeouts should be set by {@link #setTimeouts(int connectionTimeoutMillis, int readTimeoutMillis)} or directly by {@link com.adyen.Config#setConnectionTimeoutMillis(int connectionTimeoutMillis)}. + */ + @Deprecated + public Client(String apiKey, Environment environment, int connectionTimeoutMillis, String liveEndpointUrlPrefix) { + + this(apiKey, environment, liveEndpointUrlPrefix); + this.config.setConnectionTimeoutMillis(connectionTimeoutMillis); + } + /** * @deprecated As of library version 1.5.4, replaced by {@link #setEnvironment(Environment environment, String liveEndpointUrlPrefix)}. */ From 9c7fd763119e8b44f2903e2d9e2165d422c0b470 Mon Sep 17 00:00:00 2001 From: rajni Date: Wed, 14 Nov 2018 13:54:27 +0100 Subject: [PATCH 6/8] [PW-739]: removed paymentDetailsSource field from applicationInfo --- .../model/applicationinfo/ApplicationInfo.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/main/java/com/adyen/model/applicationinfo/ApplicationInfo.java b/src/main/java/com/adyen/model/applicationinfo/ApplicationInfo.java index 7b82d333e..f49fc6b49 100644 --- a/src/main/java/com/adyen/model/applicationinfo/ApplicationInfo.java +++ b/src/main/java/com/adyen/model/applicationinfo/ApplicationInfo.java @@ -38,9 +38,6 @@ public class ApplicationInfo { @SerializedName("externalPlatform") private ExternalPlatform externalPlatform; - @SerializedName("paymentDetailsSource") - private CommonField paymentDetailsSource; - @SerializedName("shopperInteractionDevice") private ShopperInteractionDevice shopperInteractionDevice; @@ -84,14 +81,6 @@ public void setExternalPlatform(ExternalPlatform externalPlatform) { this.externalPlatform = externalPlatform; } - public CommonField getPaymentDetailsSource() { - return paymentDetailsSource; - } - - public void setPaymentDetailsSource(CommonField paymentDetailsSource) { - this.paymentDetailsSource = paymentDetailsSource; - } - public ShopperInteractionDevice getShopperInteractionDevice() { return shopperInteractionDevice; } @@ -113,8 +102,6 @@ public String toString() { + merchantDevice + ", externalPlatform=" + externalPlatform - + ", paymentDetailsSource=" - + paymentDetailsSource + ", shopperInteractionDevice=" + shopperInteractionDevice + '}'; From 578dcc33d5f1b8a3022bcbe0f71c3ce582dd5737 Mon Sep 17 00:00:00 2001 From: Rik ter Beek Date: Tue, 20 Nov 2018 11:28:07 +0100 Subject: [PATCH 7/8] bump version to 1.7.0 --- README.md | 2 +- docs/install-library.html | 2 +- pom.xml | 2 +- src/main/java/com/adyen/Client.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0cec069f0..ea7a7de04 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Add this dependency to your project's POM: com.adyen adyen-java-api-library - 1.6.0 + 1.7.0 ``` diff --git a/docs/install-library.html b/docs/install-library.html index 8907e6574..bfb60570b 100755 --- a/docs/install-library.html +++ b/docs/install-library.html @@ -49,7 +49,7 @@

Maven

class="hljs-tag"></groupId> <artifactId>adyen-java-api-library</artifactId> - <version>1.6.0</<version>1.7.0</version> </dependency> diff --git a/pom.xml b/pom.xml index 68b96e2e8..14542fd54 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.adyen adyen-java-api-library jar - 1.6.0 + 1.7.0 Adyen Java API Library Adyen API Client Library for Java https://github.com/adyen/adyen-java-api-library diff --git a/src/main/java/com/adyen/Client.java b/src/main/java/com/adyen/Client.java index c8efa3216..a3fe72588 100644 --- a/src/main/java/com/adyen/Client.java +++ b/src/main/java/com/adyen/Client.java @@ -41,7 +41,7 @@ public class Client { public static final String MARKETPAY_FUND_API_VERSION = "v3"; public static final String MARKETPAY_NOTIFICATION_API_VERSION = "v1"; public static final String LIB_NAME = "adyen-java-api-library"; - public static final String LIB_VERSION = "1.6.0"; + public static final String LIB_VERSION = "1.7.0"; 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 = "v40"; From c40483566cbcd75bdef88724856205011fb65e10 Mon Sep 17 00:00:00 2001 From: Giorgos Adam Date: Tue, 20 Nov 2018 17:21:21 +0100 Subject: [PATCH 8/8] Added allowed/blocked payment methods lists on /paymentMethods request call --- .../model/checkout/PaymentMethodsRequest.java | 51 ++++++++++++++----- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/adyen/model/checkout/PaymentMethodsRequest.java b/src/main/java/com/adyen/model/checkout/PaymentMethodsRequest.java index b1ffa80f6..2f1d3fc21 100755 --- a/src/main/java/com/adyen/model/checkout/PaymentMethodsRequest.java +++ b/src/main/java/com/adyen/model/checkout/PaymentMethodsRequest.java @@ -21,6 +21,9 @@ package com.adyen.model.checkout; +import java.io.IOException; +import java.util.List; +import java.util.Objects; import com.adyen.model.Amount; import com.google.gson.TypeAdapter; import com.google.gson.annotations.JsonAdapter; @@ -28,9 +31,6 @@ import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; -import java.io.IOException; -import java.util.Objects; - /** * PaymentMethodsRequest */ @@ -48,6 +48,10 @@ public class PaymentMethodsRequest { private String shopperLocale = null; @SerializedName("shopperReference") private String shopperReference = null; + @SerializedName("allowedPaymentMethods") + private List allowedPaymentMethods; + @SerializedName("blockedPaymentMethods") + private List blockedPaymentMethods; public PaymentMethodsRequest amount(Amount amount) { this.amount = amount; @@ -73,7 +77,8 @@ public PaymentMethodsRequest channel(ChannelEnum channel) { } /** - * The platform where a payment transaction takes place. This field can be used for filtering out payment methods that are only available on specific platforms. Possible values: * iOS * Android * Web + * The platform where a payment transaction takes place. This field can be used for filtering out payment methods that are only available on specific platforms. Possible values: * iOS * Android * + * Web * * @return channel **/ @@ -157,6 +162,22 @@ public void setShopperReference(String shopperReference) { this.shopperReference = shopperReference; } + public List getAllowedPaymentMethods() { + return allowedPaymentMethods; + } + + public void setAllowedPaymentMethods(List allowedPaymentMethods) { + this.allowedPaymentMethods = allowedPaymentMethods; + } + + public List getBlockedPaymentMethods() { + return blockedPaymentMethods; + } + + public void setBlockedPaymentMethods(List blockedPaymentMethods) { + this.blockedPaymentMethods = blockedPaymentMethods; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -166,17 +187,20 @@ public boolean equals(Object o) { return false; } PaymentMethodsRequest paymentMethodsRequest = (PaymentMethodsRequest) o; - return Objects.equals(this.amount, paymentMethodsRequest.amount) && - Objects.equals(this.channel, paymentMethodsRequest.channel) && - Objects.equals(this.countryCode, paymentMethodsRequest.countryCode) && - Objects.equals(this.merchantAccount, paymentMethodsRequest.merchantAccount) && - Objects.equals(this.shopperLocale, paymentMethodsRequest.shopperLocale) && - Objects.equals(this.shopperReference, paymentMethodsRequest.shopperReference); + return Objects.equals(this.amount, paymentMethodsRequest.amount) + && Objects.equals(this.channel, paymentMethodsRequest.channel) + && Objects.equals(this.countryCode, + paymentMethodsRequest.countryCode) + && Objects.equals(this.merchantAccount, paymentMethodsRequest.merchantAccount) + && Objects.equals(this.shopperLocale, paymentMethodsRequest.shopperLocale) + && Objects.equals(this.allowedPaymentMethods, paymentMethodsRequest.allowedPaymentMethods) + && Objects.equals(this.blockedPaymentMethods, paymentMethodsRequest.blockedPaymentMethods) + && Objects.equals(this.shopperReference, paymentMethodsRequest.shopperReference); } @Override public int hashCode() { - return Objects.hash(amount, channel, countryCode, merchantAccount, shopperLocale, shopperReference); + return Objects.hash(amount, channel, countryCode, merchantAccount, shopperLocale, shopperReference, allowedPaymentMethods, blockedPaymentMethods); } @Override @@ -190,6 +214,8 @@ public String toString() { sb.append(" merchantAccount: ").append(toIndentedString(merchantAccount)).append("\n"); sb.append(" shopperLocale: ").append(toIndentedString(shopperLocale)).append("\n"); sb.append(" shopperReference: ").append(toIndentedString(shopperReference)).append("\n"); + sb.append(" allowedPaymentMethods: ").append(toIndentedString(allowedPaymentMethods)).append("\n"); + sb.append(" blockedPaymentMethods: ").append(toIndentedString(blockedPaymentMethods)).append("\n"); sb.append("}"); return sb.toString(); } @@ -206,7 +232,8 @@ private String toIndentedString(Object o) { } /** - * The platform where a payment transaction takes place. This field can be used for filtering out payment methods that are only available on specific platforms. Possible values: * iOS * Android * Web + * The platform where a payment transaction takes place. This field can be used for filtering out payment methods that are only available on specific platforms. Possible values: * iOS * Android * + * Web */ @JsonAdapter(ChannelEnum.Adapter.class) public enum ChannelEnum {