# 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:
Tomar los valores:
- WM_CONSUMER.ID (estático)
- WM_CONSUMER.INTIMESTAMP (dinámico)
- WM_SEC.KEY_VERSION (estático)
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
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 }