From 502a543eabf9ccee2e9d4c51026b594de0e20b91 Mon Sep 17 00:00:00 2001 From: Silviana Ghita <> Date: Thu, 25 Jan 2024 22:08:59 +0200 Subject: [PATCH 1/4] Added get card validation endpoint --- .../java/com/mangopay/core/APIs/ApiBase.java | 1 + .../java/com/mangopay/core/APIs/CardApi.java | 8 ++++ .../core/APIs/implementation/CardApiImpl.java | 10 +++-- .../com/mangopay/entities/CardValidation.java | 44 +++++++++++++++++++ .../com/mangopay/core/mangopay.properties | 2 +- src/test/java/com/mangopay/core/BaseTest.java | 26 ++++++++++- .../com/mangopay/core/CardApiImplTest.java | 11 ++++- 7 files changed, 95 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/mangopay/core/APIs/ApiBase.java b/src/main/java/com/mangopay/core/APIs/ApiBase.java index 5d9183e7..6bf51440 100644 --- a/src/main/java/com/mangopay/core/APIs/ApiBase.java +++ b/src/main/java/com/mangopay/core/APIs/ApiBase.java @@ -69,6 +69,7 @@ protected MangoPayApi getRoot() { put("cards_get_transactions", new String[]{"/cards/%s/transactions", RequestType.GET.toString()}); put("card_get_preauthorization", new String[]{"/cards/%s/preauthorizations", RequestType.GET.toString()}); put("card_validate", new String[]{"/cards/%s/validation", RequestType.POST.toString()}); + put("get_card_validation", new String[]{"/cards/%s/validation/%s", RequestType.GET.toString()}); // pay ins URLs put("payins_paypal-web_create", new String[]{"/payins/paypal/web/", RequestType.POST.toString()}); diff --git a/src/main/java/com/mangopay/core/APIs/CardApi.java b/src/main/java/com/mangopay/core/APIs/CardApi.java index 04cf9bbe..48abad84 100644 --- a/src/main/java/com/mangopay/core/APIs/CardApi.java +++ b/src/main/java/com/mangopay/core/APIs/CardApi.java @@ -84,4 +84,12 @@ public interface CardApi { * @throws Exception */ CardValidation validate(String cardId, CardValidation cardValidation) throws Exception; + + /** + * Get card validation + * @param cardId, cardValidationId + * @return CardValidation + * @throws Exception + */ + CardValidation get_card_validation(String cardId, String cardValidationId) throws Exception; } diff --git a/src/main/java/com/mangopay/core/APIs/implementation/CardApiImpl.java b/src/main/java/com/mangopay/core/APIs/implementation/CardApiImpl.java index a4c8878d..d1ca9a5f 100644 --- a/src/main/java/com/mangopay/core/APIs/implementation/CardApiImpl.java +++ b/src/main/java/com/mangopay/core/APIs/implementation/CardApiImpl.java @@ -58,15 +58,19 @@ public List getTransactions(String cardId) throws Exception { public List getTransactions(String cardId, Pagination pagination, Sorting sorting) throws Exception { return this.getList(Transaction[].class, Transaction.class, "cards_get_transactions", pagination, cardId, sorting); } - + @Override public List getCardPreAuthorizations(String cardId) throws Exception { - return this.getList(CardPreAuthorization[].class, CardPreAuthorization.class, "card_get_preauthorization",null,cardId); + return this.getList(CardPreAuthorization[].class, CardPreAuthorization.class, "card_get_preauthorization", null, cardId); } @Override public CardValidation validate(String cardId, CardValidation cardValidation) throws Exception { - return this.createObject(CardValidation.class, null ,"card_validate", cardValidation, cardId); + return this.createObject(CardValidation.class, null, "card_validate", cardValidation, cardId); + } + + public CardValidation get_card_validation(String cardId, String cardValidationId) throws Exception { + return this.getObject(CardValidation.class, "get_card_validation", cardId, cardValidationId); } diff --git a/src/main/java/com/mangopay/entities/CardValidation.java b/src/main/java/com/mangopay/entities/CardValidation.java index 46ac4fde..e6a0e12c 100644 --- a/src/main/java/com/mangopay/entities/CardValidation.java +++ b/src/main/java/com/mangopay/entities/CardValidation.java @@ -77,6 +77,26 @@ public class CardValidation extends EntityBase { @SerializedName("ResultMessage") private String resultMessage; + /** + * Allowed values: VISA, MASTERCARD, CB, MAESTRO + * + * The card network to use, as chosen by the cardholder, in case of co-branded card products. + */ + @SerializedName("PreferredCardNetwork") + private String preferredCardNetwork; + + /** + * The date and time at which successful authorization occurred. If authorization failed, the value is null. + */ + @SerializedName("AuthorizationDate") + private long authorizationDate; + + /** + * Information of the card + */ + @SerializedName("CardInfo") + private CardInfo cardInfo; + public String getAuthorId() { return authorId; } @@ -109,6 +129,30 @@ public void setResultMessage(String resultMessage) { this.resultMessage = resultMessage; } + public String getPreferredCardNetwork() { + return preferredCardNetwork; + } + + public void setPreferredCardNetwork(String preferredCardNetwork) { + this.preferredCardNetwork = preferredCardNetwork; + } + + public long getAuthorizationDate() { + return authorizationDate; + } + + public void setAuthorizationDate(long authorizationDate) { + this.authorizationDate = authorizationDate; + } + + public CardInfo getCardInfo() { + return cardInfo; + } + + public void setCardInfo(CardInfo cardInfo) { + this.cardInfo = cardInfo; + } + public BrowserInfo getBrowserInfo() { return browserInfo; } diff --git a/src/main/resources/com/mangopay/core/mangopay.properties b/src/main/resources/com/mangopay/core/mangopay.properties index 522351f6..537f3a30 100644 --- a/src/main/resources/com/mangopay/core/mangopay.properties +++ b/src/main/resources/com/mangopay/core/mangopay.properties @@ -1,2 +1,2 @@ -#Tue Dec 05 17:19:57 EET 2023 +#Thu Jan 25 22:05:17 EET 2024 version=2.34.0 diff --git a/src/test/java/com/mangopay/core/BaseTest.java b/src/test/java/com/mangopay/core/BaseTest.java index 82ff5af8..27a3d8f7 100644 --- a/src/test/java/com/mangopay/core/BaseTest.java +++ b/src/test/java/com/mangopay/core/BaseTest.java @@ -1179,7 +1179,7 @@ protected CardPreAuthorization getPreAuthorization() throws Exception { return cardPreAuthorization; } - protected CardValidation getJohnsCardValidation() throws Exception { + protected CardValidation createJohnsCardValidation() throws Exception { UserNatural user = this.getJohn(); CardRegistration cardRegistration = new CardRegistration(); @@ -1202,6 +1202,30 @@ protected CardValidation getJohnsCardValidation() throws Exception { return this.api.getCardApi().validate(cardRegistration.getCardId(), cardValidation); } + protected CardValidation getJohnsCardValidation() throws Exception { + + UserNatural user = this.getJohn(); + CardRegistration cardRegistration = new CardRegistration(); + cardRegistration.setUserId(user.getId()); + cardRegistration.setCurrency(CurrencyIso.EUR); + CardRegistration newCardRegistration = this.api.getCardRegistrationApi().create(cardRegistration); + + String registrationData = this.getPaylineCorrectRegistartionData(newCardRegistration); + newCardRegistration.setRegistrationData(registrationData); + cardRegistration = this.api.getCardRegistrationApi().update(newCardRegistration); + + CardValidation cardValidation = new CardValidation(); + + cardValidation.setAuthorId(user.getId()); + cardValidation.setSecureModeReturnUrl("http://test.com"); + + cardValidation.setBrowserInfo(getNewBrowserInfo()); + cardValidation.setIpAddress("2001:0620:0000:0000:0211:24FF:FE80:C12C"); + + CardValidation cardValidationResponse = this.api.getCardApi().validate(cardRegistration.getCardId(), cardValidation); + return this.api.getCardApi().get_card_validation(cardRegistration.getCardId(), cardValidationResponse.getId()); + } + protected KycDocument getJohnsKycDocument() throws Exception { if (BaseTest.JOHNS_KYC_DOCUMENT == null) { String johnsId = this.getJohn().getId(); diff --git a/src/test/java/com/mangopay/core/CardApiImplTest.java b/src/test/java/com/mangopay/core/CardApiImplTest.java index ce847502..e32dd9ec 100644 --- a/src/test/java/com/mangopay/core/CardApiImplTest.java +++ b/src/test/java/com/mangopay/core/CardApiImplTest.java @@ -52,9 +52,16 @@ public void getCardPreAuthorizations() throws Exception { @Test public void validateCard() throws Exception{ - CardApi cardApi = api.getCardApi(); - //create card validation + CardValidation cardValidation = createJohnsCardValidation(); + + assertNotNull(cardValidation); + assertNotNull(cardValidation.getId()); + assertEquals(TransactionType.CARD_VALIDATION, cardValidation.getType()); + } + + @Test + public void getCardValidation() throws Exception{ CardValidation cardValidation = getJohnsCardValidation(); assertNotNull(cardValidation); From fc00f0ac6779aceb845083d7425f4b92ee18b27a Mon Sep 17 00:00:00 2001 From: Silviana Ghita <> Date: Thu, 1 Feb 2024 10:49:22 +0200 Subject: [PATCH 2/4] Minor fix --- src/main/java/com/mangopay/entities/CardValidation.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/mangopay/entities/CardValidation.java b/src/main/java/com/mangopay/entities/CardValidation.java index e6a0e12c..c4cc8371 100644 --- a/src/main/java/com/mangopay/entities/CardValidation.java +++ b/src/main/java/com/mangopay/entities/CardValidation.java @@ -89,7 +89,7 @@ public class CardValidation extends EntityBase { * The date and time at which successful authorization occurred. If authorization failed, the value is null. */ @SerializedName("AuthorizationDate") - private long authorizationDate; + private Long authorizationDate; /** * Information of the card @@ -137,11 +137,11 @@ public void setPreferredCardNetwork(String preferredCardNetwork) { this.preferredCardNetwork = preferredCardNetwork; } - public long getAuthorizationDate() { + public Long getAuthorizationDate() { return authorizationDate; } - public void setAuthorizationDate(long authorizationDate) { + public void setAuthorizationDate(Long authorizationDate) { this.authorizationDate = authorizationDate; } From 5cc5b646e3951daeb8cb3d5d7f4966906182d283 Mon Sep 17 00:00:00 2001 From: Iulian Masar Date: Thu, 1 Feb 2024 10:58:02 +0200 Subject: [PATCH 3/4] updated setters in MangoPayApi --- src/main/java/com/mangopay/MangoPayApi.java | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/mangopay/MangoPayApi.java b/src/main/java/com/mangopay/MangoPayApi.java index 8d059cd2..5164ff9b 100644 --- a/src/main/java/com/mangopay/MangoPayApi.java +++ b/src/main/java/com/mangopay/MangoPayApi.java @@ -312,7 +312,7 @@ public CardPreAuthorizationApi getCardPreAuthorizationApi() { return cardPreAuthorizations; } - private void setCardPreAuthorizationApi(CardPreAuthorizationApi cardPreAuthorizations) { + public void setCardPreAuthorizationApi(CardPreAuthorizationApi cardPreAuthorizations) { this.cardPreAuthorizations = cardPreAuthorizations; } @@ -320,7 +320,7 @@ public CardApi getCardApi() { return cards; } - private void setCardApi(CardApi cards) { + public void setCardApi(CardApi cards) { this.cards = cards; } @@ -328,7 +328,7 @@ public RefundApi getRefundApi() { return refunds; } - private void setRefundApi(RefundApi refunds) { + public void setRefundApi(RefundApi refunds) { this.refunds = refunds; } @@ -336,7 +336,7 @@ public EventApi getEventApi() { return events; } - private void setEventApi(EventApi events) { + public void setEventApi(EventApi events) { this.events = events; } @@ -344,7 +344,7 @@ public HookApi getHookApi() { return hooks; } - private void setHookApi(HookApi hooks) { + public void setHookApi(HookApi hooks) { this.hooks = hooks; } @@ -352,7 +352,7 @@ public KycDocumentApi getKycDocumentApi() { return kycDocuments; } - private void setKycDocumentApi(KycDocumentApi kycDocuments) { + public void setKycDocumentApi(KycDocumentApi kycDocuments) { this.kycDocuments = kycDocuments; } @@ -360,7 +360,7 @@ public DisputeApi getDisputeApi() { return disputes; } - private void setDisputeApi(DisputeApi disputes) { + public void setDisputeApi(DisputeApi disputes) { this.disputes = disputes; } @@ -368,7 +368,7 @@ public IdempotencyApi getIdempotencyApi() { return idempotency; } - private void setIdempotencyApi(IdempotencyApi idempotency) { + public void setIdempotencyApi(IdempotencyApi idempotency) { this.idempotency = idempotency; } @@ -376,7 +376,7 @@ public MandateApi getMandateApi() { return mandates; } - private void setMandateApi(MandateApi mandates) { + public void setMandateApi(MandateApi mandates) { this.mandates = mandates; } @@ -384,7 +384,7 @@ public ReportApi getReportApi() { return reports; } - private void setReportApi(ReportApi reports) { + public void setReportApi(ReportApi reports) { this.reports = reports; } @@ -392,7 +392,7 @@ public BankingAliasApi getBankingAliases() { return bankingAliases; } - private void setBankingAliasApi(BankingAliasApi bankingAliases) { + public void setBankingAliasApi(BankingAliasApi bankingAliases) { this.bankingAliases = bankingAliases; } @@ -400,7 +400,7 @@ public UboDeclarationApi getUboDeclarationApi() { return uboDeclarations; } - private void setUboDeclarationApi(UboDeclarationApi uboDeclarations) { + public void setUboDeclarationApi(UboDeclarationApi uboDeclarations) { this.uboDeclarations = uboDeclarations; } From ad67b216e4744fccf78c60bdfb654844915eb325 Mon Sep 17 00:00:00 2001 From: Iulian Masar Date: Tue, 6 Feb 2024 10:51:50 +0200 Subject: [PATCH 4/4] fixed tests --- src/test/java/com/mangopay/core/BaseTest.java | 19 +++---------------- .../com/mangopay/core/PayInApiImplTest.java | 4 +++- .../com/mangopay/core/WalletApiImplTest.java | 4 ++++ 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/test/java/com/mangopay/core/BaseTest.java b/src/test/java/com/mangopay/core/BaseTest.java index 27a3d8f7..ad7441fd 100644 --- a/src/test/java/com/mangopay/core/BaseTest.java +++ b/src/test/java/com/mangopay/core/BaseTest.java @@ -348,7 +348,7 @@ protected Map getJohnsWalletWithMoney3DSecure(int amount) throws cardRegistration.setCurrency(CurrencyIso.EUR); cardRegistration = this.api.getCardRegistrationApi().create(cardRegistration); - cardRegistration.setRegistrationData(this.getPaylineCorrectRegistartionData3DSecure(cardRegistration)); + cardRegistration.setRegistrationData(this.getPaylineCorrectRegistartionData(cardRegistration)); cardRegistration = this.api.getCardRegistrationApi().update(cardRegistration); Card card = this.api.getCardApi().get(cardRegistration.getCardId()); @@ -1133,7 +1133,7 @@ protected CardRegistration getDepositCardRegistration() throws Exception { cardRegistration.setCurrency(CurrencyIso.EUR); CardRegistration newCardRegistration = this.api.getCardRegistrationApi().create(cardRegistration); - String registrationData = this.getPaylineCorrectRegistartionDataForDeposit(newCardRegistration); + String registrationData = this.getPaylineCorrectRegistartionData(newCardRegistration); newCardRegistration.setRegistrationData(registrationData); return this.api.getCardRegistrationApi().update(newCardRegistration); } @@ -1242,19 +1242,6 @@ protected KycDocument getNewKycDocument() throws Exception { return getJohnsKycDocument(); } - /** - * Gets registration data from Payline service 3DSecure. - * - * @param cardRegistration - * @return Registration data. - */ - protected String getPaylineCorrectRegistartionData3DSecure(CardRegistration cardRegistration) throws MalformedURLException, IOException, Exception { - return getPaylineCorrectRegistartionData3DSecureForCardNumber(cardRegistration, "4970105191923460"); - } - - protected String getPaylineCorrectRegistartionDataForDeposit(CardRegistration cardRegistration) throws MalformedURLException, IOException, Exception { - return getPaylineCorrectRegistartionData3DSecureForCardNumber(cardRegistration, "4970105181818183"); - } protected String getPaylineCorrectRegistartionData3DSecureForCardNumber(CardRegistration cardRegistration, String cardNumber) throws MalformedURLException, IOException, Exception { @@ -1308,7 +1295,7 @@ protected String getPaylineCorrectRegistartionData3DSecureForCardNumber(CardRegi * @return Registration data. */ protected String getPaylineCorrectRegistartionData(CardRegistration cardRegistration) throws MalformedURLException, IOException, Exception { - return getPaylineCorrectRegistartionData3DSecureForCardNumber(cardRegistration, "4970105191923460"); + return getPaylineCorrectRegistartionData3DSecureForCardNumber(cardRegistration, "4970107111111119"); } protected Hook getJohnsHook() throws Exception { diff --git a/src/test/java/com/mangopay/core/PayInApiImplTest.java b/src/test/java/com/mangopay/core/PayInApiImplTest.java index 9e40972b..fe4237a2 100644 --- a/src/test/java/com/mangopay/core/PayInApiImplTest.java +++ b/src/test/java/com/mangopay/core/PayInApiImplTest.java @@ -261,6 +261,9 @@ public void createPreAuthorizedDirect() { PayIn createPayIn = this.api.getPayInApi().create(payIn); + // wait 2 seconds for the transactions to be created in the API + Thread.sleep(2000); + List preAuthTransactions = this.api.getCardPreAuthorizationApi().getTransactions(cardPreAuthorization.getId(), new Pagination(1, 1)); assertTrue(!"".equals(createPayIn.getId())); @@ -462,7 +465,6 @@ public void createDirectDebitWeb() { assertTrue(createPayIn.getFees().getCurrency() == CurrencyIso.EUR); assertNotNull(((PayInExecutionDetailsWeb) createPayIn.getExecutionDetails()).getReturnUrl()); assertNotNull(((PayInExecutionDetailsWeb) createPayIn.getExecutionDetails()).getRedirectUrl()); - assertNotNull(((PayInExecutionDetailsWeb) createPayIn.getExecutionDetails()).getTemplateUrl()); } catch (Exception ex) { fail(ex.getMessage()); diff --git a/src/test/java/com/mangopay/core/WalletApiImplTest.java b/src/test/java/com/mangopay/core/WalletApiImplTest.java index b8cb716c..55d45df4 100644 --- a/src/test/java/com/mangopay/core/WalletApiImplTest.java +++ b/src/test/java/com/mangopay/core/WalletApiImplTest.java @@ -57,6 +57,10 @@ public void getWalletTransactions() throws Exception { Pagination pagination = new Pagination(1, 1); FilterTransactions filter = new FilterTransactions(); filter.setType(TransactionType.PAYIN); + + // wait 2 seconds for the transactions to be created in the API + Thread.sleep(2); + List transactions = this.api.getWalletApi().getTransactions(wallet.getId(), pagination, filter); assertTrue(transactions.size() == 1);