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
@@ -1,9 +1,13 @@
package io.craftgate.adapter;

import io.craftgate.net.HttpClient;
import io.craftgate.request.MealVoucherCardTokenizationCompleteRequest;
import io.craftgate.request.MealVoucherCardTokenizationInitRequest;
import io.craftgate.request.MealVoucherCardTokenizationRegenerateRequest;
import io.craftgate.request.common.RequestOptions;
import io.craftgate.response.MealVoucherCardTokenizationCompleteResponse;
import io.craftgate.response.MealVoucherCardTokenizationInitResponse;
import io.craftgate.response.MealVoucherCardTokenizationRegenerateResponse;

public class MealVoucherCardTokenizationAdapter extends BaseAdapter {

Expand All @@ -16,4 +20,16 @@ public MealVoucherCardTokenizationInitResponse cardTokenizationInit(MealVoucherC
return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(mealVoucherCardTokenizationInitRequest, path, requestOptions),
mealVoucherCardTokenizationInitRequest, MealVoucherCardTokenizationInitResponse.class);
}

public MealVoucherCardTokenizationRegenerateResponse cardTokenizationRegenerate(String sessionId, MealVoucherCardTokenizationRegenerateRequest mealVoucherCardTokenizationRegenerateRequest) {
String path = "/payment/v1/meal-voucher/card-tokenizations/" + sessionId + "/regenerate";
return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(mealVoucherCardTokenizationRegenerateRequest, path, requestOptions),
mealVoucherCardTokenizationRegenerateRequest, MealVoucherCardTokenizationRegenerateResponse.class);
}

public MealVoucherCardTokenizationCompleteResponse cardTokenizationComplete(String sessionId, MealVoucherCardTokenizationCompleteRequest request) {
String path = "/payment/v1/meal-voucher/card-tokenizations/" + sessionId + "/complete";
return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(request, path, requestOptions),
request, MealVoucherCardTokenizationCompleteResponse.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class InitApmPaymentRequest extends BaseRequest {
private String callbackUrl;
private String apmOrderId;
private String apmUserIdentity;
private Map<String, String> additionalParams;
private Map<String, Object> additionalParams;
private String clientIp;
private List<PaymentItem> items;
}
8 changes: 4 additions & 4 deletions src/main/java/io/craftgate/request/InitBkmExpressRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
import io.craftgate.model.Currency;
import io.craftgate.model.PaymentGroup;
import io.craftgate.model.PaymentPhase;
import io.craftgate.request.common.BaseRequest;
import io.craftgate.request.dto.PaymentItem;
import lombok.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;

import java.math.BigDecimal;
import java.util.List;
import lombok.experimental.SuperBuilder;
import lombok.EqualsAndHashCode;
import io.craftgate.request.common.BaseRequest;

@Data
@SuperBuilder
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.craftgate.request;

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

@Data
@EqualsAndHashCode(callSuper = false)
@SuperBuilder
public class MealVoucherCardTokenizationCompleteRequest extends BaseRequest {

private String validationCode;
}
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 io.craftgate.request.dto.MealVoucherCardTokenizationData;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;

@Data
@EqualsAndHashCode(callSuper = false)
@SuperBuilder
public class MealVoucherCardTokenizationRegenerateRequest extends BaseRequest {

private MealVoucherCardTokenizationData mealVoucherCardTokenizationData;
}
3 changes: 0 additions & 3 deletions src/main/java/io/craftgate/request/common/HashGenerator.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package io.craftgate.request.common;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializer;
import io.craftgate.exception.CraftgateException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;

import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;

public final class HashGenerator {

Expand Down
2 changes: 0 additions & 2 deletions src/main/java/io/craftgate/request/dto/EncryptedCard.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package io.craftgate.request.dto;

import io.craftgate.model.TokenizedCardType;
import lombok.Builder;
import lombok.Data;

import java.util.Map;
@Data
@Builder
public class EncryptedCard {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,43 @@ public static MealVoucherCardTokenizationData buildForMultinet(String userRefere
.build();
}

public static MealVoucherCardTokenizationData buildForMultinet(String callbackUrl) {
return MealVoucherCardTokenizationData.builder()
.callbackUrl(callbackUrl)
.build();
}

public static MealVoucherCardTokenizationData buildForEdenred(String userReferenceNumber, String callbackUrl) {
return MealVoucherCardTokenizationData.builder()
.userReferenceNumber(userReferenceNumber)
.callbackUrl(callbackUrl)
.build();
}

public static MealVoucherCardTokenizationData buildForEdenred(String callbackUrl) {
return MealVoucherCardTokenizationData.builder()
.callbackUrl(callbackUrl)
.build();
}

public static MealVoucherCardTokenizationData buildForSetcard(String callbackUrl){
return MealVoucherCardTokenizationData.builder()
.callbackUrl(callbackUrl)
.build();
}

public static MealVoucherCardTokenizationData buildForMetropol(String userReferenceNumber, String cardNumber ){
public static MealVoucherCardTokenizationData buildForMetropol(String userReferenceNumber, String cardNumber, String gsmNumber){
return MealVoucherCardTokenizationData.builder()
.userReferenceNumber(userReferenceNumber)
.cardNumber(cardNumber)
.gsmNumber(gsmNumber)
.build();
}

public static MealVoucherCardTokenizationData buildForMetropol(String cardNumber, String gsmNumber) {
return MealVoucherCardTokenizationData.builder()
.cardNumber(cardNumber)
.gsmNumber(gsmNumber)
.build();
}

Expand All @@ -43,4 +70,11 @@ public static MealVoucherCardTokenizationData buildForPluxee(String callbackUrl)
.callbackUrl(callbackUrl)
.build();
}

public static MealVoucherCardTokenizationData buildForTokenflex(String callbackUrl) {
return MealVoucherCardTokenizationData.builder()
.callbackUrl(callbackUrl)
.build();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.craftgate.response;

import lombok.Data;

import java.math.BigDecimal;

@Data
public class MealVoucherCardTokenizationCompleteResponse {

private String sessionId;
private String maskedCardNumber;
private String fingerprint;
private BigDecimal balance;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.craftgate.response;

import io.craftgate.model.ApmAdditionalAction;
import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class MealVoucherCardTokenizationRegenerateResponse {

private ApmAdditionalAction additionalAction;
private String sessionId;
private String htmlContent;
private String redirectUrl;
}
2 changes: 1 addition & 1 deletion src/test/java/io/craftgate/sample/BnplPaymentSample.java
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ void complete_bnpl_limit_inquiry() {
void init_tom_finance_bnpl_payment() {
BigDecimal price = new BigDecimal("100");

Map<String, String> additionalParams = new HashMap<>();
Map<String, Object> additionalParams = new HashMap<>();
additionalParams.put("buyerName", "John Doe");
additionalParams.put("buyerPhoneNumber", "5551112233");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@
import io.craftgate.Craftgate;
import io.craftgate.model.ApmAdditionalAction;
import io.craftgate.model.ApmType;
import io.craftgate.request.MealVoucherCardTokenizationCompleteRequest;
import io.craftgate.request.MealVoucherCardTokenizationInitRequest;
import io.craftgate.request.MealVoucherCardTokenizationRegenerateRequest;
import io.craftgate.request.dto.MealVoucherCardTokenizationData;
import io.craftgate.response.MealVoucherCardTokenizationCompleteResponse;
import io.craftgate.response.MealVoucherCardTokenizationInitResponse;
import io.craftgate.response.MealVoucherCardTokenizationRegenerateResponse;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
Expand All @@ -28,4 +32,32 @@ void init_meal_voucher_card_tokenization() {
assertNotNull(response.getSessionId());
assertEquals(ApmAdditionalAction.SHOW_HTML_CONTENT, response.getAdditionalAction());
}

@Test
void regenerate_meal_voucher_card_tokenization() {
String sessionId = "session-id";
MealVoucherCardTokenizationRegenerateRequest request = MealVoucherCardTokenizationRegenerateRequest.builder()
.mealVoucherCardTokenizationData(MealVoucherCardTokenizationData.buildForMetropol("6375780115068760", "5556667788"))
.build();

MealVoucherCardTokenizationRegenerateResponse response = craftgate.mealVoucherCardTokenizationAdapter().cardTokenizationRegenerate(sessionId, request);

assertNotNull(response.getSessionId());
assertEquals(ApmAdditionalAction.OTP_REQUIRED, response.getAdditionalAction());
}

@Test
void complete_meal_voucher_card_tokenization() {
String sessionId = "session-id";
MealVoucherCardTokenizationCompleteRequest request = MealVoucherCardTokenizationCompleteRequest.builder()
.validationCode("123456")
.build();

MealVoucherCardTokenizationCompleteResponse response = craftgate.mealVoucherCardTokenizationAdapter().cardTokenizationComplete(sessionId, request);

assertNotNull(response.getSessionId());
assertNotNull(response.getMaskedCardNumber());
assertNotNull(response.getFingerprint());
assertNotNull(response.getBalance());
}
}
24 changes: 12 additions & 12 deletions src/test/java/io/craftgate/sample/PaymentSample.java
Original file line number Diff line number Diff line change
Expand Up @@ -1105,7 +1105,7 @@ void init_sodexo_apm_payment() {
.callbackUrl("https://www.your-website.com/craftgate-apm-callback")
.apmUserIdentity("5555555555")
.items(items)
.additionalParams(new HashMap<String, String>() {{
.additionalParams(new HashMap<String, Object>() {{
put("sodexoCode", "843195");
}})
.build();
Expand Down Expand Up @@ -1192,7 +1192,7 @@ void init_tokenflex_apm_payment() {
.conversationId("456d1297-908e-4bd6-a13b-4be31a6e47d5")
.externalId("optional-externalId")
.callbackUrl("https://www.your-website.com/craftgate-apm-callback")
.additionalParams(new HashMap<String, String>() {{
.additionalParams(new HashMap<String, Object>() {{
put("paymentCode", "123456");
}})
.items(items)
Expand Down Expand Up @@ -1244,7 +1244,7 @@ void init_tokenflex_gift_apm_payment() {
.conversationId("456d1297-908e-4bd6-a13b-4be31a6e47d5")
.externalId("optional-externalId")
.callbackUrl("https://www.your-website.com/craftgate-apm-callback")
.additionalParams(new HashMap<String, String>() {{
.additionalParams(new HashMap<String, Object>() {{
put("paymentCode", "123456");
}})
.items(items)
Expand Down Expand Up @@ -1331,7 +1331,7 @@ void init_iwallet_apm_payment() {
.conversationId("456d1297-908e-4bd6-a13b-4be31a6e47d5")
.externalId("optional-externalId")
.callbackUrl("https://www.your-website.com/craftgate-apm-callback")
.additionalParams(new HashMap<String, String>() {{
.additionalParams(new HashMap<String, Object>() {{
put("cardNumber", "1111222233334444");
}})
.items(items)
Expand Down Expand Up @@ -1374,7 +1374,7 @@ void init_klarna_apm_payment() {
.price(BigDecimal.valueOf(0.40))
.build());

Map<String, String> additionalParams = new HashMap<>();
Map<String, Object> additionalParams = new HashMap<>();
additionalParams.put("country", "de");
additionalParams.put("locale", "en-DE");

Expand Down Expand Up @@ -1452,7 +1452,7 @@ void init_metropol_apm_payment() {
.conversationId("myConversationId")
.externalId("optional-externalId")
.items(items)
.additionalParams(new HashMap<String, String>() {{
.additionalParams(new HashMap<String, Object>() {{
put("cardNumber", "6375780115068760");
}})
.build();
Expand Down Expand Up @@ -1541,7 +1541,7 @@ void init_tompay_apm_payment() {
.externalId("externalId")
.callbackUrl("https://www.your-website.com/craftgate-apm-callback")
.items(items)
.additionalParams(new HashMap<String, String>() {{
.additionalParams(new HashMap<String, Object>() {{
put("channel", "channel");
put("phone", "5001112233");
}})
Expand Down Expand Up @@ -1604,7 +1604,7 @@ void init_bizum_apm_payment() {
.price(BigDecimal.valueOf(0.4))
.build());

Map<String, String> additionalParams = new HashMap<>();
Map<String, Object> additionalParams = new HashMap<>();
additionalParams.put("buyerPhoneNumber", "34700000000");

InitApmPaymentRequest request = InitApmPaymentRequest.builder()
Expand Down Expand Up @@ -1641,7 +1641,7 @@ void init_mbway_apm_payment() {
.price(BigDecimal.valueOf(0.4))
.build());

Map<String, String> additionalParams = new HashMap<>();
Map<String, Object> additionalParams = new HashMap<>();
additionalParams.put("buyerPhoneNumber", "34700000000");

InitApmPaymentRequest request = InitApmPaymentRequest.builder()
Expand Down Expand Up @@ -1678,7 +1678,7 @@ void init_paycell_dcb_apm_payment() {
.price(BigDecimal.valueOf(0.4))
.build());

Map<String, String> additionalParams = new HashMap<>();
Map<String, Object> additionalParams = new HashMap<>();
additionalParams.put("paycellGsmNumber", "5305289290");

InitApmPaymentRequest request = InitApmPaymentRequest.builder()
Expand Down Expand Up @@ -1721,7 +1721,7 @@ void init_paymob_apm_payment() {
.externalId("externalId")
.callbackUrl("https://www.your-website.com/craftgate-apm-callback")
.items(items)
.additionalParams(new HashMap<String, String>() {{
.additionalParams(new HashMap<String, Object>() {{
put("integrationId", "11223344");
}})
.build();
Expand Down Expand Up @@ -1822,7 +1822,7 @@ void init_setcard_apm_payment() {
.price(BigDecimal.valueOf(0.4))
.build());

Map<String, String> additionalParams = new HashMap<>();
Map<String, Object> additionalParams = new HashMap<>();
additionalParams.put("cardNumber", "7599640961180814");

InitApmPaymentRequest request = InitApmPaymentRequest.builder()
Expand Down
Loading