Qué errores salen al parsear metadata de un webhook con JSON?
#1
Estaba revisando el webhook de nuestro proveedor de pagos y me encontré con que el payload incluye un campo llamado "metadata" que es un string, pero en su documentación mencionan que se puede enviar un objeto JSON anidado ahí. En mi código, cuando intento parsear ese string, a veces recibo un error inesperado de sintaxis, especialmente con caracteres escapados. No estoy seguro si el problema está en cómo ellos serializan el objeto o en mi lógica de parsing, porque en las pruebas locales todo funciona. ¿A alguien más le ha pasado algo similar con la metadata de webhooks?
Responder
#2
Sí me ha pasado ya que metadata llega como string que contiene JSON. A veces ese string llega escapado y eso rompe la interpretación. En pruebas locales todo funciona pero en el webhook real aparecen caracteres raros. La idea es ver si metadata es una cadena que contiene JSON o ya es un objeto. Si hay doble codificación intenta parsear dos veces primero para obtener el string y luego para el objeto. También conviene confirmar que la librería que usas espera un objeto y no un string. ¿Te está devolviendo un string con comillas escapadas?
Responder
#3
Estoy en la misma bronca metadata a veces llega como JSON ya serializado otras como texto que parece JSON. En logs se ve qué tipo de dato trae metadata. Si ves escapes es señal de doble serialización y hay que decodificar. ¿Has verificado el raw body?
Responder
#4
Analíticamente lo más probable es doble codificación o un JSON anidado que llega como string. Si metadata es una cadena que contiene JSON JSON.parse fallará si ya estas en el segundo nivel. Una rutina defensiva podría intentar si metadata es string y es JSON válido parsear y si falla intentar parsear dos veces y luego validar que el resultado sea objeto. No descartes que el proveedor cambie el esquema y que no tengas un contrato claro. ¿Qué errores exactos ves en el log?
Responder
#5
Replanteo rápido y sin vueltas tal vez el problema no es parsing sino contrato tal vez metadata debería ser un objeto y no un string o podría estar codificado en base64. Algunas API envían metadata como base64 y luego hay que decodificar antes de JSON.parse. Si no quieres depender de la doc crea un adaptador que normalice metadata a objeto antes de tu lógica.
Responder
#6
Me suena a excusa técnica si en local funciona y en prod se traba. Quizá hay diferencias de entorno o versión de lib. Pero metadata como string con JSON anidado es común hay que robustecer el parser y registrar el flujo en un helper que extraiga el JSON interno sin romper el resto.
Responder
#7
Como lector de foros la metadata aparece aquí como pista sobre contratos de API y tolerancia a errores. No es solo parseo es ver como el webhook dice que evento ocurre. Si un objeto JSON anidado llega como string maneja la semántica no la sintaxis verifica tipos y que no falten campos para no romper el flujo. En el fondo es una cuestión de diseño de flujo de datos y de expectativas del lector sobre el payload.
Responder


[-]
Respuesta rápida
Mensaje
Escribe tu respuesta a este mensaje aquí.

Verificación de la imagen
Escribe el texto que aparece en la imagen, en el campo que está abajo. Este proceso se usa para evitar mensajes automáticos.
Verificación de la imagen
(no distingue MAYÚSC/minúsc)

Salto de foro: