From 918cba605a81844af8925d94454f2360880537e9 Mon Sep 17 00:00:00 2001 From: Alex Fainshtein Date: Wed, 28 Aug 2019 20:16:37 +0300 Subject: [PATCH 1/8] add browserInfo and threeDsVersion to transaction request add requiredAction to transaction response add transaction complete --- .../java/cc/protea/spreedly/Spreedly.java | 12 ++++++ .../model/SpreedlyTransactionRequest.java | 42 ++++++++++++++++--- .../model/SpreedlyTransactionResponse.java | 18 +++++++- 3 files changed, 65 insertions(+), 7 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index e91dfd4..dfe987e 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -1,5 +1,8 @@ package cc.protea.spreedly; +import cc.protea.spreedly.model.*; +import cc.protea.spreedly.model.internal.*; + import java.util.ArrayList; import java.util.List; @@ -386,5 +389,14 @@ public List listPaymentMethodTransactions(final Str public SpreedlyPaymentMethod update(final SpreedlyPaymentMethod paymentMethod) { return util.put("https://core.spreedly.com/v1/payment_methods/" + paymentMethod.token + ".xml", paymentMethod, SpreedlyPaymentMethod.class); } + + /** + * Completes a 3DS 2 transaction in the device fingerprint stage. + * For more details see https://docs.spreedly.com/guides/3dsecure2/ + * @param token transaction_token to complete + */ + public SpreedlyTransactionResponse complete(String token) { + return util.put("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", null, SpreedlyTransactionResponse.class); + } } diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java index eef5141..8e8dfd9 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java @@ -90,6 +90,16 @@ public class SpreedlyTransactionRequest { * within this time, it will retry the callback again at least 4 times at ever-increasing intervals. */ @XmlElement(name = "callback_url") public String callbackUrl; + + /** + * Browser info collected for 3ds. Please see https://docs.spreedly.com/guides/3dsecure2/ for more info + */ + @XmlElement(name = "browser_info") public String browserInfo; + + /** + * Set to 2 to use 3DS2. Please see https://docs.spreedly.com/guides/3dsecure2/ for more info + */ + @XmlElement(name = "three_ds_version") public String threeDsVersion; /** * @return A unique string generated by Spreedly to identify a gateway. @@ -284,8 +294,9 @@ public boolean isAttempt3dSecure() { /** * @param attempt3dSecure true if the system should use a multi-stage 3D Secure workflow. See https://docs.spreedly.com/guides/3dsecure/ for instructions. */ - public void setAttempt3dSecure(final boolean attempt3dSecure) { + public SpreedlyTransactionRequest setAttempt3dSecure(final boolean attempt3dSecure) { this.attempt3dSecure = attempt3dSecure; + return this; } /** * @return See https://docs.spreedly.com/guides/3dsecure/ for instructions. @@ -296,8 +307,9 @@ public String getRedirectUrl() { /** * @param redirectUrl See https://docs.spreedly.com/guides/3dsecure/ for instructions. */ - public void setRedirectUrl(final String redirectUrl) { + public SpreedlyTransactionRequest setRedirectUrl(final String redirectUrl) { this.redirectUrl = redirectUrl; + return this; } /** * The callback url will receive a POST back of all transactions that have changed since the last callback. @@ -314,10 +326,28 @@ public String getCallbackUrl() { * it will retry the callback again at least 4 times at ever-increasing intervals. * @param callbackUrl */ - public void setCallbackUrl(final String callbackUrl) { + public SpreedlyTransactionRequest setCallbackUrl(final String callbackUrl) { this.callbackUrl = callbackUrl; + return this; + } + + public String getBrowserInfo() + { + return browserInfo; + } + + public void setBrowserInfo(String browserInfo) + { + this.browserInfo = browserInfo; + } + + public String getThreeDsVersion() + { + return threeDsVersion; + } + + public void setThreeDsVersion(String threeDsVersion) + { + this.threeDsVersion = threeDsVersion; } - - - } \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java index d746e86..20ffffa 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java @@ -117,6 +117,12 @@ public class SpreedlyTransactionResponse implements SpreedlyErrorSetting { @XmlElement(name = "setup_response") public SpreedlyTransactionResponseDetails setupResponse; @XmlElement(name = "redirect_response") public SpreedlyTransactionResponseDetails redirectResponse; @XmlElement(name = "callback_response") public SpreedlyTransactionResponseDetails callbackResponse; + + /** + * The required action in the 3DS 2 flow, e.g., none, device_fingerprint, challenge, etc + */ + @XmlElement(name = "required_action") public String requiredAction; + /** * @return Any positive whole number, for example 1234 = $12.34. @@ -534,5 +540,15 @@ public SpreedlyTransactionResponse setShippingAddress(SpreedlyShippingAddress sh this.shippingAddress = shippingAddress; return this; } - + + public String getRequiredAction() + { + return requiredAction; + } + + public SpreedlyTransactionResponse setRequiredAction(String requiredAction) + { + this.requiredAction = requiredAction; + return this; + } } From ac4ec5a76d732a7e8398ef551eb9a8773b42751e Mon Sep 17 00:00:00 2001 From: Alex Fainshtein Date: Fri, 30 Aug 2019 15:02:00 +0300 Subject: [PATCH 2/8] add deviceFingerprintForm to transaction response --- .../model/SpreedlyTransactionResponse.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java index 20ffffa..a0717b5 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java @@ -120,10 +120,17 @@ public class SpreedlyTransactionResponse implements SpreedlyErrorSetting { /** * The required action in the 3DS 2 flow, e.g., none, device_fingerprint, challenge, etc + * See https://docs.spreedly.com/guides/3dsecure2/ for more information. */ @XmlElement(name = "required_action") public String requiredAction; - + + /** + * The device fingerprint form to render in case that the required_action is device_fingerprint. + * See https://docs.spreedly.com/guides/3dsecure2/ for more information. + */ + @XmlElement(name = "device_fingerprint_form") public String deviceFingerprintForm; + /** * @return Any positive whole number, for example 1234 = $12.34. */ @@ -551,4 +558,15 @@ public SpreedlyTransactionResponse setRequiredAction(String requiredAction) this.requiredAction = requiredAction; return this; } + + public String getDeviceFingerprintForm() + { + return deviceFingerprintForm; + } + + public SpreedlyTransactionResponse setDeviceFingerprintForm(String deviceFingerprintForm) + { + this.deviceFingerprintForm = deviceFingerprintForm; + return this; + } } From 7da09ca6c62d328282c62178997eef9c9bbbbbb1 Mon Sep 17 00:00:00 2001 From: Alex Fainshtein Date: Tue, 3 Sep 2019 13:40:00 +0300 Subject: [PATCH 3/8] complete should make a post request instead of put --- src/main/java/cc/protea/spreedly/Spreedly.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index dfe987e..b3cee0e 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -396,7 +396,7 @@ public SpreedlyPaymentMethod update(final SpreedlyPaymentMethod paymentMethod) { * @param token transaction_token to complete */ public SpreedlyTransactionResponse complete(String token) { - return util.put("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", null, SpreedlyTransactionResponse.class); + return util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", null, SpreedlyTransactionResponse.class); } } From e8dedd51f0fdbc57eea049af3091ed018cd52e72 Mon Sep 17 00:00:00 2001 From: Alex Fainshtein Date: Tue, 3 Sep 2019 16:36:57 +0300 Subject: [PATCH 4/8] add challenge url and form to transaction response --- .../model/SpreedlyTransactionResponse.java | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java index a0717b5..8732eff 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java @@ -1,17 +1,16 @@ package cc.protea.spreedly.model; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; +import cc.protea.spreedly.model.internal.SpreedlyErrorSetting; +import cc.protea.spreedly.model.internal.SpreedlyNestedMapAdapter; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -import cc.protea.spreedly.model.internal.SpreedlyErrorSetting; -import cc.protea.spreedly.model.internal.SpreedlyNestedMapAdapter; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; @XmlRootElement(name = "transaction") @XmlAccessorType(XmlAccessType.FIELD) @@ -131,6 +130,10 @@ public class SpreedlyTransactionResponse implements SpreedlyErrorSetting { */ @XmlElement(name = "device_fingerprint_form") public String deviceFingerprintForm; + @XmlElement(name = "challenge_url") public String challengeUrl; + + @XmlElement(name = "challenge_form") public String challengeForm; + /** * @return Any positive whole number, for example 1234 = $12.34. */ @@ -569,4 +572,26 @@ public SpreedlyTransactionResponse setDeviceFingerprintForm(String deviceFingerp this.deviceFingerprintForm = deviceFingerprintForm; return this; } + + public String getChallengeUrl() + { + return challengeUrl; + } + + public SpreedlyTransactionResponse setChallengeUrl(String challengeUrl) + { + this.challengeUrl = challengeUrl; + return this; + } + + public String getChallengeForm() + { + return challengeForm; + } + + public SpreedlyTransactionResponse setChallengeForm(String challengeForm) + { + this.challengeForm = challengeForm; + return this; + } } From 470abfb48802045d4765a7e03d641a77da269621 Mon Sep 17 00:00:00 2001 From: Vladimir Sheiko Date: Tue, 16 Nov 2021 09:03:56 +0200 Subject: [PATCH 5/8] added mode and sandbox fileds in SpreedlyGatewayAccount --- .../spreedly/model/SpreedlyGatewayAccount.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyGatewayAccount.java b/src/main/java/cc/protea/spreedly/model/SpreedlyGatewayAccount.java index d532e87..6da7e6e 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyGatewayAccount.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyGatewayAccount.java @@ -32,6 +32,9 @@ public class SpreedlyGatewayAccount { @XmlElement(name = "created_at") public Date createdOn; @XmlElement(name = "updated_at") public Date updatedOn; @XmlElement(name = "description") public String description; + public String mode; + public boolean sandbox; + public String getToken() { return token; } @@ -105,4 +108,19 @@ public void setDescription(final String description) { this.description = description; } + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + public boolean isSandbox() { + return sandbox; + } + + public void setSandbox(boolean sandbox) { + this.sandbox = sandbox; + } } \ No newline at end of file From 75af0672be1f1307bc47bf38e658486e6be43657 Mon Sep 17 00:00:00 2001 From: Vladimir Sheiko Date: Tue, 16 Nov 2021 14:56:16 +0200 Subject: [PATCH 6/8] changed javadoc version in pom file --- pom.xml | 9 ++- .../SpreedlyTransactionResponse.xml | 56 ------------------- 2 files changed, 8 insertions(+), 57 deletions(-) delete mode 100644 target/test-classes/SpreedlyTransactionResponse.xml diff --git a/pom.xml b/pom.xml index 6a6c4c6..3784552 100644 --- a/pom.xml +++ b/pom.xml @@ -93,13 +93,20 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.9.1 + 3.1.1 attach-javadocs jar + + false + false + 1.8 + http://docs.oracle.com/javase/7/docs/api/ http://docs.oracle.com/javase/7/docs/api/ + none + diff --git a/target/test-classes/SpreedlyTransactionResponse.xml b/target/test-classes/SpreedlyTransactionResponse.xml deleted file mode 100644 index 5a58200..0000000 --- a/target/test-classes/SpreedlyTransactionResponse.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - 80 - true - 2014-11-11T01:08:44Z - 2014-11-11T01:08:44Z - USD - true - succeeded - 1vcqQrU0d9f4NB5vdnx5wsoaAss - PurchaseViaReference - - - - - - - - - Y - - - - - wax@example.com - Waxillium - Ladrian - 3911 Main Street - Apartment 3 - Wanaque - NJ - 28592-8851 - US - - - 61 - Succeeded! - 8XJtbE1p4NTZ6fFqwwn0GrkjEmW - - true - Successful purchase - - - - - false - - - false - 2014-11-11T01:08:44Z - 2014-11-11T01:08:44Z - - KL7jgc4iy3MSMXfmqUNLVSHXmxN - - - \ No newline at end of file From d97f3bdc429dc1e17de92d34d83bbcacb50693bf Mon Sep 17 00:00:00 2001 From: orlovD Date: Wed, 23 Feb 2022 14:22:57 +0200 Subject: [PATCH 7/8] add mode prop --- .../spreedly/model/internal/SpreedlyGatewayAccountUpdate.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/cc/protea/spreedly/model/internal/SpreedlyGatewayAccountUpdate.java b/src/main/java/cc/protea/spreedly/model/internal/SpreedlyGatewayAccountUpdate.java index 4226e8c..8327d8c 100644 --- a/src/main/java/cc/protea/spreedly/model/internal/SpreedlyGatewayAccountUpdate.java +++ b/src/main/java/cc/protea/spreedly/model/internal/SpreedlyGatewayAccountUpdate.java @@ -17,6 +17,7 @@ public class SpreedlyGatewayAccountUpdate { DocumentBuilder documentBuilder; + public String mode; public SpreedlyGatewayAccountUpdate() { try { @@ -28,6 +29,7 @@ public SpreedlyGatewayAccountUpdate() { public SpreedlyGatewayAccountUpdate(final SpreedlyGatewayAccount in) { this.gatewayType = in.gatewayType; + this.mode = in.getMode(); for (SpreedlyGatewayCredential credential : in.credentials) { SpreedlyInternalKeyValuePair pair = new SpreedlyInternalKeyValuePair(); pair.key = credential.name; From a5d6c2d1b97c94688ee6ea74b9ec6795e91c08a0 Mon Sep 17 00:00:00 2001 From: orlovD Date: Wed, 23 Feb 2022 14:37:29 +0200 Subject: [PATCH 8/8] add mode prop --- .../spreedly/model/internal/SpreedlyGatewayAccountUpdate.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/cc/protea/spreedly/model/internal/SpreedlyGatewayAccountUpdate.java b/src/main/java/cc/protea/spreedly/model/internal/SpreedlyGatewayAccountUpdate.java index 4226e8c..3a28c5d 100644 --- a/src/main/java/cc/protea/spreedly/model/internal/SpreedlyGatewayAccountUpdate.java +++ b/src/main/java/cc/protea/spreedly/model/internal/SpreedlyGatewayAccountUpdate.java @@ -17,6 +17,8 @@ public class SpreedlyGatewayAccountUpdate { DocumentBuilder documentBuilder; + @XmlElement(name = "mode") + public String mode; public SpreedlyGatewayAccountUpdate() { try { @@ -28,6 +30,7 @@ public SpreedlyGatewayAccountUpdate() { public SpreedlyGatewayAccountUpdate(final SpreedlyGatewayAccount in) { this.gatewayType = in.gatewayType; + this.mode = in.getMode(); for (SpreedlyGatewayCredential credential : in.credentials) { SpreedlyInternalKeyValuePair pair = new SpreedlyInternalKeyValuePair(); pair.key = credential.name;