Integración con HTTPS y JSONata

Descripción

En el contexto de una compra en un comercio electrónico, considere una integración que gestiona el procesamiento de pagos a través de las siguientes etapas:

  1. Recepción del pedido

  2. Búsqueda de información de la compra

  3. Transformación de los datos

  4. Procesamiento del pago

  5. Actualización del estado

  6. Respuesta final

Vea el script completo y el diagrama de la integración.

flow source code https

A continuación, se detalla la descripción de las etapas ejecutadas:

  1. Recepción del pedido

    El flujo comienza cuando se recibe un pedido con un código de identificación (ClientID). La solicitud POST se envía al endpoint /simple. La respuesta de la solicitud se registra en los logs.

    - from:
        uri: rest:post:/simple
    - setProperty:
        expression:
          simple:
            expression: ${header[ClientID]}
        name: "clientID"
    - log:
        message: ${exchangeProperty.clientID}
  2. Búsqueda de información de la compra

    Con el ClientID, el sistema realiza una consulta a un servicio interno para obtener más detalles. La consulta GET se realiza en el endpoint de compras, pasando el ClientID como parámetro. La respuesta de la solicitud se registra en los logs.

    - toD:
        uri: https://{{URL}}/interno/compras
        parameters:
            bridgeEndpoint: true
            httpMethod: GET
            ClientID: '${exchangeProperty.clientID}'
    - log:
        message: 'COMPRAS - ${body}'
  3. Transformación de los datos

    La información recibida se procesa y formatea utilizando una herramienta de transformación, JSONata. La transformación aplicada se registra en los logs para verificación.

    - to:
        uri: jsonata:classpath:extractTotal.jsonata
        parameters:
           inputType: JsonString
    - log:
        message: 'TRANSFORMAÇÃO - ${body}'
    • Las instrucciones para crear un nuevo objeto JSON están en el archivo extractTotal.jsonata, disponible en la carpeta Resources.

    • El archivo extractTotal.jsonata está referenciado en el script del flujo junto con el classpath (extracto arriba).

    • A continuación, se muestra el contenido del archivo extractTotal.jsonata:

    {
       "Conta": Cliente.Conta,
       "TipoPagamento": Cliente.TipoPagamento,
       "Valor": $sum(Cliente.Ordens.Produto.(Preco * Quantidade))
    }
  4. Procesamiento del pago

    Los datos procesados se envían a un servicio externo para realizar el pago. Primero, el cuerpo del mensaje transformado se convierte al formato JSON, y se configuran los encabezados Content-Type (definido como application/json) y Authorization (con un token de ejemplo). Luego, se realiza una solicitud POST al endpoint de pagos. La respuesta recibida se registra en los logs.

    - marshal:
        json:
           library: Jackson
    - setHeader:
        expression:
          constant:
            expression: application/json
        name: Content-Type
    - setHeader:
        expression:
          constant:
            expression: 'Bearer tokenDeAutorizacaoExemplo'
        name: Authorization
    - toD:
        uri: https://{{URL}}/externo/pagamento
        parameters:
            bridgeEndpoint: true
            httpMethod: POST
    - log:
        message: 'PAGAMENTO - ${body}'
  5. Actualización del estado

    Después del procesamiento del pago, el resultado se combina con el ClientID y se transforma nuevamente para actualizar el estado del pago en un servicio interno. El cuerpo del mensaje ajustado se convierte al formato JSON y se envía en una solicitud POST al endpoint de status.

    - setBody:
        expression:
          simple:
            expression: '{"ClientID": "${exchangeProperty.clientID}", "status":${body}}'
    - log:
        message: 'CONCATENAÇÃO - ${body}'
    - to:
        uri: jsonata:classpath:statusPayload.jsonata
        parameters:
           inputType: JsonString
    - log:
        message: 'STATUS PAYLOAD - ${body}'
    - marshal:
        json:
           library: Jackson
    - setHeader:
        expression:
          constant:
            expression: application/json
        name: Content-Type
    - toD:
        uri: https://{{URL}}/interno/status
        parameters:
            bridgeEndpoint: true
            httpMethod: POST
    • Las instrucciones para crear un nuevo objeto JSON están en el archivo statusPayload.jsonata, disponible en la carpeta Resources.

    • El archivo statusPayload.jsonata está referenciado en el script del flujo junto con el classpath (extracto arriba).

    • A continuación, se muestra el contenido del archivo statusPayload.jsonata:

    {
        "ClientID": ClientID,
        "Status":status.status
    }
  6. Respuesta final

El sistema envía una confirmación final para indicar que el pago fue exitoso. El código de respuesta HTTP se establece en 200, y el cuerpo de la respuesta confirma el éxito de la operación. Además, se registra el contenido de la respuesta final en los logs.

- setHeader:
    expression:
      constant:
        expression: "200"
    name: CamelHttpResponseCode
- setBody:
    expression:
      simple:
        expression: '{"success": "true"}'
- log:
    message: ${body}

Script del flujo

A continuación se muestra el script completo del flujo de integración descrito:

- from:
    uri: rest:post:/simple
    steps:
       - setProperty:
           expression:
             simple:
               expression: ${header[ClientID]}
           name: "clientID"
       - log:
          message: ${exchangeProperty.clientID}
       - toD:
          uri: https://{{URL}}/interno/compras
          parameters:
              bridgeEndpoint: true
              httpMethod: GET
              ClientID: '${exchangeProperty.clientID}'
       - log:
          message: 'COMPRAS - ${body}'
       - to:
            uri: jsonata:classpath:extractTotal.jsonata
            parameters:
               inputType: JsonString
       - log:
            message: 'TRANSFORMAÇÃO - ${body}'
       - marshal:
            json:
               library: Jackson
       - setHeader:
            expression:
              constant:
                expression: application/json
            name: Content-Type
       - setHeader:
            expression:
              constant:
                expression: 'Bearer tokenDeAutorizacaoExemplo'
            name: Authorization
       - toD:
          uri: https://{{URL}}/externo/pagamento
          parameters:
              bridgeEndpoint: true
              httpMethod: POST
       - log:
          message: 'PAGAMENTO - ${body}'
       - setBody:
          expression:
            simple:
              expression: '{"ClientID": "${exchangeProperty.clientID}", "status":${body}}'
       - log:
          message: 'CONCATENAÇÃO - ${body}'
       - to:
            uri: jsonata:classpath:statusPayload.jsonata
            parameters:
               inputType: JsonString
       - log:
            message: 'STATUS PAYLOAD - ${body}'
       - marshal:
            json:
               library: Jackson
       - setHeader:
            expression:
              constant:
                expression: application/json
            name: Content-Type
       - toD:
          uri: https://{{URL}}/interno/status
          parameters:
              bridgeEndpoint: true
              httpMethod: POST
       - setHeader:
          expression:
            constant:
                expression: "200"
          name: CamelHttpResponseCode
       - setBody:
          expression:
            simple:
              expression: '{"success": "true"}'
       - log:
          message: ${body}

Diagrama

https diagrama

Componentes y EIPs

Componentes EIPs

HTTPS

from

JSONata

log

REST

marshal

setBody

setHeader

setProperty

to

toD

Consulte la descripción de cada componente y EIP.
Thanks for your feedback!
EDIT

Share your suggestions with us!
Click here and then [+ Submit idea]