diff --git a/src/main/java/io/craftgate/adapter/PaymentAdapter.java b/src/main/java/io/craftgate/adapter/PaymentAdapter.java index 6f64c7a..cfded47 100644 --- a/src/main/java/io/craftgate/adapter/PaymentAdapter.java +++ b/src/main/java/io/craftgate/adapter/PaymentAdapter.java @@ -270,6 +270,12 @@ public InstantTransferBanksResponse retrieveActiveBanks() { InstantTransferBanksResponse.class); } + public InitMultiPaymentResponse initMultiPayment(InitMultiPaymentRequest initMultiPaymentRequest) { + String path = "/payment/v1/multi-payments/init"; + return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(initMultiPaymentRequest, path, requestOptions), + initMultiPaymentRequest, InitMultiPaymentResponse.class); + } + public MultiPaymentResponse retrieveMultiPayment(String token) { String path = "/payment/v1/multi-payments/" + token; return HttpClient.get(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions), MultiPaymentResponse.class); diff --git a/src/main/java/io/craftgate/model/WebhookEventType.java b/src/main/java/io/craftgate/model/WebhookEventType.java index a1c5f57..7ac4d57 100644 --- a/src/main/java/io/craftgate/model/WebhookEventType.java +++ b/src/main/java/io/craftgate/model/WebhookEventType.java @@ -14,5 +14,8 @@ public enum WebhookEventType { WALLET_TX_CREATED, BNPL_NOTIFICATION, BANK_ACCOUNT_TRACKING_RECORD, - BKM_EXPRESS_PAYMENT_NOTIFICATION + BKM_EXPRESS_PAYMENT_NOTIFICATION, + + MULTI_PAYMENT_COMPLETED, + MULTI_PAYMENT_EXPIRED } diff --git a/src/main/java/io/craftgate/request/InitMultiPaymentRequest.java b/src/main/java/io/craftgate/request/InitMultiPaymentRequest.java new file mode 100644 index 0000000..3fc3e1b --- /dev/null +++ b/src/main/java/io/craftgate/request/InitMultiPaymentRequest.java @@ -0,0 +1,51 @@ +package io.craftgate.request; + +import io.craftgate.model.*; +import io.craftgate.request.dto.PaymentItem; +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +@Data +@Builder +public class InitMultiPaymentRequest { + + private BigDecimal price; + private BigDecimal paidPrice; + private Currency currency; + private PaymentGroup paymentGroup; + private PaymentSource paymentSource; + private String conversationId; + private String externalId; + private String callbackUrl; + + @Builder.Default + protected PaymentPhase paymentPhase = PaymentPhase.AUTH; + private String paymentChannel; + + private List enabledPaymentMethods; + + private String cardUserKey; + + private Long buyerMemberId; + private boolean allowOnlyCreditCard; + private boolean forceAuthForNonCreditCards; + private boolean allowOnlyStoredCards; + private boolean allowInstallmentOnlyCommercialCards; + private boolean alwaysStoreCardAfterPayment; + private boolean disableStoreCard; + private boolean forceThreeDS; + + private String masterpassGsmNumber; + private String masterpassUserId; + private String apmUserIdentity; + + private List items; + + private Long ttl; + private Integer maximumSplitPaymentCount; + private Map additionalParams; +} diff --git a/src/main/java/io/craftgate/response/InitMultiPaymentResponse.java b/src/main/java/io/craftgate/response/InitMultiPaymentResponse.java new file mode 100644 index 0000000..ff5d7a4 --- /dev/null +++ b/src/main/java/io/craftgate/response/InitMultiPaymentResponse.java @@ -0,0 +1,13 @@ +package io.craftgate.response; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class InitMultiPaymentResponse { + + protected String token; + protected String pageUrl; + protected LocalDateTime tokenExpireDate; +} diff --git a/src/test/java/io/craftgate/sample/PaymentSample.java b/src/test/java/io/craftgate/sample/PaymentSample.java index 77cac63..1d1c493 100644 --- a/src/test/java/io/craftgate/sample/PaymentSample.java +++ b/src/test/java/io/craftgate/sample/PaymentSample.java @@ -2188,6 +2188,41 @@ void update_payment_transaction() { assertEquals(request.getSubMerchantMemberPrice().doubleValue(), response.getSubMerchantMemberPrice().doubleValue()); } + @Test + void init_multi_payment() { + List items = new ArrayList<>(); + items.add(PaymentItem.builder() + .name("item 1") + .externalId(UUID.randomUUID().toString()) + .price(BigDecimal.valueOf(30)) + .build()); + + items.add(PaymentItem.builder() + .name("item 2") + .externalId(UUID.randomUUID().toString()) + .price(BigDecimal.valueOf(70)) + .build()); + + InitMultiPaymentRequest request = InitMultiPaymentRequest.builder() + .price(BigDecimal.valueOf(100)) + .paidPrice(BigDecimal.valueOf(100)) + .buyerMemberId(7L) + .callbackUrl("https://www.your-website.com/craftgate-multi-payment-callback") + .currency(Currency.TRY) + .conversationId("456d1297-908e-4bd6-a13b-4be31a6e47d5") + .externalId("external_id-123456789") + .paymentGroup(PaymentGroup.LISTING_OR_SUBSCRIPTION) + .paymentPhase(PaymentPhase.AUTH) + .items(items) + .build(); + + InitMultiPaymentResponse response = craftgate.payment().initMultiPayment(request); + + assertNotNull(response); + assertNotNull(response.getPageUrl()); + assertNotNull(response.getToken()); + } + @Test void retrieve_multi_payment() { String token = "6d7e66b5-9b1c-4c1d-879a-2557b651096e";