Procesador de Solicitudes

El Creador de Solicitudes de Procesamiento es parte del Procesador de Entradas de Pago, cuya función es construir una solicitud válida, lista para ser procesada. La solicitud de implementación podría ser una Solicitud de Pago (utilizada para enviar a Ejecución) o una Solicitud de Cancelación (utilizada para asegurar que un Pago sea marcado como cancelado).

El Creador de Solicitudes de Procesamiento tiene los siguientes puntos de datos sobre los cuales construir una Solicitud:

  • Iniciación

  • Instrucción

  • Transacción

  • Datos de soporte requeridos para el servicio de ejecución

El ProcessingRequestCreator la interfaz no especifica cómo debe ser la Solicitud que se está construyendo. Corresponde a la clase de implementación definir cómo debe ser la Solicitud y qué datos debe contener.

Ejemplo de implementaciones del Creador de Solicitudes

Es posible considerar cómo podría verse una implementación al liberar o cancelar un pago.

Ejemplo de Creador de Solicitudes de Pago

Si estamos liberando un pago, podríamos definir algo similar a esto:

package com.iconsolutions.ipf.core.releaser;

import com.iconsolutions.ipf.core.releaser.service.release.ProcessingRequestCreator;
import com.iconsolutions.ipf.core.shared.api.Payload;
import com.iconsolutions.ipf.core.shared.api.Version;
import com.iconsolutions.ipf.core.shared.domain.context.SupportingContext;
import com.iconsolutions.ipf.payments.credittransfer.executepayment.api.ExecutePaymentRequest;
import com.iconsolutions.iso20022.message.components.credit_transfer.credit_transfer_transaction34.CreditTransferTransaction34;
import com.iconsolutions.iso20022.message.components.payment_instruction.payment_instruction30.PaymentInstruction30;
import com.iconsolutions.iso20022.message.definitions.payments_clearing_and_settlement.pacs008.FIToFICustomerCreditTransferV08;
import com.iconsolutions.iso20022.message.definitions.payments_initiation.pain001.CustomerCreditTransferInitiationV09;

import java.time.Instant;

public class ExamplePaymentRequestCreator implements ProcessingRequestCreator<ExamplePaymentInitiation, ExamplePaymentInstruction, ExamplePaymentTransaction, ExecutePaymentRequest> {

    private static final Version VERSION = new Version(1, 0, 0);

    @Override
    public ExecutePaymentRequest create(ExamplePaymentInitiation paymentInitiation, ExamplePaymentInstruction paymentInstruction, ExamplePaymentTransaction transaction, SupportingContext supportingDataForExecutionOperation) {

        var processingContext = transaction.getProcessingContext();
        var requestId = processingContext.getClientRequestId().getValue();

        var customBusinessData = SupportingContext.empty();
        FIToFICustomerCreditTransferV08 fiToFICustomerCreditTransferV08 = preparePayload(paymentInitiation.getPayload(), paymentInstruction.getPayload(), transaction.getPayload());

        return ExecutePaymentRequest.builder()
                .requestId(requestId)
                .processingContext(processingContext)
                .version(VERSION)
                .createdAt(Instant.now())
                .customBusinessData(customBusinessData)
                .payload(new Payload<>(fiToFICustomerCreditTransferV08, VERSION))
                .build();
    }


    private FIToFICustomerCreditTransferV08 preparePayload(CustomerCreditTransferInitiationV09 customerCreditTransferInitiation,
                                                           PaymentInstruction30 paymentInstruction,
                                                           CreditTransferTransaction34 transaction) {
        // payload preparation here, using the parameters supplied for execution
        return FIToFICustomerCreditTransferV08.builder()
                .build();
    }
}

Este ejemplo representa la creación de un ISO 20022 válido.EjecutarSolicitudDePago clase (mensaje Pacs008).

Ejemplo de Creador de Cancelación de Pago

Si estamos cancelando un pago, podemos definir algo similar a esto:

package com.iconsolutions.ipf.core.releaser;

import com.iconsolutions.ipf.core.releaser.service.release.ProcessingRequestCreator;
import com.iconsolutions.ipf.core.shared.domain.context.SupportingContext;

public class ExampleCancelRequestCreator implements ProcessingRequestCreator<ExamplePaymentInitiation, ExamplePaymentInstruction, ExamplePaymentTransaction, InitCancellationFlowRequest> {

    @Override
    public InitCancellationFlowRequest create(ExamplePaymentInitiation paymentInitiation, ExamplePaymentInstruction paymentInstruction, ExamplePaymentTransaction transaction, SupportingContext supportingDataForExecutionOperation) {
        return InitCancellationFlowRequest.builder()
                .unitOfWorkId(UnitOfWorkId.createRandom())
                .build();
    }
}
package com.iconsolutions.ipf.core.releaser;

import com.iconsolutions.ipf.core.shared.domain.context.UnitOfWorkId;

@Getter
@Builder
public class InitCancellationFlowRequest {
    private UnitOfWorkId unitOfWorkId;
}

Este ejemplo representa un ExampleCancelRequestCreator creador, que se suministra con un InitCancellationFlowRequest carga útil.