Algunos métodos requieren datos para la entrada; otros no tienen salida.
Para poder operar con nuestras APIs, resulta indispensable que tu comercio sea un socio registrado en Falabella y disponga de acceso a tu User ID y Api Key, obtenidos a través de https://sellercenter.falabella.com/. Los detalles de este proceso serán explicados más adelante.
Es importante tener en cuenta que, ya sea que las llamadas sean de tipo GET o POST, siempre se generará una respuesta, la cual puede variar en detalle según la acción solicitada, independientemente de su éxito.
Estas respuestas pueden estar formateadas tanto en XML como en JSON, y dicha preferencia se puede configurar mediante los parámetros de entrada, según corresponda.
¿Cómo Obtener Tus Credenciales?
Acceder a credencial para usuario ya creado en Falabella Seller Center.
Tal cómo comentamos anteriormente, para poder operar con nuestras API se debe tener acceso el Api Key, para ello se debe hacer lo siguiente:
- Ingresar a https://sellercenter.falabella.com/ con tu user y clave de falabella Seller center
- Una vez adentro, hacer clic en "Mi Cuenta"
- Desplegado el menú, ingresar a "Integraciones"
- Se encontrará el "User ID" y "API Key", en el apartado "API Explorer"
Crear nuevo usuario
El admin debe ingresar a https://sellercenter.falabella.com/ con su user y clave de falabella seller center
- Una vez adentro, hacer clic en "Mi cuenta"
- Desplegado el menú, se debe hacer clic en "Usuarios"
- Posteriormente se debe dar clic en "Agregar Usuario"
- Finalmente agregar datos cómo correo, nombre, rol, entre otros.
- Para que el nuevo User pueda tener acceso al API Key, debe seguir los pasos de "Acceder a credencial para usuario ya creado en Falabella Seller Center"
Roles y Privilegios
No todos los usuarios de Falabella Seller Center pueden llamar a todos los métodos de la API.
Las llamadas a la API no pueden ser anónimas. Cada llamada se efectúa en calidad de un usuario específico de Falabella Seller Center, identificado mediante el parámetro UserID y autenticado mediante una clave de API (API key) correspondiente. Para realizar una llamada a un método en particular, el usuario debe contar con un rol específico, detallado de la siguiente manera.
Rol | Métodos disponibles |
---|---|
Seller API Access | Todos |
Seller API Product Access | GetProducts, ProductCreate, ProductUpdate, ProductRemove, Image, GetBrands, GetCategoryTree, GetCategoryAttributes, GetAttributes, FeedList, FeedOffsetList, FeedCount, FeedStatus, FeedCancel |
Seller API Order Access | GetOrders, GetOrder, GetOrderItems, GetMultipleOrderItems, SetStatusToCanceled, SetStatusToReadyToShip, SetStatustoShipped, SetStatusToFailedDelivered, SetStatusToDelivered, GetFailureReasons, GetShipmentProviders |
Request Headers
Request HeadersTodas las solicitudes (requests) deberán tener el encabezado (header) User-Agent configurado con el siguiente formato:
SELLER_ID/TECNOLOGIA_UTILIZADA/VERSION_TECNOLOGIA_UTILIZADA/TIPO_INTEGRACION/CODIGO_BUSINESS_UNIT
SELLER_ID: corresponde a tu ID del Seller, si no lo recuerda, lo puedes ver directamente desde Falabella Seller Center, en la sección de “Mi cuenta” o a través del endpoint “GetSellerByUser”
TECNOLOGIA_UTILIZADA: corresponde al lenguaje de programación utilizado en la integración
VERSION_TECNOLOGIA_UTILIZADA: corresponde a la versión de la tecnología utilizada
TIPO_INTEGRACION: este campo varía según tipo de integración:
- Si eres un comercio que está haciendo una integración directa con Falabella.com : "PROPIA"
- Si eres un integrador de múltiples comercios y estas integrando tu solución con Falabella.com: "NOMBRE_DE_INTEGRADORA"
CODIGO_BUSINESS_UNIT: corresponde al código de país al cual estas integrado (Chile: FACL; Colombia: FACO; Perú: FAPE)
¿Eres un Comercio que se está integrando directamente con nosotros?
Ejemplo: User-Agent: JJJ123/PHP/8.1.7/PROPIA/FACL
¿Eres un Integrador que está integrando tu solución con Falabella.com para poder operar con múltiples comercios?
Ejemplo: User-Agent: JJJ123/PHP/8.1.7/NOMBRE_DE_INTEGRADORA/FACL
Más información sobre este header en MDN - User-Agent.
Datos de solicitud adicionales a través de POST
Como hemos visto, todos los métodos se llaman a través de HTTP. Algunos a través de GET y otros a través de POST.
Todas las llamadas siempre toman los parámetros Action, Timestamp, UserID, Version y Signature.
A menudo, se agregan parámetros adicionales. P.ej, GetProducts toma parámetros adicionales, como un parámetro Search.
Los siguientes pueden ser datos adicionales enviados al método ProductUpdate:
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<Product>
<SellerSku>SKU-AAAA</SellerSku>
<Price>10.0</Price>
<SaleStartDate>2015-07-01T11:11:11+0000</SaleStartDate>
<SaleEndDate>2015-07-01T11:11:11+0000</SaleEndDate>
<SalePrice>8.0</SalePrice>
</Product>
<Product>
<SellerSku>SKU-BBBB</SellerSku>
<Price>32.5</Price>
</Product>
</Request>
GET o POST
El uso de GET o POST es específico del método al que está llamando y se indica en esta documentación. Incluso si no es necesario cargar datos adicionales para una solicitud, debe usar POST si ese es el comando HTTP especificado para el método.
Limitaciones del tamaño de la solicitud POST
Según la configuración del servidor web estándar de SC, el tamaño máximo del cuerpo de la solicitud POST es 128MB.
Consideraciones con JSON
Al trabajar con JSON siempre debes considerar los parámetros cómo cadenas de texto, ya sea la definición de números o booleanos, cómo, por ejemplo:
<data> <PackageHeight>12</PackageHeight> <PackageWeight>2</PackageWeight> <isMandatory>true</isMandatory> </data>
{ "PackageHeight": "12", "PackageWeight": "2", "isMandatory": "true" }
Resultados sin datos
Algunos métodos devuelven documentos XML largos. Por ejemplo, GetProducts devolverá un documento XML muy largo, con una lista de cada producto. La sintaxis de estas respuestas se explica en detalle en la página de referencia del método.
Pero varios métodos no devuelven datos. En esos casos, todavía se devuelve una respuesta. A esto lo llamamos SuccessResponse. Dependiendo del parámetro Format que se pasó, puede estar en JSON o XML (hay pestañas a continuación para ver cualquiera de las dos):
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>13e55362-3cc4-446b-b3db-c1df0900ae9e</RequestId>
<RequestAction>PriceFeed</RequestAction>
<ResponseType></ResponseType>
<Timestamp>2015-07-01T11:11:11+0000</Timestamp>
</Head>
<Body/>
</SuccessResponse>
{
"SuccessResponse": {
"Head": {
"RequestId": "13e55362-3cc4-446b-b3db-c1df0900ae9e",
"RequestAction": "PriceFeed",
"ResponseType": "",
"Timestamp": "2015-07-01T11:11:11+0000"
},
"Body": ""
}
}
Los campos de la sección son siempre los mismos, independientemente de si un método devuelve datos en la sección Body o no. El significado de los datos en una SuccessResponse es el siguiente:
Nombre | Tipo | Descripción |
---|---|---|
RequestId | UUID | Una identificación única de esta solicitud. Usado por Feeds. |
RequestAction | String | El nombre del método que se llamó (es decir, el parámetro Action de la solicitud). |
ResponseType | String | El tipo de respuesta contenido en el cuerpo, o vacío si no hay ninguno. |
Timestamp | DateTime | Hora de envío de la solicitud, en formato ISO 8601. |
Body | Subsection | Datos Adicionales según lo descrito en la documentación |
Del mismo modo, hay un ErrorResponse. También tiene una sección, que a menudo está vacía, pero se puede utilizar para proporcionar información adicional al error. A continuación, se muestra un mensaje de error de ejemplo que tiene un cuerpo (Body):
<?xml version="1.0" encoding="UTF-8"?>
<ErrorResponse>
<Head>
<RequestAction>Price</RequestAction>
<ErrorType>Sender</ErrorType>
<ErrorCode>1000</ErrorCode>
<ErrorMessage>Format Error Detected</ErrorMessage>
</Head>
<Body>
<ErrorDetail>
<Field>StandardPrice</Field>
<Message>Field must contain a positive number with a dot as decimal
separator and 2 decimals (e.g. 120.00)
</Message>
<Value>10.0x</Value>
<SellerSku>Example Seller SKU</SellerSku>
</ErrorDetail>
</Body>
</ErrorResponse>
Response:
{
"ErrorResponse": {
"Head": {
"RequestAction": "ProductUpdate",
"ErrorType": "Platform",
"ErrorCode": "1000",
"ErrorMessage": "Could not save product: 0, A exact match of the document is being processed"
},
"Body": ""
}
}
Aquí también, los campos tienen un significado fijo en todos los métodos:
Nombre | Tipo | Descripción |
---|---|---|
RequestAction | String | El método que provocó el error. |
ErrorType | String | El origen del error (Sender o Platform). |
ErrorCode | Integer | El código de error interno (see Errores). |
ErrorMessage | String | Mensaje de error legible por humanos. |
ErrorDetail | Subsection | La respuesta de error puede contener estas subsecciones en su cuerpo (body). Contiene campos específicos del error. Son provistos a lo sumo 50 ErrorDetails. |
Errores
Como se describió anteriormente, cuando un endpoint no se puede ejecutar, se devuelve un mensaje de error con este aspecto:
<?xml version="1.0" encoding="UTF-8"?>
<ErrorResponse>
<Head>
<RequestAction>GetOrder</RequestAction>
<ErrorType>Sender</ErrorType>
<ErrorCode>[number]</ErrorCode>
<ErrorMessage>E0[number]: [error message]</ErrorMessage>
</Head>
<Body/>
</ErrorResponse>
Los errores están numerados y se proporcionan mensajes de error.
Errores globales
Codigo del Error | Mensaje |
---|---|
1 | E001: Parameter %s is mandatory (El parámetro es obligatorio) |
2 | E002: Invalid Version (Versión inválida) |
3 | E003: Timestamp has expired (Timestamp expiró) |
4 | E004: Invalid Timestamp format (Formato de Timestamp inválido) |
5 | E005: Invalid Request Format (Formato de solicitud inválido) |
6 | E006: Unexpected internal error (Error interno inesperado) |
7 | E007: Login failed. Signature mismatching (falló inicio de sesión. No coincide la firma) |
8 | E008: Invalid Action (Acción inválida) |
9 | E009: Access Denied (Acceso denegado) |
10 | E010: Insecure Channel (Canal inseguro) |
11 | E011: Request too Big (Solicitud demasiado grande) |
429 | E429: Too many requests (Demasiadas solicitudes) |
1000 | Internal Application Error (Error interno de la aplicación) |
30 | E030: Empty Request (Solicitud vacía) |