Estas API de pedidos (creación, consulta y reenvío) utilizan firmas HMAC-SHA256. GET /api/v1/ping solo requiere una clave API. Las devoluciones de llamada de pago también incluyen una firma. HMAC utiliza su secreto comercial Webhook, no su clave API.
01. Especificaciones del encabezado
01. Enviando solicitudes de pedido API
Client to ServerCrear, consultar y reenviar solicitudes también requiere X-Bolt-Key. El timestamp debe estar dentro de los 5 minutos del reloj del servidor. Genere un nuevo timestamp y una firma al volver a intentarlo.
02. Recibir devoluciones de llamada de pago
Server to MerchantBoltUtil genera firmas y marcas de tiempo de devolución de llamada. Los receptores deben verificar el cuerpo sin formato, verificar la ventana timestamp y manejar eventos y órdenes comerciales de manera idempotente.
02. Cálculo de firma
Construir el contenido firmado
Une la marca de tiempo de la cabecera, un punto y el cuerpo original exacto: timestamp + "." + raw_body. Usa UTF-8 y conserva el punto incluso si el cuerpo está vacío.
// 1. Construct payload: timestamp + "." + body
String payload = timestamp + "." + body;Calcular HMAC-SHA256
Utilice el secreto de la configuración de su comerciante Webhook. El cuerpo utilizado para firmar debe coincidir exactamente con el cuerpo enviado en su solicitud API.
// JDK standard library: javax.crypto.Mac and SecretKeySpec
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
byte[] hash = mac.doFinal(payload.getBytes(StandardCharsets.UTF_8));Codificar como hexadecimal en minúscula
Codifica el resumen de 32 bytes como 64 caracteres hexadecimales en minúscula. Envíalo en X-Bolt-Signature para solicitudes API. Verifica las notificaciones con X-Bolt-Webhook-Signature mediante una comparación de tiempo constante.
// JDK 17+: java.util.HexFormat
String signature = HexFormat.of().formatHex(hash);03. Notas de verificación
- No analice ni vuelva a serializar JSON antes de la verificación. Los espacios en blanco, los saltos de línea, el orden de las claves y la codificación afectan a la firma.
- HMAC verifica la integridad del contenido pero no impide la reproducción por sí solo. Verifique la actualización de timestamp y los eventos deduplicados.
- Una firma válida no significa que el cumplimiento esté completo. Verifique la asociación del pedido, el estado del pago, los montos, la moneda y el tipo de liquidación.