Cómo integrar con CSM Servicios de CT
Esta página explica cómo integrar una aplicación cliente con CSM Servicios CT. Proporciona interfaces (CSMCTClient Adapter, CSMClient Validation Response Adapter y CSMCTAdapter) que los clientes deben implementar para manejar diversos message type s y API flujos relacionados con el procesamiento de pagos, liquidación y validación de reglas del esquema dentro del CSM sistema.
CSMCTClient Adapter
El CSM El adaptador está esperando que los clientes proporcionen una implementación para `CSMCTClientAdapter:
public interface CSMCTClientAdapter {
/**
* @see CSMClientValidationResponseAdapter#handleSchemeRulesResponse(ReceivingContext, ValidateSchemeRulesResponse)
* @deprecated
*/
default CompletionStage<Void> handleSchemeRulesResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse schemeRulesResponse) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's handleSchemeRulesResponse");
}
default CompletionStage<Void> handleClearAndSettleResponse(ReceivingContext receivingContext, ClearAndSettleResponse clearAndSettleResponse) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's handleClearAndSettleResponse");
}
default CompletionStage<Void> handleReceivePaymentSettledRequest(ReceivingContext receivingContext, ReceivePaymentSettledRequest receivePaymentSettledRequest) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's handleReceivePaymentSettledRequest");
}
default CompletionStage<Void> handleTechnicalResponse(ReceivingContext receivingContext, TechnicalResponse technicalResponse) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's handleTechnicalResponse");
}
default CompletionStage<Void> handleReceivePayment(ReceivingContext receivingContext, ReceivePaymentRequest receivePaymentRequest) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's handleReceivePayment");
}
default CompletionStage<Void> handleTimeout(ReceivingContext receivingContext, ReceivePaymentTimeout csmTimeout) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's handleTimeout");
}
default CompletionStage<Void> handleReceivePaymentStatusInquiryRequest(ReceivingContext receivingContext, ReceivePaymentStatusInquiryRequest receivePaymentStatusInquiryRequest) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's handleReceivePaymentStatusInquiryRequest");
}
default CompletionStage<Void> handleStatusRequestResponse(ReceivingContext receivingContext, StatusRequestResponse statusRequestResponse) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's handleStatusRequestResponse");
}
default CompletionStage<Void> handleCreditorStatusRequestResponse(ReceivingContext receivingContext, CreditorStatusRequestResponse creditorStatusRequestResponse) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's handleCreditorStatusRequestResponse");
}
default CompletionStage<Void> handleCreditorRequestToPay(ReceivingContext receivingContext, CreditorRequestToPayResponse creditorRequestToPayResponse) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's creditorRequestToPayResponse");
}
default CompletionStage<Void> handleDebtorRequestToPay(ReceivingContext receivingContext, DebtorRequestToPayRequest debtorRequestToPayRequest) {
throw new IconRuntimeException("Please implement the CSMClientAdapter's handleDebtorRequestToPayResponse");
}
default CompletionStage<Void> handleReceiveLiquidityPositionNotification(ReceivingContext receivingContext, LiquidityPositionNotification notification) {
// returning completed future to avoid forcing downstream consumers to implement no-op receivers
return CompletableFuture.completedStage(null);
}
default CompletionStage<Void> handleReceiveLiquidityAdjustmentNotification(ReceivingContext receivingContext, LiquidityAdjustmentNotification notification) {
return CompletableFuture.completedStage(null);
}
default CompletionStage<Void> handleReceiveParticipantUnavailableNotification(ReceivingContext receivingContext, ParticipantUnavailableNotification notification) {
return CompletableFuture.completedStage(null);
}
}
Al anular los métodos, el cliente puede procesar mensajes distintos de la CSM Service, para un procesamiento adicional.
| Método | API | Flujos |
|---|---|---|
handleSchemeRulesResponse -Deprecado |
Clear and Settle API |
Acreedor CT, Deudor CT, Acreedor RRR y Deudor RRR |
handleClearAndSettleResponse |
Clear and Settle API |
Deudor CT |
handleReceivePaymentSettledRequest |
Credit Transfer API |
Acreedor CT |
handleTechnicalResponse |
Pago API |
Deudor CT, Acreedor RRR y Deudor RRR |
manejarRecibirPago |
Credit Transfer API |
Acreedor CT |
handleTimeout |
Credit Transfer API |
Acreedor CT |
manejar Consulta Estado Recepción Pago |
Credit Transfer API |
Acreedor CT |
handleStatusRequestResponse |
Payment Status API |
Deudor CT |
handleCreditorStatusRequestResponse |
Payment Status API |
Acreedor CT |
handleCreditorRequestToPay |
Clear and Settle API |
Acreedor CT |
handleDebtorRequestToPay |
Clear and Settle API |
Deudor CT |
handleReceiveLiquidityPositionNotification |
Clear and Settle API |
No aplicable aún |
handleReceiveLiquidityAdjustmentNotification |
Clear and Settle API |
No aplicable aún |
handleReceiveParticipantUnavailableNotification |
Clear and Settle API |
No aplicable aún |
CSMClient Validation Response Adapter
El CSM El adaptador espera que los clientes proporcionen una implementación para CSMClient Validation Response Adapter:
public interface CSMClientValidationResponseAdapter {
default CompletionStage<Void> handleSchemeRulesResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse response) {
ValidatedIsoType validatedIsoType = ValidatedIsoTypeExtractor.extract(response);
return switch (validatedIsoType) {
case PACS_002 -> handlePacs002ValidationResponse(receivingContext, response);
case PACS_004 -> handlePacs004ValidationResponse(receivingContext, response);
case PACS_008 -> handlePacs008ValidationResponse(receivingContext, response);
case PACS_028 -> handlePacs028ValidationResponse(receivingContext, response);
case CAMT_029 -> handleCamt029ValidationResponse(receivingContext, response);
case CAMT_056 -> handleCamt056ValidationResponse(receivingContext, response);
case PACS_003, PACS_007, UNKNOWN -> handleUnexpectedValidationResponse(receivingContext, response);
};
}
default CompletionStage<Void> handleUnexpectedValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse){
return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handleUnexpectedValidationResponse"));
}
default CompletionStage<Void> handlePacs002ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handlePacs002ValidationResponse"));
}
default CompletionStage<Void> handlePacs004ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handlePacs004ValidationResponse"));
}
default CompletionStage<Void> handlePacs008ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handlePacs008ValidationResponse"));
}
default CompletionStage<Void> handlePacs028ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handlePacs028ValidationResponse"));
}
default CompletionStage<Void> handleCamt029ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handleCamt029ValidationResponse"));
}
default CompletionStage<Void> handleCamt056ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handleCamt056ValidationResponse"));
}
}
Al sobrescribir los métodos, el cliente puede procesar distintos `ValidateSchemeRuleResponse ` messages from the CSM Service. Clients can choose to implement the ISO type-specific handler methods or override default ` método handleSchemeRulesResponse()
CSM Proyecto Inicial del Cliente
El siguiente maven dependency es un proyecto inicial e incluye código base que acelerará la integración de una aplicación cliente con un CSM service. Este es el método preferido y facilita las cosas. Sin embargo, no es técnicamente obligatorio utilizarlo.
<dependency>
<groupId>com.iconsolutions.ipf.payments.csm</groupId>
<artifactId>csm-client-starter-all</artifactId>
</dependency>
CSMCTAdapter
Cuando el csm-client-starter-all se añade la dependencia, una implementación de CSMCTAdapter también está disponible:
public interface CSMCTAdapter {
CompletionStage<DeliveryReport> clearAndSettle(ClearAndSettleRequest clearAndSettleRequest);
CompletionStage<DeliveryReport> validateAgainstSchemeRules(ValidateSchemeRulesRequest validateSchemeRulesRequest);
CompletionStage<DeliveryReport> validateDebtorAgainstSchemeRules(ValidateSchemeRulesRequest validateSchemeRulesRequest);
CompletionStage<DeliveryReport> validateCreditorAgainstSchemeRules(ValidateSchemeRulesRequest validateSchemeRulesRequest);
CompletionStage<DeliveryReport> confirmReceivePayment(ReceivePaymentResponse receivePaymentResponse);
CompletionStage<DeliveryReport> statusRequest(StatusRequest statusRequest);
CompletionStage<DeliveryReport> creditorStatusRequest(StatusRequest statusRequest);
CompletionStage<DeliveryReport> creditorRequestToPay(CreditorRequestToPayRequest creditorRequestToPayRequest);
CompletionStage<DeliveryReport> debtorRequestToPayStatusReport(DebtorRequestToPayResponse debtorRequestToPayResponse);
CompletionStage<DeliveryReport> receivePaymentStatusRequestResponse(ReceivePaymentStatusInquiryResponse receivePaymentStatusInquiryResponse);
CompletionStage<DeliveryReport> sendInformationRequestToCsm(SendInformationRequestToCSM sendInformationRequestToCSM);
CompletionStage<DeliveryReport> sendInformationRequestResponseToCSM(SendInformationRequestResponseToCSM sendInformationRequestResponseToCSM);
CompletionStage<DeliveryReport> sendAdditionalInformationRequestResponseToCSM(SendAdditionalInformationRequestResponseToCSM sendAdditionalInformationRequestResponseToCSM);
}
Esta interfaz puede ser inyectada en el lado del cliente y, al invocar estos métodos, se pueden enviar mensajes distintos a la CSM Service, para un procesamiento adicional.
| Método | API | Flujos |
|---|---|---|
clearAndSettle |
Clear and Settle API |
Deudor CT |
validarContraReglasDeEsquema |
Clear and Settle API |
Acreedor CT |
validarDeudorContraReglasDelEsquema |
Clear and Settle API |
Deudor CT |
validarAcreedorContraReglasDelEsquema |
Clear and Settle API |
Acreedor CT |
confirmarRecibirPago |
Credit Transfer API |
Acreedor CT |
statusRequest |
Payment Status API |
Deudor CT |
solicitudEstadoAcreedor |
Payment Status API |
Acreedor CT |
solicitudDePagoACreedor |
Clear And Settle API |
No aplicable aún |
informeDeEstadoDeSolicitudDePagoDeDeudor |
Clear And Settle API |
No aplicable aún |
recibirRespuestaEstadoSolicitudPago |
Credit Transfer API |
No aplicable aún |
enviar Solicitud De Información ACsm |
Clear and Settle API |
No aplicable aún |
enviar Solicitud De Información Respuesta ACSM |
Clear and Settle API |
No aplicable aún |
enviar Respuesta Solicitud Información Adicional ACSM |
Clear and Settle API |
No aplicable aún |