From c6012586d01bb520d5e894843b4bbe8acb13608c Mon Sep 17 00:00:00 2001 From: david ruiz Date: Mon, 8 Jun 2026 18:10:54 +0200 Subject: [PATCH 1/2] scheme_transaction_link_id update --- .../processing/Processing.java | 9 ++++++ .../checkout/payments/PaymentProcessing.java | 8 +++++ .../payments/response/ProcessingData.java | 9 ++++++ ...ayoutResponseCreatedSerializationTest.java | 29 +++++++++++++++++++ .../checkout/payments/GetPaymentsTestIT.java | 6 ++++ .../PaymentProcessingSerializationTest.java | 25 +++++++++++++++- .../ProcessingDataDeserializationTest.java | 15 +++++++++- 7 files changed, 99 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/checkout/handlepaymentsandpayouts/payments/postpayments/responses/requestapaymentorpayoutresponsecreated/processing/Processing.java b/src/main/java/com/checkout/handlepaymentsandpayouts/payments/postpayments/responses/requestapaymentorpayoutresponsecreated/processing/Processing.java index 198829a2..9c72a04c 100644 --- a/src/main/java/com/checkout/handlepaymentsandpayouts/payments/postpayments/responses/requestapaymentorpayoutresponsecreated/processing/Processing.java +++ b/src/main/java/com/checkout/handlepaymentsandpayouts/payments/postpayments/responses/requestapaymentorpayoutresponsecreated/processing/Processing.java @@ -148,4 +148,13 @@ public final class Processing { @SerializedName("cko_network_token_available") private Boolean ckoNetworkTokenAvailable; + /** + * The scheme transaction link identifier. Returned for Mastercard transactions when the scheme + * provides a link identifier that ties together related transactions on the network + * (see Mastercard Transaction Link Identifier documentation). + * [Optional] + */ + @SerializedName("scheme_transaction_link_id") + private String schemeTransactionLinkId; + } diff --git a/src/main/java/com/checkout/payments/PaymentProcessing.java b/src/main/java/com/checkout/payments/PaymentProcessing.java index d1b0760c..05cf4746 100644 --- a/src/main/java/com/checkout/payments/PaymentProcessing.java +++ b/src/main/java/com/checkout/payments/PaymentProcessing.java @@ -202,4 +202,12 @@ public final class PaymentProcessing { */ private Aggregator aggregator; + /** + * The scheme transaction link identifier. Returned for Mastercard transactions when the scheme + * provides a link identifier that ties together related transactions on the network + * (see Mastercard Transaction Link Identifier documentation). + * [Optional] + */ + private String schemeTransactionLinkId; + } diff --git a/src/main/java/com/checkout/payments/response/ProcessingData.java b/src/main/java/com/checkout/payments/response/ProcessingData.java index fedd8256..c4e412c9 100644 --- a/src/main/java/com/checkout/payments/response/ProcessingData.java +++ b/src/main/java/com/checkout/payments/response/ProcessingData.java @@ -151,4 +151,13 @@ public final class ProcessingData { @SerializedName("airline_data") private List airlineData; + /** + * The scheme transaction link identifier. Returned for Mastercard transactions when the scheme + * provides a link identifier that ties together related transactions on the network + * (see Mastercard Transaction Link Identifier documentation). + * [Optional] + */ + @SerializedName("scheme_transaction_link_id") + private String schemeTransactionLinkId; + } diff --git a/src/test/java/com/checkout/handlepaymentsandpayouts/payments/postpayments/responses/requestapaymentorpayoutresponsecreated/RequestAPaymentOrPayoutResponseCreatedSerializationTest.java b/src/test/java/com/checkout/handlepaymentsandpayouts/payments/postpayments/responses/requestapaymentorpayoutresponsecreated/RequestAPaymentOrPayoutResponseCreatedSerializationTest.java index f9c7646a..b2c6fb42 100644 --- a/src/test/java/com/checkout/handlepaymentsandpayouts/payments/postpayments/responses/requestapaymentorpayoutresponsecreated/RequestAPaymentOrPayoutResponseCreatedSerializationTest.java +++ b/src/test/java/com/checkout/handlepaymentsandpayouts/payments/postpayments/responses/requestapaymentorpayoutresponsecreated/RequestAPaymentOrPayoutResponseCreatedSerializationTest.java @@ -12,6 +12,7 @@ import com.checkout.handlepaymentsandpayouts.payments.common.source.klarnasource.KlarnaSource; import com.checkout.handlepaymentsandpayouts.payments.common.source.paypalsource.PaypalSource; import com.checkout.handlepaymentsandpayouts.payments.common.source.sepasource.SepaSource; +import com.checkout.handlepaymentsandpayouts.payments.postpayments.responses.requestapaymentorpayoutresponsecreated.processing.Processing; public final class RequestAPaymentOrPayoutResponseCreatedSerializationTest { @@ -149,4 +150,32 @@ void shouldDeserializeSepaSource() { assertEquals("src_sepa_123", sepaSource.getId()); } + @Test + void shouldDeserializeProcessingSchemeTransactionLinkId() { + String json = "{\n" + + " \"id\": \"pay_123\",\n" + + " \"amount\": 1000,\n" + + " \"currency\": \"USD\",\n" + + " \"approved\": true,\n" + + " \"status\": \"Authorized\",\n" + + " \"processed_on\": \"2021-06-08T12:25:01Z\",\n" + + " \"processing\": {\n" + + " \"retrieval_reference_number\": \"RRN001\",\n" + + " \"acquirer_transaction_id\": \"ACQ001\",\n" + + " \"scheme\": \"Mastercard\",\n" + + " \"scheme_transaction_link_id\": \"MTL-XYZ-789\"\n" + + " }\n" + + "}"; + + RequestAPaymentOrPayoutResponseCreated response = serializer.fromJson(json, RequestAPaymentOrPayoutResponseCreated.class); + + assertNotNull(response); + Processing processing = response.getProcessing(); + assertNotNull(processing); + assertEquals("RRN001", processing.getRetrievalReferenceNumber()); + assertEquals("ACQ001", processing.getAcquirerTransactionId()); + assertEquals("Mastercard", processing.getScheme()); + assertEquals("MTL-XYZ-789", processing.getSchemeTransactionLinkId()); + } + } diff --git a/src/test/java/com/checkout/payments/GetPaymentsTestIT.java b/src/test/java/com/checkout/payments/GetPaymentsTestIT.java index 8571e6b5..cb9d1adf 100644 --- a/src/test/java/com/checkout/payments/GetPaymentsTestIT.java +++ b/src/test/java/com/checkout/payments/GetPaymentsTestIT.java @@ -416,6 +416,12 @@ private void validateNotFoundSync(Runnable operation) { private void validateBasicGetPaymentResponse(GetPaymentResponse paymentReturned, PaymentStatus expectedStatus) { assertNotNull(paymentReturned); assertEquals(expectedStatus, paymentReturned.getStatus()); + // Mastercard Transaction Link Identifier — optional, only populated for Mastercard + // transactions. Exercising the getter confirms the field is exposed by the SDK + // and deserializes without error even when absent from the response payload. + if (paymentReturned.getProcessing() != null) { + paymentReturned.getProcessing().getSchemeTransactionLinkId(); + } } private void validatePaymentWithDigitalItem(GetPaymentResponse paymentReturned) { diff --git a/src/test/java/com/checkout/payments/PaymentProcessingSerializationTest.java b/src/test/java/com/checkout/payments/PaymentProcessingSerializationTest.java index 16574973..f43675c5 100644 --- a/src/test/java/com/checkout/payments/PaymentProcessingSerializationTest.java +++ b/src/test/java/com/checkout/payments/PaymentProcessingSerializationTest.java @@ -11,6 +11,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; class PaymentProcessingSerializationTest { @@ -92,6 +93,26 @@ void shouldDeserializeReconciliationId() { assertEquals("recon_001", processing.getReconciliationId()); } + @Test + void shouldDeserializeSchemeTransactionLinkId() { + final String json = "{\"scheme_transaction_link_id\":\"MTL-001\"}"; + + final PaymentProcessing processing = serializer.fromJson(json, PaymentProcessing.class); + + assertNotNull(processing); + assertEquals("MTL-001", processing.getSchemeTransactionLinkId()); + } + + @Test + void shouldSerializeSchemeTransactionLinkIdToSnakeCase() { + final PaymentProcessing processing = new PaymentProcessing(); + processing.setSchemeTransactionLinkId("MTL-001"); + + final String json = serializer.toJson(processing); + + assertTrue(json.contains("\"scheme_transaction_link_id\":\"MTL-001\"")); + } + @Test void shouldDeserializePartnerFields() { final String json = "{" @@ -182,7 +203,8 @@ void shouldDeserializeFullSwaggerExample() { + "\"merchant_category_code\":\"5812\"," + "\"aft\":false," + "\"bizum_payment_id\":\"biz_001\"," - + "\"reconciliation_id\":\"rec_001\"" + + "\"reconciliation_id\":\"rec_001\"," + + "\"scheme_transaction_link_id\":\"MTL-XYZ-789\"" + "}"; final PaymentProcessing processing = serializer.fromJson(json, PaymentProcessing.class); @@ -199,6 +221,7 @@ void shouldDeserializeFullSwaggerExample() { assertEquals(100L, processing.getForeignRetailerAmount()); assertEquals("biz_001", processing.getBizumPaymentId()); assertEquals("rec_001", processing.getReconciliationId()); + assertEquals("MTL-XYZ-789", processing.getSchemeTransactionLinkId()); } @Test diff --git a/src/test/java/com/checkout/payments/response/ProcessingDataDeserializationTest.java b/src/test/java/com/checkout/payments/response/ProcessingDataDeserializationTest.java index 22b3ddd2..1165786d 100644 --- a/src/test/java/com/checkout/payments/response/ProcessingDataDeserializationTest.java +++ b/src/test/java/com/checkout/payments/response/ProcessingDataDeserializationTest.java @@ -112,6 +112,16 @@ void shouldDeserializePartnerResponseCode() { assertEquals("ER_WRONG_TICKET", data.getPartnerResponseCode()); } + @Test + void shouldDeserializeSchemeTransactionLinkId() { + final String json = "{\"scheme_transaction_link_id\":\"MTL-001\"}"; + + final ProcessingData data = serializer.fromJson(json, ProcessingData.class); + + assertNotNull(data); + assertEquals("MTL-001", data.getSchemeTransactionLinkId()); + } + @Test void shouldDeserializeAllNewFieldsTogether() { final String json = "{" @@ -121,7 +131,8 @@ void shouldDeserializeAllNewFieldsTogether() { + "\"fallback_source_used\":false," + "\"failure_code\":\"partner_error\"," + "\"partner_code\":\"902111\"," - + "\"partner_response_code\":\"DECLINED\"" + + "\"partner_response_code\":\"DECLINED\"," + + "\"scheme_transaction_link_id\":\"MTL-XYZ-789\"" + "}"; final ProcessingData data = serializer.fromJson(json, ProcessingData.class); @@ -134,6 +145,7 @@ void shouldDeserializeAllNewFieldsTogether() { assertEquals("partner_error", data.getFailureCode()); assertEquals("902111", data.getPartnerCode()); assertEquals("DECLINED", data.getPartnerResponseCode()); + assertEquals("MTL-XYZ-789", data.getSchemeTransactionLinkId()); } @Test @@ -153,5 +165,6 @@ void shouldLeaveNewFieldsNullWhenAbsent() { assertNull(data.getFailureCode()); assertNull(data.getPartnerCode()); assertNull(data.getPartnerResponseCode()); + assertNull(data.getSchemeTransactionLinkId()); } } From ddd09870e2044d0482a3b5733d759839c38139ab Mon Sep 17 00:00:00 2001 From: david ruiz Date: Tue, 9 Jun 2026 11:35:51 +0200 Subject: [PATCH 2/2] Release 7.9.2 - Transaction Link Identifier update --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f143b5b8..8683f21f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group=com.checkout -version=7.9.1 +version=7.9.2 project_name=Checkout SDK Java project_description=Checkout SDK for Java https://checkout.com