Vignetim

Autenticación

Cada solicitud a la API de Socios (Partner API) debe autenticarse mediante firma de solicitud HMAC-SHA256. Esto garantiza que las solicitudes sean auténticas y no hayan sido manipuladas durante el tránsito.

Encabezados requeridos

EncabezadoDescripción
X-API-KeySu clave API de organización
X-TimestampMarca de tiempo Unix actual en segundos (p. ej., 1711000000)
X-NonceUna cadena única por solicitud (se recomienda UUID v4)
X-SignatureFirma hexadecimal HMAC-SHA256 de la solicitud

Construcción de la firma

La firma se calcula construyendo una cadena de mensaje separada por puntos y firmándola con el secreto de su clave API:

message = "{timestamp}.{nonce}.{method}.{path}.{body}"
signature = HMAC-SHA256(apiKeySecret, message).hexDigest()

Los componentes del mensaje, unidos con puntos (.):

  1. timestamp — Marca de tiempo Unix en segundos (mismo valor que el encabezado X-Timestamp)
  2. nonce — El mismo valor enviado en el encabezado X-Nonce
  3. method — El método HTTP en mayúsculas (p. ej., GET, POST)
  4. path — La ruta completa de la solicitud (p. ej., /v2/partners/products/tickets)
  5. body — La cadena del cuerpo JSON sin procesar de la solicitud. Para solicitudes GET sin cuerpo, use una cadena vacía ""

El digest HMAC resultante debe codificarse como hexadecimal en minúsculas.

Ejemplos

API_KEY="your-api-key"
API_SECRET="your-api-secret"
TIMESTAMP=$(date +%s)
NONCE=$(uuidgen | tr '[:upper:]' '[:lower:]')
METHOD="GET"
REQ_PATH="/v2/partners/products/tickets"
BODY=""

MESSAGE="${TIMESTAMP}.${NONCE}.${METHOD}.${REQ_PATH}.${BODY}"

SIGNATURE=$(echo -n "${MESSAGE}" | \
  openssl dgst -sha256 -hmac "${API_SECRET}" | \
  awk '{print $2}')

curl -X GET "https://api.vignetim.com${REQ_PATH}" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: ${API_KEY}" \
  -H "X-Timestamp: ${TIMESTAMP}" \
  -H "X-Nonce: ${NONCE}" \
  -H "X-Signature: ${SIGNATURE}"

Notas importantes

  • El X-Timestamp debe estar dentro de 5 minutos (300 segundos) de la hora del servidor. Las solicitudes con marcas de tiempo obsoletas serán rechazadas con un error 401.
  • Cada valor de X-Nonce debe ser único y solo puede usarse una vez. Reutilizar un nonce resultará en un error 401.
  • Siempre use la cadena del cuerpo JSON sin procesar y sin formatear para el cálculo de la firma. No aplique formato legible ni re-serialice el cuerpo antes de firmar.
  • La firma debe estar codificada en hexadecimal en minúsculas. No use base64.