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
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,10 @@ public PaymentResponse retrievePaymentByToken(String token) {
String path = "/payment/v1/bkm-express/" + token;
return HttpClient.get(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions), PaymentResponse.class);
}

public BkmExpressGenerateTokenResponse generateToken(BkmExpressGenerateTokenRequest bkmExpressGenerateTokenRequest) {
String path = "/payment/v2/bkm-express/generate-token";
return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(bkmExpressGenerateTokenRequest, path, requestOptions),
bkmExpressGenerateTokenRequest, BkmExpressGenerateTokenResponse.class);
}
}
1 change: 1 addition & 0 deletions src/main/java/io/craftgate/model/TokenizedCardType.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@

public enum TokenizedCardType {
APPLE_PAY,
BKM_EXPRESS
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.craftgate.request;

import io.craftgate.request.common.BaseRequest;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.SuperBuilder;

@SuperBuilder
@Data
@Builder
public class BkmExpressGenerateTokenRequest extends BaseRequest {

private String gsmNumber;
private String userId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ public class InitCheckoutPaymentRequest extends BaseRequest {
protected String masterpassGsmNumber;
protected String masterpassUserId;

protected String bexGsmNumber;
protected String bexUserId;

protected String cardUserKey;

protected Long buyerMemberId;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package io.craftgate.response;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class BkmExpressGenerateTokenResponse {

private String token;
}
104 changes: 104 additions & 0 deletions src/test/java/io/craftgate/sample/BkmExpressSample.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,20 @@
import io.craftgate.model.Currency;
import io.craftgate.model.PaymentGroup;
import io.craftgate.model.PaymentPhase;
import io.craftgate.model.PaymentProvider;
import io.craftgate.model.TokenizedCardType;
import io.craftgate.request.*;
import io.craftgate.request.dto.Card;
import io.craftgate.request.dto.PaymentItem;
import io.craftgate.request.dto.TokenizedCard;
import io.craftgate.response.*;
import org.junit.jupiter.api.Test;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import static org.junit.jupiter.api.Assertions.*;
Expand Down Expand Up @@ -105,4 +111,102 @@ void retrieve_bkm_express_payment_by_token() {
PaymentResponse response = craftgate.bkmExpressPaymentAdapter().retrievePaymentByToken(bkmExpressPaymentToken);
assertNotNull(response);
}

@Test
void generate_bkm_express_token() {
BkmExpressGenerateTokenRequest request = BkmExpressGenerateTokenRequest.builder()
.userId("userId")
.gsmNumber("5551111111")
.build();

BkmExpressGenerateTokenResponse response = craftgate.bkmExpressPaymentAdapter().generateToken(request);
assertNotNull(response.getToken());
}

@Test
void create_payment_with_bkm_express_tokenized_card() {
List<PaymentItem> items = new ArrayList<>();

items.add(PaymentItem.builder()
.name("item 1")
.externalId(UUID.randomUUID().toString())
.price(BigDecimal.valueOf(0.6))
.build());

items.add(PaymentItem.builder()
.name("item 2")
.externalId(UUID.randomUUID().toString())
.price(BigDecimal.valueOf(0.4))
.build());

CreatePaymentRequest request = CreatePaymentRequest.builder()
.price(BigDecimal.ONE)
.paidPrice(BigDecimal.ONE)
.walletPrice(BigDecimal.ZERO)
.installment(1)
.currency(Currency.TRY)
.conversationId("456d1297-908e-4bd6-a13b-4be31a6e47d5")
.paymentGroup(PaymentGroup.LISTING_OR_SUBSCRIPTION)
.paymentPhase(PaymentPhase.AUTH)
.card(Card.builder()
.tokenizedCard(bkmExpressTokenizedCard())
.build())
.items(items)
.build();

PaymentResponse response = craftgate.payment().createPayment(request);
assertNotNull(response.getId());
assertEquals(PaymentProvider.BKM_EXPRESS, response.getPaymentProvider());
}

@Test
void init_3DS_payment_with_bkm_express_tokenized_card() {
List<PaymentItem> items = new ArrayList<>();

items.add(PaymentItem.builder()
.name("item 1")
.externalId(UUID.randomUUID().toString())
.price(BigDecimal.valueOf(0.6))
.build());

items.add(PaymentItem.builder()
.name("item 2")
.externalId(UUID.randomUUID().toString())
.price(BigDecimal.valueOf(0.4))
.build());

InitThreeDSPaymentRequest request = InitThreeDSPaymentRequest.builder()
.price(BigDecimal.ONE)
.paidPrice(BigDecimal.ONE)
.walletPrice(BigDecimal.ZERO)
.installment(1)
.currency(Currency.TRY)
.callbackUrl("https://www.your-website.com/craftgate-3DSecure-callback")
.conversationId("456d1297-908e-4bd6-a13b-4be31a6e47d5")
.paymentGroup(PaymentGroup.LISTING_OR_SUBSCRIPTION)
.paymentPhase(PaymentPhase.AUTH)
.card(Card.builder()
.tokenizedCard(bkmExpressTokenizedCard())
.build())
.items(items)
.build();

InitThreeDSPaymentResponse response = craftgate.payment().init3DSPayment(request);
assertNotNull(response.getPaymentId());
assertNotNull(response.getHtmlContent());
}

private TokenizedCard bkmExpressTokenizedCard() {
// cardId is returned by the BKM Express client SDK after the buyer selects a card;
// gsmNumber and userId must match the values sent to generateToken.
Map<String, Object> data = new HashMap<>();
data.put("cardId", "bkm-express-card-id");
data.put("gsmNumber", "5551111111");
data.put("userId", "userId");

return TokenizedCard.builder()
.type(TokenizedCardType.BKM_EXPRESS)
.data(data)
.build();
}
}
Loading