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 @@ -10,5 +10,9 @@ public interface AgenticCommerceClient {

CompletableFuture<DelegatePaymentResponse> delegatePayment(DelegatePaymentRequest request, DelegatePaymentHeaders headers);

CompletableFuture<DelegatePaymentResponse> delegatePayment(DelegatePaymentRequest request, String idempotencyKey, DelegatePaymentHeaders headers);

DelegatePaymentResponse delegatePaymentSync(DelegatePaymentRequest request, DelegatePaymentHeaders headers);

DelegatePaymentResponse delegatePaymentSync(DelegatePaymentRequest request, String idempotencyKey, DelegatePaymentHeaders headers);
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,35 @@ public AgenticCommerceClientImpl(final ApiClient apiClient, final CheckoutConfig

@Override
public CompletableFuture<DelegatePaymentResponse> delegatePayment(final DelegatePaymentRequest request, final DelegatePaymentHeaders headers) {
return delegatePayment(request, null, headers);
}

@Override
public CompletableFuture<DelegatePaymentResponse> delegatePayment(final DelegatePaymentRequest request, final String idempotencyKey, final DelegatePaymentHeaders headers) {
CheckoutUtils.validateParams("request", request, "headers", headers);
return apiClient.postAsync(
buildPath(AGENTIC_COMMERCE_PATH, DELEGATE_PAYMENT_PATH),
sdkAuthorization(),
DelegatePaymentResponse.class,
request,
null,
idempotencyKey,
headers);
}

@Override
public DelegatePaymentResponse delegatePaymentSync(final DelegatePaymentRequest request, final DelegatePaymentHeaders headers) {
return delegatePaymentSync(request, null, headers);
}

@Override
public DelegatePaymentResponse delegatePaymentSync(final DelegatePaymentRequest request, final String idempotencyKey, final DelegatePaymentHeaders headers) {
CheckoutUtils.validateParams("request", request, "headers", headers);
return apiClient.post(
buildPath(AGENTIC_COMMERCE_PATH, DELEGATE_PAYMENT_PATH),
sdkAuthorization(),
DelegatePaymentResponse.class,
request,
null,
idempotencyKey,
headers);
}
}
8 changes: 8 additions & 0 deletions src/main/java/com/checkout/issuing/IssuingClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ public interface IssuingClient {

CompletableFuture<CardResponse> createCard(CardRequest cardRequest);

CompletableFuture<CardResponse> createCard(CardRequest cardRequest, String idempotencyKey);

CompletableFuture<CardDetailsResponse> getCardDetails(String cardId);

CompletableFuture<ThreeDSEnrollmentResponse> enrollThreeDS(String cardId, ThreeDSEnrollmentRequest enrollmentRequest);
Expand All @@ -94,6 +96,8 @@ public interface IssuingClient {

CompletableFuture<CardControlResponse> createControl(final CardControlRequest cardControlRequest);

CompletableFuture<CardControlResponse> createControl(final CardControlRequest cardControlRequest, final String idempotencyKey);

CompletableFuture<CardControlsQueryResponse> getCardControls(final CardControlsQuery queryFilter);

CompletableFuture<CardControlResponse> getCardControlDetails(final String controlId);
Expand Down Expand Up @@ -202,6 +206,8 @@ CompletableFuture<CardAuthorizationReversalResponse> simulateReversal(

CardResponse createCardSync(CardRequest cardRequest);

CardResponse createCardSync(CardRequest cardRequest, String idempotencyKey);

CardDetailsResponse getCardDetailsSync(String cardId);

ThreeDSEnrollmentResponse enrollThreeDSSync(String cardId, ThreeDSEnrollmentRequest enrollmentRequest);
Expand All @@ -220,6 +226,8 @@ CompletableFuture<CardAuthorizationReversalResponse> simulateReversal(

CardControlResponse createControlSync(CardControlRequest cardControlRequest);

CardControlResponse createControlSync(CardControlRequest cardControlRequest, String idempotencyKey);

CardControlsQueryResponse getCardControlsSync(CardControlsQuery queryFilter);

CardControlResponse getCardControlDetailsSync(String controlId);
Expand Down
42 changes: 36 additions & 6 deletions src/main/java/com/checkout/issuing/IssuingClientImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -187,13 +187,18 @@ public CompletableFuture<CardholderCardsResponse> getCardholderCards(final Strin

@Override
public CompletableFuture<CardResponse> createCard(final CardRequest cardRequest) {
return createCard(cardRequest, null);
}

@Override
public CompletableFuture<CardResponse> createCard(final CardRequest cardRequest, final String idempotencyKey) {
validateParams("cardRequest", cardRequest);
return apiClient.postAsync(
buildPath(ISSUING_PATH, CARDS_PATH),
sdkAuthorization(),
CardResponse.class,
cardRequest,
null
idempotencyKey
);
}

Expand Down Expand Up @@ -299,17 +304,23 @@ public CompletableFuture<VoidResponse> suspendCard(
);
}

@Override
public CompletableFuture<CardControlResponse> createControl(final CardControlRequest cardControlRequest) {
return createControl(cardControlRequest, null);
}

@Override
public CompletableFuture<CardControlResponse> createControl(
final CardControlRequest cardControlRequest
final CardControlRequest cardControlRequest,
final String idempotencyKey
) {
validateParams("cardControlRequest", cardControlRequest);
return apiClient.postAsync(
buildPath(ISSUING_PATH, CONTROLS_PATH),
sdkAuthorization(),
CardControlResponse.class,
cardControlRequest,
null
idempotencyKey
);
}

Expand Down Expand Up @@ -600,6 +611,7 @@ public CompletableFuture<VoidResponse> deleteScheduledRevocation(final String ca
);
}

@Override
public CompletableFuture<DisputeResponse> createDispute(final CreateDisputeRequest createDisputeRequest, String idempotencyKey) {
validateCreateDisputeRequest(createDisputeRequest);
return apiClient.postAsync(
Expand All @@ -611,6 +623,7 @@ public CompletableFuture<DisputeResponse> createDispute(final CreateDisputeReque
);
}

@Override
public CompletableFuture<DisputeResponse> getDispute(final String disputeId) {
validateDisputeId(disputeId);
return apiClient.getAsync(
Expand All @@ -620,6 +633,7 @@ public CompletableFuture<DisputeResponse> getDispute(final String disputeId) {
);
}

@Override
public CompletableFuture<VoidResponse> cancelDispute(final String disputeId, String idempotencyKey) {
validateDisputeId(disputeId);
return apiClient.postAsync(
Expand All @@ -631,6 +645,7 @@ public CompletableFuture<VoidResponse> cancelDispute(final String disputeId, Str
);
}

@Override
public CompletableFuture<VoidResponse> escalateDispute(final String disputeId, String idempotencyKey,
final EscalateDisputeRequest escalateDisputeRequest) {
validateDisputeIdAndEscalateRequest(disputeId, escalateDisputeRequest);
Expand Down Expand Up @@ -740,13 +755,18 @@ public CardholderCardsResponse getCardholderCardsSync(final String cardholderId)

@Override
public CardResponse createCardSync(final CardRequest cardRequest) {
return createCardSync(cardRequest, null);
}

@Override
public CardResponse createCardSync(final CardRequest cardRequest, final String idempotencyKey) {
validateCardRequest(cardRequest);
return apiClient.post(
buildPath(ISSUING_PATH, CARDS_PATH),
sdkAuthorization(),
CardResponse.class,
cardRequest,
null
idempotencyKey
);
}

Expand Down Expand Up @@ -852,17 +872,23 @@ public VoidResponse suspendCardSync(
);
}

@Override
public CardControlResponse createControlSync(final CardControlRequest cardControlRequest) {
return createControlSync(cardControlRequest, null);
}

@Override
public CardControlResponse createControlSync(
final CardControlRequest cardControlRequest
final CardControlRequest cardControlRequest,
final String idempotencyKey
) {
validateCardControlRequest(cardControlRequest);
return apiClient.post(
buildPath(ISSUING_PATH, CONTROLS_PATH),
sdkAuthorization(),
CardControlResponse.class,
cardControlRequest,
null
idempotencyKey
);
}

Expand Down Expand Up @@ -1152,6 +1178,7 @@ public VoidResponse deleteScheduledRevocationSync(final String cardId) {
);
}

@Override
public DisputeResponse createDisputeSync(final CreateDisputeRequest createDisputeRequest, String idempotencyKey) {
validateCreateDisputeRequest(createDisputeRequest);
return apiClient.post(
Expand All @@ -1163,6 +1190,7 @@ public DisputeResponse createDisputeSync(final CreateDisputeRequest createDisput
);
}

@Override
public DisputeResponse getDisputeSync(final String disputeId) {
validateDisputeId(disputeId);
return apiClient.get(
Expand All @@ -1172,6 +1200,7 @@ public DisputeResponse getDisputeSync(final String disputeId) {
);
}

@Override
public VoidResponse cancelDisputeSync(final String disputeId, String idempotencyKey) {
validateDisputeId(disputeId);
return apiClient.post(
Expand All @@ -1183,6 +1212,7 @@ public VoidResponse cancelDisputeSync(final String disputeId, String idempotency
);
}

@Override
public VoidResponse escalateDisputeSync(final String disputeId, String idempotencyKey,
final EscalateDisputeRequest escalateDisputeRequest) {
validateDisputeIdAndEscalateRequest(disputeId, escalateDisputeRequest);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.checkout.issuing.controls.requests.ControlType;
import com.checkout.issuing.controls.requests.VelocityLimit;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@

/**
* Request to submit an Issuing dispute to the card scheme for processing
* @deprecated POST /issuing/disputes/{disputeId}/submit was removed from the API on 2026-04-15.
*/
@Deprecated
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public final class SubmitDisputeRequest extends Resource {

Check warning on line 24 in src/main/java/com/checkout/issuing/disputes/requests/SubmitDisputeRequest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Do not forget to remove this deprecated code someday.

See more on https://sonarcloud.io/project/issues?id=checkout_checkout-sdk-java&issues=AZ6H0Z-tSLWvIaArkl42&open=AZ6H0Z-tSLWvIaArkl42&pullRequest=604

/**
* The updated four-digit scheme-specific reason code.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@ public interface PaymentContextsClient {

CompletableFuture<PaymentContextsRequestResponse> requestPaymentContexts(PaymentContextsRequest paymentContextsRequest);

CompletableFuture<PaymentContextsRequestResponse> requestPaymentContexts(PaymentContextsRequest paymentContextsRequest, String idempotencyKey);

CompletableFuture<PaymentContextDetailsResponse> getPaymentContextDetails(String paymentContextId);

// Synchronous methods
PaymentContextsRequestResponse requestPaymentContextsSync(PaymentContextsRequest paymentContextsRequest);

PaymentContextsRequestResponse requestPaymentContextsSync(PaymentContextsRequest paymentContextsRequest, String idempotencyKey);

PaymentContextDetailsResponse getPaymentContextDetailsSync(String paymentContextId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,13 @@ public PaymentContextsClientImpl(final ApiClient apiClient, final CheckoutConfig

@Override
public CompletableFuture<PaymentContextsRequestResponse> requestPaymentContexts(final PaymentContextsRequest paymentContextsRequest) {
return requestPaymentContexts(paymentContextsRequest, null);
}

@Override
public CompletableFuture<PaymentContextsRequestResponse> requestPaymentContexts(final PaymentContextsRequest paymentContextsRequest, final String idempotencyKey) {
validatePaymentContextsRequest(paymentContextsRequest);
return apiClient.postAsync(PAYMENT_CONTEXTS_PATH, sdkAuthorization(), PaymentContextsRequestResponse.class, paymentContextsRequest, null);
return apiClient.postAsync(PAYMENT_CONTEXTS_PATH, sdkAuthorization(), PaymentContextsRequestResponse.class, paymentContextsRequest, idempotencyKey);
}

@Override
Expand All @@ -33,8 +38,13 @@ public CompletableFuture<PaymentContextDetailsResponse> getPaymentContextDetails
// Synchronous methods
@Override
public PaymentContextsRequestResponse requestPaymentContextsSync(final PaymentContextsRequest paymentContextsRequest) {
return requestPaymentContextsSync(paymentContextsRequest, null);
}

@Override
public PaymentContextsRequestResponse requestPaymentContextsSync(final PaymentContextsRequest paymentContextsRequest, final String idempotencyKey) {
validatePaymentContextsRequest(paymentContextsRequest);
return apiClient.post(PAYMENT_CONTEXTS_PATH, sdkAuthorization(), PaymentContextsRequestResponse.class, paymentContextsRequest, null);
return apiClient.post(PAYMENT_CONTEXTS_PATH, sdkAuthorization(), PaymentContextsRequestResponse.class, paymentContextsRequest, idempotencyKey);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ void shouldDelegatePayment() throws ExecutionException, InterruptedException {
eq(headers)))
.thenReturn(CompletableFuture.completedFuture(response));

final CompletableFuture<DelegatePaymentResponse> future = client.delegatePayment(request, headers);
final CompletableFuture<DelegatePaymentResponse> future = client.delegatePayment(request, null, headers);

assertNotNull(future.get());
assertEquals(response, future.get());
Expand All @@ -95,7 +95,49 @@ void shouldDelegatePaymentSync() {
eq(headers)))
.thenReturn(response);

final DelegatePaymentResponse result = client.delegatePaymentSync(request, headers);
final DelegatePaymentResponse result = client.delegatePaymentSync(request, null, headers);

assertNotNull(result);
assertEquals(response, result);
}

@Test
void shouldDelegatePaymentWithIdempotencyKey() throws ExecutionException, InterruptedException {
final DelegatePaymentRequest request = buildDelegatePaymentRequest();
final DelegatePaymentHeaders headers = buildHeaders();
final DelegatePaymentResponse response = mock(DelegatePaymentResponse.class);

when(apiClient.postAsync(
eq("agentic_commerce/delegate_payment"),
eq(authorization),
eq(DelegatePaymentResponse.class),
eq(request),
eq("idempotencyKey"),
eq(headers)))
.thenReturn(CompletableFuture.completedFuture(response));

final CompletableFuture<DelegatePaymentResponse> future = client.delegatePayment(request, "idempotencyKey", headers);

assertNotNull(future.get());
assertEquals(response, future.get());
}

@Test
void shouldDelegatePaymentSyncWithIdempotencyKey() {
final DelegatePaymentRequest request = buildDelegatePaymentRequest();
final DelegatePaymentHeaders headers = buildHeaders();
final DelegatePaymentResponse response = mock(DelegatePaymentResponse.class);

when(apiClient.post(
eq("agentic_commerce/delegate_payment"),
eq(authorization),
eq(DelegatePaymentResponse.class),
eq(request),
eq("idempotencyKey"),
eq(headers)))
.thenReturn(response);

final DelegatePaymentResponse result = client.delegatePaymentSync(request, "idempotencyKey", headers);

assertNotNull(result);
assertEquals(response, result);
Expand All @@ -116,7 +158,7 @@ void shouldDelegatePaymentWithMinimalRequest() throws ExecutionException, Interr
any(DelegatePaymentHeaders.class)))
.thenReturn(CompletableFuture.completedFuture(response));

final DelegatePaymentResponse result = client.delegatePayment(request, headers).get();
final DelegatePaymentResponse result = client.delegatePayment(request, null, headers).get();

assertNotNull(result);
assertEquals(response, result);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ void shouldCreateDelegatePaymentToken() {
final DelegatePaymentRequest request = buildFullRequest();

final DelegatePaymentResponse response =
blocking(() -> checkoutApi.agenticCommerceClient().delegatePayment(request, buildHeaders()));
blocking(() -> checkoutApi.agenticCommerceClient().delegatePayment(request, null, buildHeaders()));

validateResponse(response);
}
Expand All @@ -68,7 +68,7 @@ void shouldCreateDelegatePaymentTokenWithNetworkToken() {
.build();

final DelegatePaymentResponse response =
blocking(() -> checkoutApi.agenticCommerceClient().delegatePayment(request, buildHeaders()));
blocking(() -> checkoutApi.agenticCommerceClient().delegatePayment(request, null, buildHeaders()));

validateResponse(response);
}
Expand All @@ -79,7 +79,7 @@ void shouldCreateDelegatePaymentTokenSync() {
final DelegatePaymentRequest request = buildFullRequest();

final DelegatePaymentResponse response =
checkoutApi.agenticCommerceClient().delegatePaymentSync(request, buildHeaders());
checkoutApi.agenticCommerceClient().delegatePaymentSync(request, null, buildHeaders());

validateResponse(response);
}
Expand Down
Loading
Loading