From 918cba605a81844af8925d94454f2360880537e9 Mon Sep 17 00:00:00 2001 From: Alex Fainshtein Date: Wed, 28 Aug 2019 20:16:37 +0300 Subject: [PATCH 01/30] 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 02/30] 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 03/30] 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 04/30] 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 e4ad7c3fbcb878de4ea51f9f0c991bf9d5962d3b Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 20 Jul 2020 16:33:59 +0300 Subject: [PATCH 05/30] add body to complete call --- src/main/java/cc/protea/spreedly/Spreedly.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index 8c7536b..2829a8f 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -396,8 +396,8 @@ public SpreedlyPaymentMethod update(final SpreedlyPaymentMethod paymentMethod) { * For more details see https://docs.spreedly.com/guides/3dsecure2/ * @param token transaction_token to complete */ - public SpreedlyTransactionResponse complete(String token) { - return util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", null, SpreedlyTransactionResponse.class); + public SpreedlyTransactionResponse complete(String token, String body) { + return util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", body, SpreedlyTransactionResponse.class); } } From ad31eded7b27be08b6acf3523cfb24050589bece Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 22 Jul 2020 14:43:54 +0300 Subject: [PATCH 06/30] add SpreedlyCompleteRequest --- src/main/java/cc/protea/spreedly/Spreedly.java | 4 ++-- .../spreedly/model/SpreedlyCompleteRequest.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index 2829a8f..b560cc8 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -396,8 +396,8 @@ public SpreedlyPaymentMethod update(final SpreedlyPaymentMethod paymentMethod) { * For more details see https://docs.spreedly.com/guides/3dsecure2/ * @param token transaction_token to complete */ - public SpreedlyTransactionResponse complete(String token, String body) { - return util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", body, SpreedlyTransactionResponse.class); + public SpreedlyTransactionResponse complete(String token, SpreedlyCompleteRequest request) { + return util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", request, SpreedlyTransactionResponse.class); } } diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java new file mode 100644 index 0000000..0922712 --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java @@ -0,0 +1,16 @@ + +package cc.protea.spreedly.model; + +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 java.util.Map; + + +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyCompleteRequest +{ + public Map context; +} From 83a75a022dfdca5a960db592a0b326e35e367d87 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 22 Jul 2020 15:06:29 +0300 Subject: [PATCH 07/30] add complete request object --- .../protea/spreedly/model/SpreedlyCompleteRequest.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java index 0922712..23b19d3 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java @@ -8,9 +8,17 @@ import java.util.Map; -@XmlRootElement +@XmlRootElement(name = "transaction") @XmlAccessorType(XmlAccessType.FIELD) public class SpreedlyCompleteRequest { public Map context; + + public Map getContext() { + return context; + } + + public void setContext(Map context) { + this.context = context; + } } From 413eecc0e1e4f42210e91888d08f68ca4ef02907 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 24 Jul 2020 15:36:20 +0300 Subject: [PATCH 08/30] change complete request to map --- .../spreedly/model/SpreedlyCompleteRequest.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java index 23b19d3..70b81b1 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java @@ -5,20 +5,13 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import java.util.HashMap; import java.util.Map; -@XmlRootElement(name = "transaction") +@XmlRootElement(name = "context") @XmlAccessorType(XmlAccessType.FIELD) -public class SpreedlyCompleteRequest +public class SpreedlyCompleteRequest extends HashMap { - public Map context; - public Map getContext() { - return context; - } - - public void setContext(Map context) { - this.context = context; - } } From 3a192774e23462d6dd1035785a80d83d51761930 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 24 Jul 2020 16:46:17 +0300 Subject: [PATCH 09/30] change to entry --- .../model/SpreedlyCompleteRequest.java | 58 +++++++++++++++++-- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java index 70b81b1..8657e35 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java @@ -1,17 +1,63 @@ package cc.protea.spreedly.model; +import java.util.ArrayList; +import java.util.List; 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 java.util.HashMap; -import java.util.Map; +import javax.xml.bind.annotation.XmlType; - -@XmlRootElement(name = "context") @XmlAccessorType(XmlAccessType.FIELD) -public class SpreedlyCompleteRequest extends HashMap -{ +@XmlType(name = "", propOrder = { + "entry" +}) +@XmlRootElement(name = "context") +public class SpreedlyCompleteRequest { + + protected List entry; + + + public List getEntry() { + if (entry == null) { + entry = new ArrayList(); + } + return this.entry; + } + + public void setEntry(List entry) { + this.entry = entry; + } + + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "key", + "value" + }) + public static class Entry { + + @XmlElement(required = true) + protected String key; + @XmlElement(required = true) + protected Object value; + + public String getKey() { + return key; + } + + public void setKey(String value) { + this.key = value; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } + + } } From 470abfb48802045d4765a7e03d641a77da269621 Mon Sep 17 00:00:00 2001 From: Vladimir Sheiko Date: Tue, 16 Nov 2021 09:03:56 +0200 Subject: [PATCH 10/30] 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 11/30] 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 12/30] 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 13/30] 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; From 75d0d07e551bf644b306cf13b692973091c635ae Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Sun, 31 Jul 2022 10:27:10 +0300 Subject: [PATCH 14/30] add 3ds global support --- .../java/cc/protea/spreedly/Spreedly.java | 18 ++++- .../spreedly/model/SpreedlyAmexDetails.java | 28 +++++++ .../spreedly/model/SpreedlyAmexNetwork.java | 48 +++++++++++ .../spreedly/model/SpreedlyCreditNetwork.java | 46 +++++++++++ .../model/SpreedlyMastercardDetails.java | 29 +++++++ .../model/SpreedlyMastercardNetwork.java | 48 +++++++++++ .../model/SpreedlyMerchantProfile.java | 45 +++++++++++ .../model/SpreedlyMerchantProfileRequest.java | 49 ++++++++++++ .../spreedly/model/SpreedlyScaProvider.java | 80 +++++++++++++++++++ .../model/SpreedlyScaProviderRequest.java | 62 ++++++++++++++ .../spreedly/model/SpreedlyVisaDetails.java | 28 +++++++ .../spreedly/model/SpreedlyVisaNetwork.java | 48 +++++++++++ 12 files changed, 528 insertions(+), 1 deletion(-) create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyAmexDetails.java create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyAmexNetwork.java create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyCreditNetwork.java create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyMastercardDetails.java create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyMastercardNetwork.java create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfile.java create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfileRequest.java create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyScaProvider.java create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyVisaDetails.java create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyVisaNetwork.java diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index 8c7536b..0e4f811 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -1,7 +1,6 @@ package cc.protea.spreedly; import cc.protea.spreedly.model.*; -import cc.protea.spreedly.model.internal.*; import java.util.ArrayList; import java.util.List; @@ -400,4 +399,21 @@ public SpreedlyTransactionResponse complete(String token) { return util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", null, SpreedlyTransactionResponse.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 SpreedlyMerchantProfile create(final SpreedlyMerchantProfileRequest request) { + return util.post("https://core.spreedly.com/v1/merchant_profiles.xml", request, SpreedlyMerchantProfile.class); + } + + /** + * Adds a gateway account to the authenticated environment. One gateway account is required for each set of merchant account + * credentials. Spreedly stores and protects the credentials to be used to authenticate with gateway accounts for + * transaction processing. + */ + public SpreedlyScaProvider create(final SpreedlyScaProviderRequest request) { + return util.post("https://core.spreedly.com/v1/sca/providers.xml", request, SpreedlyScaProvider.class); + } } diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyAmexDetails.java b/src/main/java/cc/protea/spreedly/model/SpreedlyAmexDetails.java new file mode 100644 index 0000000..b8a2861 --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyAmexDetails.java @@ -0,0 +1,28 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; + +@XmlRootElement(name = "amex") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyAmexDetails { + + @XmlElement(name = "acquirer_bin") public Long acquirerBin; + @XmlElement(name = "merchant_url") public String merchantUrl; + + public Long getAcquirerBin() { + return acquirerBin; + } + + public void setAcquirerBin(Long acquirerBin) { + this.acquirerBin = acquirerBin; + } + + public String getMerchantUrl() { + return merchantUrl; + } + + public void setMerchantUrl(String merchantUrl) { + this.merchantUrl = merchantUrl; + } + +} \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyAmexNetwork.java b/src/main/java/cc/protea/spreedly/model/SpreedlyAmexNetwork.java new file mode 100644 index 0000000..30ebb9b --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyAmexNetwork.java @@ -0,0 +1,48 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; + +@XmlRootElement(name = "amex") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyAmexNetwork { + + @XmlElement(name = "acquirer_merchant_id") public Long acquirerMerchantId; + @XmlElement(name = "country_code") public String countryCode; + @XmlElement(name = "mcc") public Long mcc; + @XmlElement(name = "merchant_name") public String name; + + public Long getAcquirerMerchantId() { + return acquirerMerchantId; + } + + public void setAcquirerMerchantId(Long acquirerMerchantId) { + this.acquirerMerchantId = acquirerMerchantId; + } + + public String getCountryCode() { + return countryCode; + } + + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + public Long getMcc() { + return mcc; + } + + public void setMcc(Long mcc) { + this.mcc = mcc; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + +} \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyCreditNetwork.java b/src/main/java/cc/protea/spreedly/model/SpreedlyCreditNetwork.java new file mode 100644 index 0000000..cd319e3 --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyCreditNetwork.java @@ -0,0 +1,46 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; +import java.util.ArrayList; +import java.util.List; + +@XmlRootElement(name = "card_networks") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyCreditNetwork { + + @XmlElementWrapper(name = "visa") + @XmlElement(name = "visa") + public SpreedlyVisaNetwork visa; + @XmlElementWrapper(name = "mastercard") + @XmlElement(name = "mastercard") + public SpreedlyMastercardNetwork mastercard; + @XmlElementWrapper(name = "amex") + @XmlElement(name = "amex") + public SpreedlyAmexNetwork amex; + + public SpreedlyVisaNetwork getVisa() { + return visa; + } + + public void setVisa(SpreedlyVisaNetwork visa) { + this.visa = visa; + } + + public SpreedlyMastercardNetwork getMastercard() { + return mastercard; + } + + public void setMastercard(SpreedlyMastercardNetwork mastercard) { + this.mastercard = mastercard; + } + + public SpreedlyAmexNetwork getAmex() { + return amex; + } + + public void setAmex(SpreedlyAmexNetwork amex) { + this.amex = amex; + } + + +} \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardDetails.java b/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardDetails.java new file mode 100644 index 0000000..484f5f2 --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardDetails.java @@ -0,0 +1,29 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; + +@XmlRootElement(name = "mastercard") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyMastercardDetails { + + @XmlElement(name = "acquirer_bin") public Long acquirerBin; + @XmlElement(name = "merchant_url") public String merchantUrl; + + public Long getAcquirerBin() { + return acquirerBin; + } + + public void setAcquirerBin(Long acquirerBin) { + this.acquirerBin = acquirerBin; + } + + public String getMerchantUrl() { + return merchantUrl; + } + + public void setMerchantUrl(String merchantUrl) { + this.merchantUrl = merchantUrl; + } + + +} \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardNetwork.java b/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardNetwork.java new file mode 100644 index 0000000..6b4b204 --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardNetwork.java @@ -0,0 +1,48 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; + +@XmlRootElement(name = "mastercard") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyMastercardNetwork { + + @XmlElement(name = "acquirer_merchant_id") public Long acquirerMerchantId; + @XmlElement(name = "country_code") public String countryCode; + @XmlElement(name = "mcc") public Long mcc; + @XmlElement(name = "merchant_name") public String name; + + public Long getAcquirerMerchantId() { + return acquirerMerchantId; + } + + public void setAcquirerMerchantId(Long acquirerMerchantId) { + this.acquirerMerchantId = acquirerMerchantId; + } + + public String getCountryCode() { + return countryCode; + } + + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + public Long getMcc() { + return mcc; + } + + public void setMcc(Long mcc) { + this.mcc = mcc; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + +} \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfile.java b/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfile.java new file mode 100644 index 0000000..2cf549c --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfile.java @@ -0,0 +1,45 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@XmlRootElement(name = "merchant_profile") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyMerchantProfile { + @XmlElement(name = "description") public String description; + @XmlElement(name = "token") public String token; + @XmlElementWrapper(name = "card_networks") + @XmlElement(name = "card_networks") + SpreedlyCreditNetwork creditNetwork; + @XmlElement(name = "created_at") public Date createdOn; + @XmlElement(name = "updated_at") public Date updatedOn; + + + public SpreedlyCreditNetwork getCreditNetwork() { + return creditNetwork; + } + public void setCreditNetwork(SpreedlyCreditNetwork creditNetwork) { + this.creditNetwork = creditNetwork; + } + public Date getCreatedOn() { + return createdOn; + } + public void setCreatedOn(final Date createdOn) { + this.createdOn = createdOn; + } + public Date getUpdatedOn() { + return updatedOn; + } + public void setUpdatedOn(final Date updatedOn) { + this.updatedOn = updatedOn; + } + public String getDescription() { + return description; + } + public void setDescription(final String description) { + this.description = description; + } + +} \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfileRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfileRequest.java new file mode 100644 index 0000000..e7536e9 --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfileRequest.java @@ -0,0 +1,49 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; + +@XmlRootElement(name = "merchant_profile") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyMerchantProfileRequest { + @XmlElement(name = "description") public String description; + @XmlElementWrapper(name = "amex") + @XmlElement(name = "amex") + public SpreedlyAmexNetwork amex; + @XmlElementWrapper(name = "visa") + @XmlElement(name = "visa") + public SpreedlyVisaNetwork visa; + @XmlElementWrapper(name = "mastercard") + @XmlElement(name = "mastercard") + public SpreedlyMastercardNetwork mastercard; + + public SpreedlyAmexNetwork getAmex() { + return amex; + } + + public void setAmex(SpreedlyAmexNetwork amex) { + this.amex = amex; + } + + public SpreedlyVisaNetwork getVisa() { + return visa; + } + + public void setVisa(SpreedlyVisaNetwork visa) { + this.visa = visa; + } + + public SpreedlyMastercardNetwork getMastercard() { + return mastercard; + } + + public void setMastercard(SpreedlyMastercardNetwork mastercard) { + this.mastercard = mastercard; + } + + public String getDescription() { + return description; + } + public void setDescription(final String description) { + this.description = description; + } +} \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyScaProvider.java b/src/main/java/cc/protea/spreedly/model/SpreedlyScaProvider.java new file mode 100644 index 0000000..3596300 --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyScaProvider.java @@ -0,0 +1,80 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; +import java.util.Date; + +@XmlRootElement(name = "sca_provider") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyScaProvider { + + @XmlElement(name = "token") public String token; + @XmlElement(name = "type") public String type ; + @XmlElement(name = "created_at") public Date createdOn; + @XmlElement(name = "updated_at") public Date updatedOn; + @XmlElementWrapper(name = "visa") + @XmlElement(name = "visa") + public SpreedlyVisaDetails visa; + @XmlElementWrapper(name = "mastercard") + @XmlElement(name = "mastercard") + public SpreedlyMastercardDetails mastercard; + + public String isType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public SpreedlyVisaDetails getVisa() { + return visa; + } + + public void setVisa(SpreedlyVisaDetails visa) { + this.visa = visa; + } + + public SpreedlyMastercardDetails getMastercard() { + return mastercard; + } + + public void setMastercard(SpreedlyMastercardDetails mastercard) { + this.mastercard = mastercard; + } + + public SpreedlyAmexDetails getAmex() { + return amex; + } + + public void setAmex(SpreedlyAmexDetails amex) { + this.amex = amex; + } + + @XmlElementWrapper(name = "amex") + @XmlElement(name = "amex") + public SpreedlyAmexDetails amex; + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + + + public Date getCreatedOn() { + return createdOn; + } + public void setCreatedOn(final Date createdOn) { + this.createdOn = createdOn; + } + public Date getUpdatedOn() { + return updatedOn; + } + public void setUpdatedOn(final Date updatedOn) { + this.updatedOn = updatedOn; + } + +} \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java new file mode 100644 index 0000000..c028fca --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java @@ -0,0 +1,62 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; +import java.util.Date; + +@XmlRootElement(name = "sca_provider") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyScaProviderRequest { + + @XmlElement(name = "merchant_profile_key") public String merchantProfileKey; + @XmlElement(name = "type") public String type ; + @XmlElementWrapper(name = "visa") + @XmlElement(name = "visa") + public SpreedlyVisaDetails visa; + @XmlElementWrapper(name = "mastercard") + @XmlElement(name = "mastercard") + public SpreedlyMastercardDetails mastercard; + @XmlElementWrapper(name = "amex") + @XmlElement(name = "amex") + public SpreedlyAmexDetails amex; + + public String getMerchantProfileKey() { + return merchantProfileKey; + } + + public void setMerchantProfileKey(String merchantProfileKey) { + this.merchantProfileKey = merchantProfileKey; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public SpreedlyVisaDetails getVisa() { + return visa; + } + + public void setVisa(SpreedlyVisaDetails visa) { + this.visa = visa; + } + + public SpreedlyMastercardDetails getMastercard() { + return mastercard; + } + + public void setMastercard(SpreedlyMastercardDetails mastercard) { + this.mastercard = mastercard; + } + + public SpreedlyAmexDetails getAmex() { + return amex; + } + + public void setAmex(SpreedlyAmexDetails amex) { + this.amex = amex; + } + +} \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyVisaDetails.java b/src/main/java/cc/protea/spreedly/model/SpreedlyVisaDetails.java new file mode 100644 index 0000000..dc8f37e --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyVisaDetails.java @@ -0,0 +1,28 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; + +@XmlRootElement(name = "visa") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyVisaDetails { + + @XmlElement(name = "acquirer_bin") public Long acquirerBin; + @XmlElement(name = "merchant_url") public String merchantUrl; + + public Long getAcquirerBin() { + return acquirerBin; + } + + public void setAcquirerBin(Long acquirerBin) { + this.acquirerBin = acquirerBin; + } + + public String getMerchantUrl() { + return merchantUrl; + } + + public void setMerchantUrl(String merchantUrl) { + this.merchantUrl = merchantUrl; + } + +} \ No newline at end of file diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyVisaNetwork.java b/src/main/java/cc/protea/spreedly/model/SpreedlyVisaNetwork.java new file mode 100644 index 0000000..4d1cd67 --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyVisaNetwork.java @@ -0,0 +1,48 @@ +package cc.protea.spreedly.model; + +import javax.xml.bind.annotation.*; + +@XmlRootElement(name = "visa") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyVisaNetwork { + + @XmlElement(name = "acquirer_merchant_id") public Long acquirerMerchantId; + @XmlElement(name = "country_code") public String countryCode; + @XmlElement(name = "mcc") public Long mcc; + @XmlElement(name = "merchant_name") public String name; + + public Long getAcquirerMerchantId() { + return acquirerMerchantId; + } + + public void setAcquirerMerchantId(Long acquirerMerchantId) { + this.acquirerMerchantId = acquirerMerchantId; + } + + public String getCountryCode() { + return countryCode; + } + + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + public Long getMcc() { + return mcc; + } + + public void setMcc(Long mcc) { + this.mcc = mcc; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + +} \ No newline at end of file From 019cf0fa65f7e7bafa0e9ad81cef54958fb76108 Mon Sep 17 00:00:00 2001 From: David Radchenko Date: Sun, 31 Jul 2022 11:42:33 +0300 Subject: [PATCH 15/30] Update Spreedly.java --- src/main/java/cc/protea/spreedly/Spreedly.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index 0e4f811..bdf60e0 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -390,15 +390,6 @@ 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.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", null, SpreedlyTransactionResponse.class); - } - /** * Completes a 3DS 2 transaction in the device fingerprint stage. * For more details see https://docs.spreedly.com/guides/3dsecure2/ From c494b82f2330b2d6b028bd43a8bde2651a0b5a16 Mon Sep 17 00:00:00 2001 From: David Radchenko Date: Sun, 31 Jul 2022 11:44:05 +0300 Subject: [PATCH 16/30] Update pom.xml --- pom.xml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 3784552..6a6c4c6 100644 --- a/pom.xml +++ b/pom.xml @@ -93,20 +93,13 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.1.1 + 2.9.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 - From 19da57777d3593c2acba511887c09139032407d1 Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Sun, 31 Jul 2022 12:25:37 +0300 Subject: [PATCH 17/30] add 3ds global support --- .../spreedly/model/SpreedlyTransactionRequest.java | 13 +++++++++++++ .../spreedly/model/SpreedlyTransactionResponse.java | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java index 2bcbc7c..0b5beaf 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java @@ -101,6 +101,10 @@ public class SpreedlyTransactionRequest { */ @XmlElement(name = "three_ds_version") public String threeDsVersion; + /** + * Charge an SCA Authenticated payment method (already stored in the Spreedly environment) the specified amount. + */ + @XmlElement(name = "sca_authentication_token") public String scaAuthenticationToken; /** * @return A unique string generated by Spreedly to identify a gateway. */ @@ -350,4 +354,13 @@ public void setThreeDsVersion(String threeDsVersion) { this.threeDsVersion = threeDsVersion; } + + public String getScaAuthenticationToken() { + return scaAuthenticationToken; + } + + public void setScaAuthenticationToken(String scaAuthenticationToken) { + this.scaAuthenticationToken = scaAuthenticationToken; + } + } diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java index 8732eff..e12c56c 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java @@ -133,6 +133,11 @@ public class SpreedlyTransactionResponse implements SpreedlyErrorSetting { @XmlElement(name = "challenge_url") public String challengeUrl; @XmlElement(name = "challenge_form") public String challengeForm; + + /** + * Charge an SCA Authenticated payment method (already stored in the Spreedly environment) the specified amount. + */ + @XmlElement(name = "sca_authentication_token") public String scaAuthenticationToken; /** * @return Any positive whole number, for example 1234 = $12.34. @@ -594,4 +599,12 @@ public SpreedlyTransactionResponse setChallengeForm(String challengeForm) this.challengeForm = challengeForm; return this; } + + public String getScaAuthenticationToken() { + return scaAuthenticationToken; + } + + public void setScaAuthenticationToken(String scaAuthenticationToken) { + this.scaAuthenticationToken = scaAuthenticationToken; + } } From e60ea6021d4cc9d225737943f8d2fc9fdda756c2 Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Sun, 31 Jul 2022 12:26:55 +0300 Subject: [PATCH 18/30] add 3ds global support --- pom.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 + From d524404e5dcd8ea21c1370d6966e6ecf4e7e55a3 Mon Sep 17 00:00:00 2001 From: David Radchenko Date: Sun, 31 Jul 2022 12:43:28 +0300 Subject: [PATCH 19/30] Update Spreedly.java --- src/main/java/cc/protea/spreedly/Spreedly.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index bdf60e0..14572cc 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -390,6 +390,10 @@ public SpreedlyPaymentMethod update(final SpreedlyPaymentMethod paymentMethod) { return util.put("https://core.spreedly.com/v1/payment_methods/" + paymentMethod.token + ".xml", paymentMethod, SpreedlyPaymentMethod.class); } + public SpreedlyTransactionResponse complete(String token, SpreedlyCompleteRequest request) { + return (SpreedlyTransactionResponse)this.util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", request, SpreedlyTransactionResponse.class); + } + /** * Completes a 3DS 2 transaction in the device fingerprint stage. * For more details see https://docs.spreedly.com/guides/3dsecure2/ From 817428441c3f6ef4b6bc57785faafc75c4580606 Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Sun, 31 Jul 2022 19:02:55 +0300 Subject: [PATCH 20/30] add 3ds global support --- pom.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3784552..23231f3 100644 --- a/pom.xml +++ b/pom.xml @@ -104,7 +104,10 @@ false false 1.8 - http://docs.oracle.com/javase/7/docs/api/ http://docs.oracle.com/javase/7/docs/api/ + + http://docs.oracle.com/javase/7/docs/api/ + http://docs.oracle.com/javase/7/docs/api/ + none From 32b5cd9e83fbec4a9ccac2c88752fa699c0df08c Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Mon, 1 Aug 2022 14:08:28 +0300 Subject: [PATCH 21/30] add 3ds global support --- pom.xml | 9 +++++++-- .../protea/spreedly/model/SpreedlyAmexNetwork.java | 12 ++++++------ .../spreedly/model/SpreedlyMastercardNetwork.java | 12 ++++++------ .../protea/spreedly/model/SpreedlyVisaNetwork.java | 12 ++++++------ 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index 3784552..5e415d6 100644 --- a/pom.xml +++ b/pom.xml @@ -44,6 +44,8 @@ UTF-8 + 1.8 + 1.8 @@ -58,7 +60,11 @@ http [0.2,) - + + javax.xml.bind + jaxb-api + 2.3.0 + @@ -155,5 +161,4 @@ https://oss.sonatype.org/content/repositories/snapshots - diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyAmexNetwork.java b/src/main/java/cc/protea/spreedly/model/SpreedlyAmexNetwork.java index 30ebb9b..821bb6a 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyAmexNetwork.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyAmexNetwork.java @@ -6,24 +6,24 @@ @XmlAccessorType(XmlAccessType.FIELD) public class SpreedlyAmexNetwork { - @XmlElement(name = "acquirer_merchant_id") public Long acquirerMerchantId; - @XmlElement(name = "country_code") public String countryCode; + @XmlElement(name = "acquirer_merchant_id") public String acquirerMerchantId; + @XmlElement(name = "country_code") public Long countryCode; @XmlElement(name = "mcc") public Long mcc; @XmlElement(name = "merchant_name") public String name; - public Long getAcquirerMerchantId() { + public String getAcquirerMerchantId() { return acquirerMerchantId; } - public void setAcquirerMerchantId(Long acquirerMerchantId) { + public void setAcquirerMerchantId(String acquirerMerchantId) { this.acquirerMerchantId = acquirerMerchantId; } - public String getCountryCode() { + public Long getCountryCode() { return countryCode; } - public void setCountryCode(String countryCode) { + public void setCountryCode(Long countryCode) { this.countryCode = countryCode; } diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardNetwork.java b/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardNetwork.java index 6b4b204..b78698c 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardNetwork.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardNetwork.java @@ -6,24 +6,24 @@ @XmlAccessorType(XmlAccessType.FIELD) public class SpreedlyMastercardNetwork { - @XmlElement(name = "acquirer_merchant_id") public Long acquirerMerchantId; - @XmlElement(name = "country_code") public String countryCode; + @XmlElement(name = "acquirer_merchant_id") public String acquirerMerchantId; + @XmlElement(name = "country_code") public Long countryCode; @XmlElement(name = "mcc") public Long mcc; @XmlElement(name = "merchant_name") public String name; - public Long getAcquirerMerchantId() { + public String getAcquirerMerchantId() { return acquirerMerchantId; } - public void setAcquirerMerchantId(Long acquirerMerchantId) { + public void setAcquirerMerchantId(String acquirerMerchantId) { this.acquirerMerchantId = acquirerMerchantId; } - public String getCountryCode() { + public Long getCountryCode() { return countryCode; } - public void setCountryCode(String countryCode) { + public void setCountryCode(Long countryCode) { this.countryCode = countryCode; } diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyVisaNetwork.java b/src/main/java/cc/protea/spreedly/model/SpreedlyVisaNetwork.java index 4d1cd67..9665cd8 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyVisaNetwork.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyVisaNetwork.java @@ -6,24 +6,24 @@ @XmlAccessorType(XmlAccessType.FIELD) public class SpreedlyVisaNetwork { - @XmlElement(name = "acquirer_merchant_id") public Long acquirerMerchantId; - @XmlElement(name = "country_code") public String countryCode; + @XmlElement(name = "acquirer_merchant_id") public String acquirerMerchantId; + @XmlElement(name = "country_code") public Long countryCode; @XmlElement(name = "mcc") public Long mcc; @XmlElement(name = "merchant_name") public String name; - public Long getAcquirerMerchantId() { + public String getAcquirerMerchantId() { return acquirerMerchantId; } - public void setAcquirerMerchantId(Long acquirerMerchantId) { + public void setAcquirerMerchantId(String acquirerMerchantId) { this.acquirerMerchantId = acquirerMerchantId; } - public String getCountryCode() { + public Long getCountryCode() { return countryCode; } - public void setCountryCode(String countryCode) { + public void setCountryCode(Long countryCode) { this.countryCode = countryCode; } From 1fb0a8d1891d9d5b8bc8cf362711c2c17303fa91 Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Wed, 3 Aug 2022 00:58:56 +0300 Subject: [PATCH 22/30] add 3ds global support --- .../cc/protea/spreedly/model/SpreedlyCreditNetwork.java | 5 ----- .../cc/protea/spreedly/model/SpreedlyMerchantProfile.java | 1 - .../spreedly/model/SpreedlyMerchantProfileRequest.java | 6 ++---- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyCreditNetwork.java b/src/main/java/cc/protea/spreedly/model/SpreedlyCreditNetwork.java index cd319e3..70751d0 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyCreditNetwork.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyCreditNetwork.java @@ -1,20 +1,15 @@ package cc.protea.spreedly.model; import javax.xml.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; @XmlRootElement(name = "card_networks") @XmlAccessorType(XmlAccessType.FIELD) public class SpreedlyCreditNetwork { - @XmlElementWrapper(name = "visa") @XmlElement(name = "visa") public SpreedlyVisaNetwork visa; - @XmlElementWrapper(name = "mastercard") @XmlElement(name = "mastercard") public SpreedlyMastercardNetwork mastercard; - @XmlElementWrapper(name = "amex") @XmlElement(name = "amex") public SpreedlyAmexNetwork amex; diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfile.java b/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfile.java index 2cf549c..cab0404 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfile.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfile.java @@ -10,7 +10,6 @@ public class SpreedlyMerchantProfile { @XmlElement(name = "description") public String description; @XmlElement(name = "token") public String token; - @XmlElementWrapper(name = "card_networks") @XmlElement(name = "card_networks") SpreedlyCreditNetwork creditNetwork; @XmlElement(name = "created_at") public Date createdOn; diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfileRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfileRequest.java index e7536e9..3e20472 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfileRequest.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyMerchantProfileRequest.java @@ -5,14 +5,12 @@ @XmlRootElement(name = "merchant_profile") @XmlAccessorType(XmlAccessType.FIELD) public class SpreedlyMerchantProfileRequest { - @XmlElement(name = "description") public String description; - @XmlElementWrapper(name = "amex") + @XmlElement(name = "description") + public String description; @XmlElement(name = "amex") public SpreedlyAmexNetwork amex; - @XmlElementWrapper(name = "visa") @XmlElement(name = "visa") public SpreedlyVisaNetwork visa; - @XmlElementWrapper(name = "mastercard") @XmlElement(name = "mastercard") public SpreedlyMastercardNetwork mastercard; From d8b141fe91213b3a8fb83858d52c429bc646aa7b Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Wed, 3 Aug 2022 01:50:06 +0300 Subject: [PATCH 23/30] add 3ds global support --- src/main/java/cc/protea/spreedly/Spreedly.java | 4 ---- .../protea/spreedly/model/SpreedlyScaProvider.java | 12 ++++++------ .../spreedly/model/SpreedlyScaProviderRequest.java | 3 --- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index 14572cc..bdf60e0 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -390,10 +390,6 @@ public SpreedlyPaymentMethod update(final SpreedlyPaymentMethod paymentMethod) { return util.put("https://core.spreedly.com/v1/payment_methods/" + paymentMethod.token + ".xml", paymentMethod, SpreedlyPaymentMethod.class); } - public SpreedlyTransactionResponse complete(String token, SpreedlyCompleteRequest request) { - return (SpreedlyTransactionResponse)this.util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", request, SpreedlyTransactionResponse.class); - } - /** * Completes a 3DS 2 transaction in the device fingerprint stage. * For more details see https://docs.spreedly.com/guides/3dsecure2/ diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyScaProvider.java b/src/main/java/cc/protea/spreedly/model/SpreedlyScaProvider.java index 3596300..2ec3013 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyScaProvider.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyScaProvider.java @@ -11,12 +11,16 @@ public class SpreedlyScaProvider { @XmlElement(name = "type") public String type ; @XmlElement(name = "created_at") public Date createdOn; @XmlElement(name = "updated_at") public Date updatedOn; - @XmlElementWrapper(name = "visa") @XmlElement(name = "visa") public SpreedlyVisaDetails visa; - @XmlElementWrapper(name = "mastercard") @XmlElement(name = "mastercard") public SpreedlyMastercardDetails mastercard; + @XmlElement(name = "amex") + public SpreedlyAmexDetails amex; + + public String getType() { + return type; + } public String isType() { return type; @@ -50,10 +54,6 @@ public void setAmex(SpreedlyAmexDetails amex) { this.amex = amex; } - @XmlElementWrapper(name = "amex") - @XmlElement(name = "amex") - public SpreedlyAmexDetails amex; - public String getToken() { return token; } diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java index c028fca..4815338 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java @@ -9,13 +9,10 @@ public class SpreedlyScaProviderRequest { @XmlElement(name = "merchant_profile_key") public String merchantProfileKey; @XmlElement(name = "type") public String type ; - @XmlElementWrapper(name = "visa") @XmlElement(name = "visa") public SpreedlyVisaDetails visa; - @XmlElementWrapper(name = "mastercard") @XmlElement(name = "mastercard") public SpreedlyMastercardDetails mastercard; - @XmlElementWrapper(name = "amex") @XmlElement(name = "amex") public SpreedlyAmexDetails amex; From f1807bd5bf0a73ee99baefe5ac8e59894d6a79d1 Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Mon, 8 Aug 2022 10:31:44 +0300 Subject: [PATCH 24/30] add 3ds global support --- .../spreedly/model/SpreedlyTransactionRequest.java | 2 +- .../spreedly/model/SpreedlyTransactionResponse.java | 13 ------------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java index 0b5beaf..b7024d7 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java @@ -102,7 +102,7 @@ public class SpreedlyTransactionRequest { @XmlElement(name = "three_ds_version") public String threeDsVersion; /** - * Charge an SCA Authenticated payment method (already stored in the Spreedly environment) the specified amount. + * The token received in response body of SCA Authenticate endpoint when performing an SCA Authentication on a specified payment method. */ @XmlElement(name = "sca_authentication_token") public String scaAuthenticationToken; /** diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java index e12c56c..3d61d55 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionResponse.java @@ -134,11 +134,6 @@ public class SpreedlyTransactionResponse implements SpreedlyErrorSetting { @XmlElement(name = "challenge_form") public String challengeForm; - /** - * Charge an SCA Authenticated payment method (already stored in the Spreedly environment) the specified amount. - */ - @XmlElement(name = "sca_authentication_token") public String scaAuthenticationToken; - /** * @return Any positive whole number, for example 1234 = $12.34. */ @@ -599,12 +594,4 @@ public SpreedlyTransactionResponse setChallengeForm(String challengeForm) this.challengeForm = challengeForm; return this; } - - public String getScaAuthenticationToken() { - return scaAuthenticationToken; - } - - public void setScaAuthenticationToken(String scaAuthenticationToken) { - this.scaAuthenticationToken = scaAuthenticationToken; - } } From 97b7b65a8eea3801fced401f3ba9361c4b0ddefb Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Mon, 8 Aug 2022 10:40:56 +0300 Subject: [PATCH 25/30] add 3ds global support --- src/main/java/cc/protea/spreedly/Spreedly.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index bdf60e0..eb2dd59 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -395,6 +395,14 @@ public SpreedlyPaymentMethod update(final SpreedlyPaymentMethod paymentMethod) { * For more details see https://docs.spreedly.com/guides/3dsecure2/ * @param token transaction_token to complete */ + public SpreedlyTransactionResponse complete(String token) { + return util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", null, SpreedlyTransactionResponse.class); + } + + /** + * Create an SCA Provider on the given Merchant Profile. An SCA Provider can be used to run 3DS2 Global + * authentications on the authenticate endpoint or as part of authorize and purchase transactions. + */ public SpreedlyMerchantProfile create(final SpreedlyMerchantProfileRequest request) { return util.post("https://core.spreedly.com/v1/merchant_profiles.xml", request, SpreedlyMerchantProfile.class); } From bdcb8ff7b46904bafdeb4a3683f0aae3328c8cb3 Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Mon, 8 Aug 2022 16:24:50 +0300 Subject: [PATCH 26/30] add 3ds global support --- 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 eb2dd59..1f1f195 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -402,7 +402,7 @@ public SpreedlyTransactionResponse complete(String token) { /** * Create an SCA Provider on the given Merchant Profile. An SCA Provider can be used to run 3DS2 Global * authentications on the authenticate endpoint or as part of authorize and purchase transactions. - */ + */ public SpreedlyMerchantProfile create(final SpreedlyMerchantProfileRequest request) { return util.post("https://core.spreedly.com/v1/merchant_profiles.xml", request, SpreedlyMerchantProfile.class); } From 8ea9068085b9d51bfc64a265a00f451b04cb6bf0 Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Mon, 8 Aug 2022 17:49:31 +0300 Subject: [PATCH 27/30] add 3ds global support --- .../java/cc/protea/spreedly/Spreedly.java | 4 +- .../model/SpreedlyCompleteRequest.java | 57 +++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index 1f1f195..3e1d2b4 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -395,8 +395,8 @@ public SpreedlyPaymentMethod update(final SpreedlyPaymentMethod paymentMethod) { * For more details see https://docs.spreedly.com/guides/3dsecure2/ * @param token transaction_token to complete */ - public SpreedlyTransactionResponse complete(String token) { - return util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", null, SpreedlyTransactionResponse.class); + public SpreedlyTransactionResponse complete(String token, SpreedlyCompleteRequest request) { + return util.post("https://core.spreedly.com/v1/transactions/" + token + "/complete.xml", request, SpreedlyTransactionResponse.class); } /** diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java new file mode 100644 index 0000000..44c9251 --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyCompleteRequest.java @@ -0,0 +1,57 @@ +package cc.protea.spreedly.model; + +import java.util.ArrayList; +import java.util.List; +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.XmlType; + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = {"entry"}) +@XmlRootElement(name = "context") +public class SpreedlyCompleteRequest { + + protected List entry; + + + public List getEntry() { + if (entry == null) { + entry = new ArrayList(); + } + return this.entry; + } + + public void setEntry(List entry) { + this.entry = entry; + } + + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = {"key", "value"}) + public static class Entry { + + @XmlElement(required = true) + protected String key; + @XmlElement(required = true) + protected Object value; + + public String getKey() { + return key; + } + + public void setKey(String value) { + this.key = value; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } + + } + +} \ No newline at end of file From 4c5298c0cfaae72962ea1a81226aebebee509a6c Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Sat, 13 Aug 2022 00:14:19 +0300 Subject: [PATCH 28/30] add 3ds global support --- .../java/cc/protea/spreedly/Spreedly.java | 7 ++ .../SpreedlyScaAuthenticationResponse.java | 110 ++++++++++++++++++ .../model/SpreedlyTransactionRequest.java | 14 +++ 3 files changed, 131 insertions(+) create mode 100644 src/main/java/cc/protea/spreedly/model/SpreedlyScaAuthenticationResponse.java diff --git a/src/main/java/cc/protea/spreedly/Spreedly.java b/src/main/java/cc/protea/spreedly/Spreedly.java index 3e1d2b4..605a887 100644 --- a/src/main/java/cc/protea/spreedly/Spreedly.java +++ b/src/main/java/cc/protea/spreedly/Spreedly.java @@ -415,4 +415,11 @@ public SpreedlyMerchantProfile create(final SpreedlyMerchantProfileRequest reque public SpreedlyScaProvider create(final SpreedlyScaProviderRequest request) { return util.post("https://core.spreedly.com/v1/sca/providers.xml", request, SpreedlyScaProvider.class); } + + /** + * Authenticate a given payment method and amount against provided SCA Provider Key (specified in request URL). + */ + public SpreedlyScaAuthenticationResponse authenticateScaProvider(String scaProviderKey , final SpreedlyTransactionRequest request) { + return util.post("https://core.spreedly.com/v1/sca/providers/" + scaProviderKey + "/authenticate.xml", request, SpreedlyScaAuthenticationResponse.class); + } } diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyScaAuthenticationResponse.java b/src/main/java/cc/protea/spreedly/model/SpreedlyScaAuthenticationResponse.java new file mode 100644 index 0000000..2df30d0 --- /dev/null +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyScaAuthenticationResponse.java @@ -0,0 +1,110 @@ +package cc.protea.spreedly.model; + +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 java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@XmlRootElement(name = "transaction") +@XmlAccessorType(XmlAccessType.FIELD) +public class SpreedlyScaAuthenticationResponse implements SpreedlyErrorSetting { + + /** + * Any positive whole number, for example 1234 = $12.34. + */ + @XmlElement(name = "amount") public Integer amountInCents; + /** + * Date and time of origination. + */ + @XmlElement(name = "created_at") public Date createdOn; + /** + * ISO 4217 Currency Code e.g., USD, MXN, EUR + */ + @XmlElement(name = "currency_code") public String currencyCode; + /** + * true if transaction was successful. + */ + public boolean succeeded; + /** + * The token uniquely identifying the transaction at Spreedly. + * This token can be passed into an authorize or purchase transaction via the sca_authentication_token field to automatically fill its payment_method_token and Third Party 3DS2 fields. + */ + public String token; + /** + * SCA Provider token that performs a Spreedly 3DS2 Global authentication before attempting the gateway transaction. + * Please see our Spreedly 3DS2 Global Guide for more info. + */ + @XmlElement(name = "sca_provider_key") public String scaProviderKey; + + public SpreedlyMessage message; + + public Integer getAmountInCents() { + return amountInCents; + } + + public void setAmountInCents(Integer amountInCents) { + this.amountInCents = amountInCents; + } + + public Date getCreatedOn() { + return createdOn; + } + + public void setCreatedOn(Date createdOn) { + this.createdOn = createdOn; + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } + + public boolean isSucceeded() { + return succeeded; + } + + public void setSucceeded(boolean succeeded) { + this.succeeded = succeeded; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public String getScaProviderKey() { + return scaProviderKey; + } + + public void setScaProviderKey(String scaProviderKey) { + this.scaProviderKey = scaProviderKey; + } + + public SpreedlyMessage getMessage() { + return message; + } + public SpreedlyScaAuthenticationResponse setMessage(final SpreedlyMessage message) { + this.message = message; + return this; + } + + public void setError(final String key, final String error) { + message = new SpreedlyMessage(); + message.key = key; + message.message = error; + this.succeeded = false; + } +} diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java index b7024d7..a130e6d 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyTransactionRequest.java @@ -105,6 +105,13 @@ public class SpreedlyTransactionRequest { * The token received in response body of SCA Authenticate endpoint when performing an SCA Authentication on a specified payment method. */ @XmlElement(name = "sca_authentication_token") public String scaAuthenticationToken; + + /** + * SCA Provider token that performs a Spreedly 3DS2 Global authentication before attempting the gateway transaction. + * Please see our Spreedly 3DS2 Global Guide for more info. + */ + @XmlElement(name = "sca_provider_key") public String scaProviderKey; + /** * @return A unique string generated by Spreedly to identify a gateway. */ @@ -363,4 +370,11 @@ public void setScaAuthenticationToken(String scaAuthenticationToken) { this.scaAuthenticationToken = scaAuthenticationToken; } + public String getScaProviderKey() { + return scaProviderKey; + } + + public void setScaProviderKey(String scaProviderKey) { + this.scaProviderKey = scaProviderKey; + } } From 206496e90a00a22aad7aa21f5f7eb24b8aecf6c9 Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Tue, 22 Nov 2022 13:16:38 +0200 Subject: [PATCH 29/30] fix acquire bin type --- .../java/cc/protea/spreedly/model/SpreedlyAmexDetails.java | 6 +++--- .../cc/protea/spreedly/model/SpreedlyMastercardDetails.java | 6 +++--- .../java/cc/protea/spreedly/model/SpreedlyVisaDetails.java | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyAmexDetails.java b/src/main/java/cc/protea/spreedly/model/SpreedlyAmexDetails.java index b8a2861..6373e61 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyAmexDetails.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyAmexDetails.java @@ -6,14 +6,14 @@ @XmlAccessorType(XmlAccessType.FIELD) public class SpreedlyAmexDetails { - @XmlElement(name = "acquirer_bin") public Long acquirerBin; + @XmlElement(name = "acquirer_bin") public String acquirerBin; @XmlElement(name = "merchant_url") public String merchantUrl; - public Long getAcquirerBin() { + public String getAcquirerBin() { return acquirerBin; } - public void setAcquirerBin(Long acquirerBin) { + public void setAcquirerBin(String acquirerBin) { this.acquirerBin = acquirerBin; } diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardDetails.java b/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardDetails.java index 484f5f2..17247d9 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardDetails.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyMastercardDetails.java @@ -6,14 +6,14 @@ @XmlAccessorType(XmlAccessType.FIELD) public class SpreedlyMastercardDetails { - @XmlElement(name = "acquirer_bin") public Long acquirerBin; + @XmlElement(name = "acquirer_bin") public String acquirerBin; @XmlElement(name = "merchant_url") public String merchantUrl; - public Long getAcquirerBin() { + public String getAcquirerBin() { return acquirerBin; } - public void setAcquirerBin(Long acquirerBin) { + public void setAcquirerBin(String acquirerBin) { this.acquirerBin = acquirerBin; } diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyVisaDetails.java b/src/main/java/cc/protea/spreedly/model/SpreedlyVisaDetails.java index dc8f37e..9456c4a 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyVisaDetails.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyVisaDetails.java @@ -6,14 +6,14 @@ @XmlAccessorType(XmlAccessType.FIELD) public class SpreedlyVisaDetails { - @XmlElement(name = "acquirer_bin") public Long acquirerBin; + @XmlElement(name = "acquirer_bin") public String acquirerBin; @XmlElement(name = "merchant_url") public String merchantUrl; - public Long getAcquirerBin() { + public String getAcquirerBin() { return acquirerBin; } - public void setAcquirerBin(Long acquirerBin) { + public void setAcquirerBin(String acquirerBin) { this.acquirerBin = acquirerBin; } From f6c59f4f19dcba52d9ed4acf01481c65129bafcd Mon Sep 17 00:00:00 2001 From: davidradchenko Date: Sun, 4 Dec 2022 15:04:19 +0200 Subject: [PATCH 30/30] fix acquire bin type --- .../spreedly/model/SpreedlyScaProviderRequest.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java b/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java index 4815338..6e5eb7c 100644 --- a/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java +++ b/src/main/java/cc/protea/spreedly/model/SpreedlyScaProviderRequest.java @@ -1,14 +1,14 @@ package cc.protea.spreedly.model; import javax.xml.bind.annotation.*; -import java.util.Date; @XmlRootElement(name = "sca_provider") @XmlAccessorType(XmlAccessType.FIELD) public class SpreedlyScaProviderRequest { @XmlElement(name = "merchant_profile_key") public String merchantProfileKey; - @XmlElement(name = "type") public String type ; + @XmlElement(name = "type") public String type; + @XmlElement(name = "sandbox") public boolean sandbox = false; @XmlElement(name = "visa") public SpreedlyVisaDetails visa; @XmlElement(name = "mastercard") @@ -32,6 +32,14 @@ public void setType(String type) { this.type = type; } + public boolean getSandbox() { + return sandbox; + } + + public void setSandbox(boolean sandbox) { + this.sandbox = sandbox; + } + public SpreedlyVisaDetails getVisa() { return visa; }