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:
-
Recepción del pedido
-
Búsqueda de información de la compra
-
Transformación de los datos
-
Procesamiento del pago
-
Actualización del estado
-
Respuesta final
Vea el script completo y el diagrama de la integración.
A continuación, se detalla la descripción de las etapas ejecutadas:
-
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}
-
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}'
-
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 elclasspath
(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)) }
-
-
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) yAuthorization
(con un token de ejemplo). Luego, se realiza una solicitudPOST
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}'
-
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 elclasspath
(extracto arriba). -
A continuación, se muestra el contenido del archivo
statusPayload.jsonata
:
{ "ClientID": ClientID, "Status":status.status }
-
-
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}
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. |
Share your suggestions with us!
Click here and then [+ Submit idea]