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
| Encabezado | Descripción |
|---|---|
X-API-Key | Su clave API de organización |
X-Timestamp | Marca de tiempo Unix actual en segundos (p. ej., 1711000000) |
X-Nonce | Una cadena única por solicitud (se recomienda UUID v4) |
X-Signature | Firma 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 (.):
- timestamp — Marca de tiempo Unix en segundos (mismo valor que el encabezado
X-Timestamp) - nonce — El mismo valor enviado en el encabezado
X-Nonce - method — El método HTTP en mayúsculas (p. ej.,
GET,POST) - path — La ruta completa de la solicitud (p. ej.,
/v2/partners/products/tickets) - 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-Timestampdebe estar dentro de 5 minutos (300 segundos) de la hora del servidor. Las solicitudes con marcas de tiempo obsoletas serán rechazadas con un error401. - Cada valor de
X-Noncedebe ser único y solo puede usarse una vez. Reutilizar un nonce resultará en un error401. - 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.