Utilice el CSM Service Biblioteca del Cliente

Esta guía explicará cómo llamar al CSM Service from an IPF flow(o cualquier otra pieza de software) utilizando el preconstruido CSM Service Biblioteca del Cliente.

Propósito

Todo IPF CSM Services implemente los diversos pagos de IPF APIs como se documenta en APIs, como:

  • Aclarar y Liquidar

  • Recibir Pago

  • Enviar Recordatorio a CSM

Y así sucesivamente.

El CSM Service La biblioteca del cliente agrupa los siguientes componentes para facilitar el desarrollo para IPF flow desarrolladores:

  • Definiciones de API

  • Kafka y JMS enlaces para la comunicación entre el IPF flow y el CSM Service

  • Interfaces predeterminadas para enviar mensajes a la CSM service

  • Interfaces predeterminadas para recibir mensajes de la CSM service

Pasos

A continuación se presenta cómo comenzar a llamar al cliente. API.

Paso 1: Agregue la dependencia

La dependencia que usted utiliza depende de qué enlaces de transporte desea utilizar.

Estas dependencias están todas disponibles como parte de la ipf-bom. Si usted está utilizando esto, no necesita especificar ninguna versión ya que recibirá el CSM Versión de la biblioteca inicial del cliente que ha sido validada para el ipf-bom en uso.
Tipo de transporte Dependencia

Kafka

<dependency>
    <groupId>com.iconsolutions.ipf.payments.csm</groupId>
    <artifactId>csm-client-starter-kafka</artifactId>
</dependency>

JMS

<dependency>
    <groupId>com.iconsolutions.ipf.payments.csm</groupId>
    <artifactId>csm-client-starter-jms</artifactId>
</dependency>

Ambos

<dependency>
    <groupId>com.iconsolutions.ipf.payments.csm</groupId>
    <artifactId>csm-client-starter-all</artifactId>
</dependency>

Paso 2: Recepción: Cree un CSM Implementación de la Biblioteca del Cliente

Para que el Spring Boot AutoConfigurar para csm-client-starter-* realizar todo el cableado relevante, el Contexto de Spring debe tener implementaciones de las siguientes interfaces antes de que se habilite cualquier cosa:

  • com.iconsolutions.instantpayments.api.csm.ct. CSMCTClientAdapter: Vínculos de cliente para operaciones de transferencia de crédito

  • com.iconsolutions.instantpayments.api.csm.rrr. CSMRClientAdapter: Vínculos de cliente para operaciones de recuperación/devolución/resolución

  • com.iconsolutions.instantpayments.api.csm.validate. CSMClientValidationResponseAdapter. Esto proporciona al Cliente las vinculaciones para las operaciones de validación de estilo de transferencia de crédito. Opcional, sin ello la operación de validación será manejada por el obsoleto handleSchemeRuleResponses método del CSMCTClient Adapter.

O alternativamente, si interactúa con un Débito Directo CSM Service:

  • com.iconsolutions.instantpayments.api.csm.dd. CSMDDClientAdapter: Vínculos de cliente para operaciones de débito directo

  • com.iconsolutions.instantpayments.api.csm.validate.dd. CSMDDClientValidationResponseAdapter Vínculos de cliente para operaciones de débito directo

Esta implementación necesitaría ser un Spring bean también. Por lo tanto, la implementación más sencilla para activar el CSM Las bibliotecas del cliente serían:

import com.iconsolutions.instantpayments.api.csm.ct. CSMCTClientAdapter;
import com.iconsolutions.instantpayments.api.csm.rrr. CSMRClientAdapter;
import org.springframework.stereotype. Component;

@Component (1)
public class MyCsmCTClientAdapter implements CSMCTClientAdapter, CSMRClientAdapter { (2)

}
1 Definiéndolo como un Spring bean
2 Implementando tanto las interfaces CT como R

Tenga en cuenta que no es necesario implementar ninguna interfaz para poner en funcionamiento la aplicación. Las implementaciones predeterminadas lanzará una excepción si de alguna manera termina recibiendo un mensaje y no ha implementado esa interfaz. Por ejemplo, si observamos la implementación predeterminada de ReceivePaymentRequest:

default CompletionStage<Void> handleReceivePayment(ReceivingContext receivingContext, ReceivePaymentRequest receivePaymentRequest) {
    throw new IconRuntimeException("Please implement the CSMClientAdapter's handleReceivePayment");
}

La implementación depende de lo que usted desee hacer con el mensaje, pero esto típicamente implicaría llamar a un IPF flow usando el XxxDomain métodos estáticos, tales como:

@Override
public CompletionStage<Void> handleReceivePayment(ReceivingContext receivingContext, ReceivePaymentRequest receivePaymentRequest) {
    var txId = request.getPayload().getContent().getCdtTrfTxInf().get(0).getPmtId().getTxId();

    log.debug("Received payment request {} with context {}", request.getRequestId(), request.getProcessingContext());
    return CredittransferDomain.initiation().handle(
                    new InitiateCreditorCTInput. Builder()
                            .withCustomerCreditTransfer(request.getPayload().getContent())
                            .withProcessingContext(receivingContext.getProcessingContext())
                            .build())
            .thenApply(result -> null);
}

Paso 3: Envío: Transfiera una instancia de CSMCTAdapter y CSMRadapter para enviar mensajes

El CSM Service implementa los conectores sobre JMS/Kafka usando CSMCTAdapter(para enviar mensajes del tipo Transferencia de Crédito) y opcionalmente CSMRAdapter(para el envío de conectores de tipo R-message) y CSMDDAdapter(para el envío de mensajes de tipo Domiciliación Bancaria).

Para enviar un mensaje a la CSM, por ejemplo, un mensaje ClearAndSettle (pacs. 008):

import com.iconsolutions.instantpayments.api.csm.ct. CSMCTAdapter;

import lombok. AllArgsConstructor;

@AllArgsConstructor
public class MyCSMAdapter {

    private final CSMCTAdapter csmAdapter;

    @Override
    public CompletionStage<Void> execute(ClearAndSettleAction action) {

        // client can provide its own customBusinessData, this is just an example
        var customBusinessData = SupportingContext.of("ActionNames", action.getActionName())
                .withContextProperty("flowType", "DEBTOR")
                .mergedWith(SupportingContext.ofHeaders(
                        Map.of("ProcessingEntity", action.getProcessingContext().getProcessingEntity().getValue()))
                );

        return csmAdapter.clearAndSettle(ClearAndSettleRequest.builder()
                        .requestId(action.getId())
                        .processingContext(action.getProcessingContext())
                        .version(new Version(1, 0, 0))
                        .createdAt(Instant.now())
                        .payload(new Payload<>(action.getCustomerCreditTransfer(), null))
                        .customBusinessData(customBusinessData)
                        .ipfId(action.getId())
                        .build())
                .thenAccept(deliveryReport -> log.debug("ClearAndSettleAction completed with {}", deliveryReport));
    }
}

Paso 4: Customize Configuración

El CSM La Biblioteca del Cliente utiliza una multitud de enviar y receive connector s para hablar con el objetivo CSM Service. Por defecto, todos los conectores simplemente heredan los valores predeterminados de ipf.connector.default-send-connector y ipf.connector.default-receive-connector. Puede anular los valores predeterminados y customize cada uno de los conectores por separado añadiendo la configuración bajo las rutas raíz de configuración específicas del conector en la configuración de su aplicación. Los caminos para cada conector se enumeran a continuación. La estructura que cada conector espera se puede ver aquí.

Conectores del Servicio de Transferencia de Crédito (CT)

Send Connector s:
Nombre del conector Ruta Raíz de Configuración

CSMClear And Settle Send

csm.ct-service.clearandsettle-send-connector

CSMRecibir Respuesta De Pago Enviar

csm.ct-service.receivepaymentresponse-send-connector

CSMSend Information Request To CSMSend

csm.ct-service.send-information-request-send-connector

enviar Respuesta De Solicitud De Información ACSMEnviar Conector

csm.ct-service.send-information-request-response-send-connector

enviar Respuesta Solicitud Información Adicional CSMSend Connector

csm.ct-service.send-additional-information-request-response-send-connector

CSMCreditor Request To Pay Request Send

csm.ct-service.creditorrequesttopayrequest-send-connector

CSMDebtor Request To Pay Response Send

csm.ct-service.debtor-request-to-pay-response-send-connector

CSMRecibir Estado De Pago Respuesta Enviar

csm.ct-service.receivepaymentstatusinquiryresponse-send-connector

CSMSlow Receive Payment Response Send

csm.ct-service.slowreceivepaymentresponse-send-connector

CSMStatus Request Send

csm.ct-service.statusrequest-send-connector

CSMCreditor Status Request Send

csm.ct-service.creditor-statusrequest-send-connector

CSMDebtor Validation Send

csm.ct-service.debtor-validation-send-connector

CSMCreditor Validation Send

csm.ct-service.creditor-validation-send-connector

Receive Connector s:
Nombre del conector Ruta Raíz de Configuración

ClearAndSettleCSMToDebtorReceiveConnector

csm.ct-service.clearandsettle.csm-to-debtor-receive-connector

clearAndSettleCSMToCreditorReceiveConnector

csm.ct-service.clearandsettle.csm-to-creditor-receive-connector

NotificacionesRecibirConector

csm.ct-service.notifications-receive-connector

ClearAndSettleTechnicalResponseReceiveConnector

csm.ct-service.clearandsettle.technical-response-receive-connector

Conectores de Servicio de Recall/Devolución/Resolución (RRR)

Send Connector s:
Nombre del conector Ruta Raíz de Configuración

sendDebtorRRRRequestToCsm

csm.rrr-service.debtor-request-send-connector

sendDebtorRRRResponseToCsm

csm.rrr-service.debtor-response-send-connector

sendCreditorRRRRequestToCsm

csm.rrr-service.creditor-request-send-connector

sendCreditorRRRResponseToCsm

csm.rrr-service.creditor-response-send-connector

Receive Connector s:
Nombre del conector Ruta Raíz de Configuración

RRRCSMTo Deudor Recibir Conector

csm.rrr-service.csm-to-debtor-receive-connector

RRRCSMTo Creditor Receive Connector

csm.rrr-service.csm-to-creditor-receive-connector

Conectores del Servicio de Domiciliación Bancaria (DD)

Send Connector s:
Nombre del conector Ruta Raíz de Configuración

ddCreditorToCsmSendConnector

csm.dd-service.creditor-to-csm.send-connector

Receive Connector s:
Nombre del conector Ruta Raíz de Configuración

ddCSMToCreditorReceiveConnector

csm.dd-service.csm-to-creditor.receive-connector