# Cabeceras y firma digital

# Cabeceras

# Cabeceras de Autentificación (estáticas)

Las cabeceras de autentificación son cabeceras HTTP que se deben incluir en cada solicitud o llamado a la API.

Los valores serán entregados por el equipo de soporte luego de enviar la llave pública por parte de los proveedores, y para todas las solicitudes o llamados los valores son los mismos.

Cabecera Valor
WM_CONSUMER.ID ConsumerID
WM_SEC.KEY_VERSION Versión de la llave
x-api-key Llave para la API

# Cabeceras dinámicas

Las cabeceras dinámicas son cabeceras HTTP que se deben incluir en cada solicitud o llamado a la API.

Los valores serán calculados por el sistema del proveedor para cada solicitud o llamado.

Cabecera Valor
WM_CONSUMER.INTIMESTAMP Fecha de la llamada, en formato EPOC (ej: 1634072114016)
WM_SEC.AUTH_SIGNATURE Firma digital de la solicitud. A continuación más detalles.

# Generación de firma digital

Las aplicaciones de proveedores conectadas a la API deberán generar una firma digital en cada solicitud o llamado, basado en su llave privada.

La generación de esta firma digital sigue la siguiente lógica:

  1. Tomar los valores:

    • WM_CONSUMER.ID (estático)
    • WM_CONSUMER.INTIMESTAMP (dinámico)
    • WM_SEC.KEY_VERSION (estático)
  2. Unir o concatenar por medio del caracter salto de línea o \n.

    El formato y el orden de concatenación debe ser como se muestra a continuación. Esta es una validación muy importante.

    <WM_CONSUMER.ID>\n<WM_CONSUMER.INTIMESTAMP>\n<WM_SEC.KEY_VERSION>\n
    

    Por ejemplo, para los valores:

    • WM_CONSUMER.ID : 83f82845-f12c-48ae-a7a6-8a9b0461c3ab
    • WM_CONSUMER.INTIMESTAMP : 1440058729000
    • WM_SEC.KEY_VERSION : 1

    el texto resultante sería: 83f82845-f12c-48ae-a7a6-8a9b0461c3ab\n1440058729000\n1\n

  3. La cadena construida debe ser firmada usando SHA256/RSA y codificada usando Base64, con el uso de la llave privada de la aplicación del proveedor. El resultado será agregado como el valor de la cabecera WM_SEC.AUTH_SIGNATURE.

Validez de la firma digital

La firma digital tiene un tiempo de validez de 5 minutos desde la fecha dada a WM_CONSUMER.INTIMESTAMP, luego expirará y las solicitudes fallarán con una respuesta del tipo UNAUTHORIZED.

# GET /ping

Hemos dispuesto un endpoint para validar el correcto funcionamiento de las cabeceras de autentificación y la firma digital.

URL: https://developer.api.us.walmart.com/api-proxy/service/mercuriocl/supplierapi/v1/ping

URL (Sandbox): https://developer.api.us.stg.walmart.com/api-proxy/service/mercuriocl/supplierapi/v1/ping

WARNING

Para desarrollos y pruebas utiliza la la URL Sandbox, no la productiva.

  • Ejemplo cURL

    curl -v -X GET "https://developer.api.us.stg.walmart.com/api-proxy/service/mercuriocl/supplierapi/v1/ping" \
    -H 'WM_CONSUMER.ID: <consumerid generated while registering a consumer>'\
    -H 'WM_CONSUMER.INTIMESTAMP: <generated while inviking the api>'\
    -H 'WM_SEC.KEY_VERSION: <key version generated while registering a consumer>'\
    -H 'WM_SEC.AUTH_SIGNATURE: < Generated as describedin signature Generation >'\
    -H 'x-api-key: <generated while registering a consumer>'
    
  • Respuesta satisfactoria

    { "pong" : 1634235113351
    }