Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/main/java/io/craftgate/adapter/PaymentAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/io/craftgate/model/WebhookEventType.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
51 changes: 51 additions & 0 deletions src/main/java/io/craftgate/request/InitMultiPaymentRequest.java
Original file line number Diff line number Diff line change
@@ -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<PaymentMethod> 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<PaymentItem> items;

private Long ttl;
private Integer maximumSplitPaymentCount;
private Map<String, Object> additionalParams;
}
13 changes: 13 additions & 0 deletions src/main/java/io/craftgate/response/InitMultiPaymentResponse.java
Original file line number Diff line number Diff line change
@@ -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;
}
35 changes: 35 additions & 0 deletions src/test/java/io/craftgate/sample/PaymentSample.java
Original file line number Diff line number Diff line change
Expand Up @@ -2188,6 +2188,41 @@ void update_payment_transaction() {
assertEquals(request.getSubMerchantMemberPrice().doubleValue(), response.getSubMerchantMemberPrice().doubleValue());
}

@Test
void init_multi_payment() {
List<PaymentItem> 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";
Expand Down