From b284fb8c014d6bf1db65209a6466d2eb93c33c67 Mon Sep 17 00:00:00 2001 From: Marcin Bawtrol Date: Fri, 21 Oct 2022 12:23:43 +0200 Subject: [PATCH 1/3] Initiate payment request usecase based --- README.md | 70 ++++++++++++++++-- .../request/InitiateBankPaymentRequest.kt | 31 ++++++++ .../request/InitiateCardPaymentRequest.kt | 32 ++++++++ .../request/InitiateHybridPaymentRequest.kt | 33 +++++++++ .../payment/request/InitiatePaymentRequest.kt | 74 +++++++++++++++---- 5 files changed, 220 insertions(+), 20 deletions(-) create mode 100644 src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt create mode 100644 src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt create mode 100644 src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt diff --git a/README.md b/README.md index ec9676e..5952c02 100644 --- a/README.md +++ b/README.md @@ -13,20 +13,23 @@ JVM client implementing [kevin. platform API v0.3](https://api-reference.kevin.e ## Installation -Package and installation instructions are available at the [Maven Central Repository](https://maven-badges.herokuapp.com/maven-central/eu.kevin/kevin-jvm) +Package and installation instructions are available at +the [Maven Central Repository](https://maven-badges.herokuapp.com/maven-central/eu.kevin/kevin-jvm) ### Maven + ``` eu.kevin kevin-jvm - 0.2.7 + 0.2.8 ``` ### Gradle + ``` -implementation 'eu.kevin:kevin-jvm:0.2.7' +implementation 'eu.kevin:kevin-jvm:0.2.8' ``` ## Usage Examples @@ -49,14 +52,17 @@ val client = Client( ``` ### Call an API method + +#### Bank payment example: + ```kotlin -val request = InitiatePaymentRequest( +val request = InitiateBankPaymentRequest( redirectUrl = "https://yourapp.com/callback", amount = BigDecimal("12.34"), currencyCode = "EUR", description = "My payment", identifier = UserIdentifier(email = "jsmith@example.com"), - bankPaymentMethod = BankPaymentMethod( + mandatoryBankPaymentMethod = BankPaymentMethod( endToEndId = "123", creditorName = "John Doe", informationStructured = InformationStructured( @@ -69,6 +75,59 @@ val request = InitiatePaymentRequest( ) ) ) +``` + +#### Card payment example: +```kotlin +val request = InitiateCardPaymentRequest( + redirectUrl = "https://yourapp.com/callback", + amount = BigDecimal("12.34"), + currencyCode = "EUR", + description = "My payment", + identifier = UserIdentifier(email = "jsmith@example.com"), + mandatoryBankPaymentMethod = BankPaymentMethod( + endToEndId = "123", + creditorName = "John Doe", + informationStructured = InformationStructured( + reference = "00220055", + referenceType = "SCOR" + ), + requestedExecutionDate = LocalDate.of(2021, 3, 8), + creditorAccount = Account( + iban = "LT144010051005081586" + ) + ), + mandatoryCardPaymentMethod = CardPaymentMethod() +) +``` + +#### Hybrid payment example: +```kotlin +val request = InitiateHybridPaymentRequest( + redirectUrl = "https://yourapp.com/callback", + amount = BigDecimal("12.34"), + currencyCode = "EUR", + description = "My payment", + identifier = UserIdentifier(email = "jsmith@example.com"), + mandatoryBankPaymentMethod = BankPaymentMethod( + endToEndId = "123", + creditorName = "John Doe", + informationStructured = InformationStructured( + reference = "00220055", + referenceType = "SCOR" + ), + requestedExecutionDate = LocalDate.of(2021, 3, 8), + creditorAccount = Account( + iban = "LT144010051005081586" + ) + ), + mandatoryCardPaymentMethod = CardPaymentMethod() +) +``` + +### Handle the response + +```kotlin val response = try { client.paymentClient.initiatePayment(request) @@ -79,6 +138,7 @@ val response = try { ``` ### Parse the request body of a webhook response + ```kotlin import eu.kevin.api.services.Parser diff --git a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt new file mode 100644 index 0000000..eafd64f --- /dev/null +++ b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt @@ -0,0 +1,31 @@ +package eu.kevin.api.models.payment.payment.request + +import java.math.BigDecimal + +data class InitiateBankPaymentRequest( + override val redirectUrl: String, + override val amount: BigDecimal, + override val currencyCode: String, + override val description: String, + val mandatoryBankPaymentMethod: BankPaymentMethod, + override var identifier: UserIdentifier? = null, + override var accessToken: String? = null, + override var bankId: String? = null, + override var redirectPreferred: Boolean? = null, + override var webhookUrl: String? = null, + override var lang: String? = null +): InitiatePaymentRequest( + redirectUrl, + amount, + currencyCode, + description, + bankPaymentMethod = mandatoryBankPaymentMethod, + cardPaymentMethod = null, + identifier, + accessToken, + bankId, + redirectPreferred, + paymentMethodPreferred = PaymentMethod.BANK, + webhookUrl, + lang +) \ No newline at end of file diff --git a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt new file mode 100644 index 0000000..56cea13 --- /dev/null +++ b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt @@ -0,0 +1,32 @@ +package eu.kevin.api.models.payment.payment.request + +import java.math.BigDecimal + +data class InitiateCardPaymentRequest( + override val redirectUrl: String, + override val amount: BigDecimal, + override val currencyCode: String, + override val description: String, + val mandatoryBankPaymentMethod: BankPaymentMethod, + val mandatoryCardPaymentMethod: CardPaymentMethod, + override var identifier: UserIdentifier? = null, + override var accessToken: String? = null, + override var bankId: String? = null, + override var redirectPreferred: Boolean? = null, + override var webhookUrl: String? = null, + override var lang: String? = null +): InitiatePaymentRequest( + redirectUrl, + amount, + currencyCode, + description, + bankPaymentMethod = mandatoryBankPaymentMethod, + cardPaymentMethod = mandatoryCardPaymentMethod, + identifier, + accessToken, + bankId, + redirectPreferred, + paymentMethodPreferred = PaymentMethod.CARD, + webhookUrl, + lang +) \ No newline at end of file diff --git a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt new file mode 100644 index 0000000..c18a0e4 --- /dev/null +++ b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt @@ -0,0 +1,33 @@ +package eu.kevin.api.models.payment.payment.request + +import java.math.BigDecimal + +data class InitiateHybridPaymentRequest( + override val redirectUrl: String, + override val amount: BigDecimal, + override val currencyCode: String, + override val description: String, + val mandatoryBankPaymentMethod: BankPaymentMethod, + val mandatoryCardPaymentMethod: CardPaymentMethod, + override var identifier: UserIdentifier? = null, + override var accessToken: String? = null, + override var bankId: String? = null, + override var redirectPreferred: Boolean? = null, + override var paymentMethodPreferred: PaymentMethod? = null, + override var webhookUrl: String? = null, + override var lang: String? = null +): InitiatePaymentRequest( + redirectUrl, + amount, + currencyCode, + description, + bankPaymentMethod = mandatoryBankPaymentMethod, + cardPaymentMethod = mandatoryCardPaymentMethod, + identifier, + accessToken, + bankId, + redirectPreferred, + paymentMethodPreferred, + webhookUrl, + lang +) \ No newline at end of file diff --git a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiatePaymentRequest.kt b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiatePaymentRequest.kt index 8f7410c..2cc21b8 100644 --- a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiatePaymentRequest.kt +++ b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiatePaymentRequest.kt @@ -2,18 +2,62 @@ package eu.kevin.api.models.payment.payment.request import java.math.BigDecimal -data class InitiatePaymentRequest @JvmOverloads constructor( - val redirectUrl: String, - val amount: BigDecimal, - val currencyCode: String, - val description: String, - var bankPaymentMethod: BankPaymentMethod? = null, - var cardPaymentMethod: CardPaymentMethod? = null, - var identifier: UserIdentifier? = null, - var accessToken: String? = null, - var bankId: String? = null, - var redirectPreferred: Boolean? = null, - var paymentMethodPreferred: PaymentMethod? = null, - var webhookUrl: String? = null, - var lang: String? = null -) +open class InitiatePaymentRequest @JvmOverloads constructor( + open val redirectUrl: String, + open val amount: BigDecimal, + open val currencyCode: String, + open val description: String, + open var bankPaymentMethod: BankPaymentMethod? = null, + open var cardPaymentMethod: CardPaymentMethod? = null, + open var identifier: UserIdentifier? = null, + open var accessToken: String? = null, + open var bankId: String? = null, + open var redirectPreferred: Boolean? = null, + open var paymentMethodPreferred: PaymentMethod? = null, + open var webhookUrl: String? = null, + open var lang: String? = null +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as InitiatePaymentRequest + + if (redirectUrl != other.redirectUrl) return false + if (amount != other.amount) return false + if (currencyCode != other.currencyCode) return false + if (description != other.description) return false + if (bankPaymentMethod != other.bankPaymentMethod) return false + if (cardPaymentMethod != other.cardPaymentMethod) return false + if (identifier != other.identifier) return false + if (accessToken != other.accessToken) return false + if (bankId != other.bankId) return false + if (redirectPreferred != other.redirectPreferred) return false + if (paymentMethodPreferred != other.paymentMethodPreferred) return false + if (webhookUrl != other.webhookUrl) return false + if (lang != other.lang) return false + + return true + } + + override fun hashCode(): Int { + var result = redirectUrl.hashCode() + result = 31 * result + amount.hashCode() + result = 31 * result + currencyCode.hashCode() + result = 31 * result + description.hashCode() + result = 31 * result + (bankPaymentMethod?.hashCode() ?: 0) + result = 31 * result + (cardPaymentMethod?.hashCode() ?: 0) + result = 31 * result + (identifier?.hashCode() ?: 0) + result = 31 * result + (accessToken?.hashCode() ?: 0) + result = 31 * result + (bankId?.hashCode() ?: 0) + result = 31 * result + (redirectPreferred?.hashCode() ?: 0) + result = 31 * result + (paymentMethodPreferred?.hashCode() ?: 0) + result = 31 * result + (webhookUrl?.hashCode() ?: 0) + result = 31 * result + (lang?.hashCode() ?: 0) + return result + } + + override fun toString(): String { + return "InitiatePaymentRequest(redirectUrl='$redirectUrl', amount=$amount, currencyCode='$currencyCode', description='$description', bankPaymentMethod=$bankPaymentMethod, cardPaymentMethod=$cardPaymentMethod, identifier=$identifier, accessToken=$accessToken, bankId=$bankId, redirectPreferred=$redirectPreferred, paymentMethodPreferred=$paymentMethodPreferred, webhookUrl=$webhookUrl, lang=$lang)" + } +} From a61fe63e52570d316a0c527f080148769a98cc3e Mon Sep 17 00:00:00 2001 From: Marcin Bawtrol Date: Fri, 21 Oct 2022 12:35:31 +0200 Subject: [PATCH 2/3] Fixed formatting --- .../payment/payment/request/InitiateBankPaymentRequest.kt | 2 +- .../payment/payment/request/InitiateCardPaymentRequest.kt | 2 +- .../payment/payment/request/InitiateHybridPaymentRequest.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt index eafd64f..bb2c232 100644 --- a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt +++ b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt @@ -14,7 +14,7 @@ data class InitiateBankPaymentRequest( override var redirectPreferred: Boolean? = null, override var webhookUrl: String? = null, override var lang: String? = null -): InitiatePaymentRequest( +) : InitiatePaymentRequest( redirectUrl, amount, currencyCode, diff --git a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt index 56cea13..e66250c 100644 --- a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt +++ b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt @@ -15,7 +15,7 @@ data class InitiateCardPaymentRequest( override var redirectPreferred: Boolean? = null, override var webhookUrl: String? = null, override var lang: String? = null -): InitiatePaymentRequest( +) : InitiatePaymentRequest( redirectUrl, amount, currencyCode, diff --git a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt index c18a0e4..2ca34b6 100644 --- a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt +++ b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt @@ -16,7 +16,7 @@ data class InitiateHybridPaymentRequest( override var paymentMethodPreferred: PaymentMethod? = null, override var webhookUrl: String? = null, override var lang: String? = null -): InitiatePaymentRequest( +) : InitiatePaymentRequest( redirectUrl, amount, currencyCode, From 7d62e993cd21d2100033f6c09fe5dee487c04bfe Mon Sep 17 00:00:00 2001 From: Marcin Bawtrol Date: Fri, 21 Oct 2022 12:36:51 +0200 Subject: [PATCH 3/3] Added @JvmOverloads --- .../payment/payment/request/InitiateBankPaymentRequest.kt | 4 ++-- .../payment/payment/request/InitiateCardPaymentRequest.kt | 4 ++-- .../payment/payment/request/InitiateHybridPaymentRequest.kt | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt index bb2c232..4b100c0 100644 --- a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt +++ b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateBankPaymentRequest.kt @@ -2,7 +2,7 @@ package eu.kevin.api.models.payment.payment.request import java.math.BigDecimal -data class InitiateBankPaymentRequest( +data class InitiateBankPaymentRequest @JvmOverloads constructor( override val redirectUrl: String, override val amount: BigDecimal, override val currencyCode: String, @@ -28,4 +28,4 @@ data class InitiateBankPaymentRequest( paymentMethodPreferred = PaymentMethod.BANK, webhookUrl, lang -) \ No newline at end of file +) diff --git a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt index e66250c..47cf991 100644 --- a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt +++ b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateCardPaymentRequest.kt @@ -2,7 +2,7 @@ package eu.kevin.api.models.payment.payment.request import java.math.BigDecimal -data class InitiateCardPaymentRequest( +data class InitiateCardPaymentRequest @JvmOverloads constructor( override val redirectUrl: String, override val amount: BigDecimal, override val currencyCode: String, @@ -29,4 +29,4 @@ data class InitiateCardPaymentRequest( paymentMethodPreferred = PaymentMethod.CARD, webhookUrl, lang -) \ No newline at end of file +) diff --git a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt index 2ca34b6..ade46cd 100644 --- a/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt +++ b/src/main/kotlin/eu/kevin/api/models/payment/payment/request/InitiateHybridPaymentRequest.kt @@ -2,7 +2,7 @@ package eu.kevin.api.models.payment.payment.request import java.math.BigDecimal -data class InitiateHybridPaymentRequest( +data class InitiateHybridPaymentRequest @JvmOverloads constructor( override val redirectUrl: String, override val amount: BigDecimal, override val currencyCode: String, @@ -30,4 +30,4 @@ data class InitiateHybridPaymentRequest( paymentMethodPreferred, webhookUrl, lang -) \ No newline at end of file +)