API utilizada al crear un canal ERP tipo plataforma en Marketplaces Hub
Para comenzar a desarrollar la integración de la plataforma ERP con Marketplaces Hub utilizando las nuevas API pasivas de Marketplaces Hub, es necesario entender que el flujo de procesamiento requiere que el canal ERP tenga un par de credenciales de acceso para utilizar las API. autenticado.
Este par de claves de autenticación se puede generar creando una nueva integración de Marketplaces Hub de tipo plataforma con el canal ERP.
Los entornos de producción y aprobación están divididos y se puede acceder a ellos a través de las siguientes URL:
Las solicitudes POST, PUT y DELETE tienen algunos encabezados útiles en su respuesta, que contienen el ID de la solicitud generada (Request-Id) y los límites de solicitud para cada punto final (X-RateLimit -Limit y X-RateLimit-Remaining). Si tiene problemas con una solicitud, simplemente informe al equipo de soporte del ID de la solicitud, ya que esto facilitará la obtención de los registros y reducirá el tiempo necesario para solucionar el problema.
Cache-Control: no-cache, private
Content-Type: application/json
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
Request-Id: 1R17E20190510133646C1557506206412V9676
Las API de Marketplaces Hub tienen dos niveles de autenticación: autenticación de aplicaciones y autenticación de canal de integración (canal tipo plataforma ERP).
Todas las aplicaciones integradas tienen un token de identificación llamado AppToken que debe enviarse en el encabezado de todas las solicitudes, ya que sin él no es posible identificar la aplicación conectada y su conexión será denegada inmediatamente.
En producción, cada aplicación tiene un AppToken único; sin embargo, en la aprobación, todas las aplicaciones deben usar el AppToken de homologación, como se muestra en el siguiente ejemplo:
App-Token: homologacao
Content-Type: application/json
cache-control: no-cache
El segundo nivel de autenticación es el de integración, es decir, de la cuenta del vendedor que se desea solicitar.
La autenticación de integración se realiza mediante un token de acceso temporal, generado en la autenticación y que debe ser enviado en el encabezado de todas las solicitudes en el índice Autorización (excepto la solicitud de autenticación, donde solo se debe enviar el AppToken).
App-Token: homologacao
Content-Type: application/json
cache-control: no-cache
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvYXBpLm9tbmkud2Fwc3RvcmUuY29tLmJyXC8iLCJhdWQiOiJBcGkgZGUgVGVzdGUiLCJpYXQiOjE1NTc0MjgzMjcsIm5iZiI6MTU1NzQyODMyNywiZXhwIjoxNTU3NDMwMTI3LCJ0aWQiOiIwOWI4ZGI5YWYxNjhkMDRhMmE2OTBhNTQ1NmEyZWRmMSJ9.Gfvm1Z54pUXZhlNhafV1fEoOBiMGS_sku4o2a8CKWmY
En producción tenemos varios servicios de protección conectados (firewall, protección anti-DDoS, TLS siempre actualizado, entre otros) y todos estos servicios trabajan para garantizar la integridad del sistema (principalmente porque los datos que pasan por la plataforma es confidencial (números de tarjetas de datos, direcciones, etc.).
Para que su sistema no sea bloqueado por nuestros servicios de seguridad y pueda crear una comunicación estable con nuestras API de producción, es extremadamente importante que todas las solicitudes se envíen agentes de usuario válidos, todas las conexiones se realizan utilizando el protocolo HTTPS y que su sistema admite los certificados TLS/SSL más actualizados (use un servicio en línea como SSL Labs para comprobar qué certificado TLS/SSL es compatible con los servidores de producción).
Además, el uso de una IP fija en La producción de solicitudes también es muy importante, ya que nuestro equipo de infraestructura y seguridad puede crear reglas específicas para esta IP, lo que aumenta en gran medida la seguridad y reduce el riesgo de bloqueo.
En el entorno de aprobación, el riesgo de bloqueo por seguridad Los servicios son bajos, así que siempre desarrolle su aplicación enfocándose en los niveles máximos de seguridad que se requerirán en producción.
Recurso responsable de generar el token de autenticación de integración.
Para este recurso el único token que se debe enviar en el encabezado es el AppToken, ya que en este momento tienes aún no tendrá el token de integración.
Los datos enviados en el cuerpo (ApiKey y SecretKey) están relacionados con la cuenta de integración del Vendedor (cuenta de aprobación o producción).
Después de generar el token, tendrá una validez de 30 minutos y deberá enviarse en el encabezado Autorización de otras API.
Importante: Siempre que Se genera un nuevo token, el anterior será revocado y perderás el acceso inmediatamente.
Información del endpoint | |
---|---|
Ambiente | Sandbox / Producción |
Estado de éxito | 201 Created |
{
"apiKey": "1234A5678B9012C3456",
"secretKey":"3456D9012E5678F1234"
}
Campo | Tipo | Obligatorio | Descripción |
---|---|---|---|
apiKey | String | Si | Clave pública de API de integración del vendedor |
secretKey | String | Si | Clave privada de la API de integración del vendedor |
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvYXBpLm9tbmkud2Fwc3RvcmUuY29tLmJyXC8iLCJhdWQiOiJBcGkgZGUgVGVzdGUiLCJpYXQiOjE1NTc0NTc2OTYsIm5iZiI6MTU1NzQ1NzY5NiwiZXhwIjoxNTU3NDU5NDk2LCJ0aWQiOiI5MzRjZTY2ZGY5MDQ1YWNmMzY1MGIyZWEzNWUxYjMwMSJ9.Ii148QGob19NI2-fsMbqvMpmVFyGR3bkJjSbOxaCxmg"
}
Campo | Tipo | Descripción |
---|---|---|
token | String | Token de acceso generado para las API |
Información del endpoint | |
---|---|
Ambiente | Sandbox / Producción |
Estado de éxito | 200 Ok |
Offset/Limit | Obligatorio el envío de los parámetros offset y limit en la URL de solicitud. Ejemplo de requisición: /v1/logistic/orders/{id}/shipment_labels?offset=0&limit=100 Valor máximo para el parámetro límite: 100 |
{
"etiquetas": [
{
"conteudo": "YXJxdWl2byB0ZXN0ZQ==",
"tipo": "pdf",
"canal": "string",
"idPedidoCanal": "123"
},
{
"conteudo": "YXJxdWl2byB0ZXN0ZQ==",
"tipo": "zpl",
"canal": "string",
"idPedidoCanal": "123"
},
{
"conteudo": "YXJxdWl2byB0ZXN0ZQ==",
"tipo": "png|jpg",
"canal": "string",
"idPedidoCanal": "123"
}
],
"info": {
"filtros": [],
"prev": "",
"self": "http://localhost/v1/logistic/orders/13127721/shipment_labels?offset=0&limit=100",
"next": "",
"offset": 0,
"limit": 100,
"exibindo": 0,
"total": 0
}
}
Campo | Tipo | Descripción |
---|---|---|
etiquetas | Data Collection | Lista de etiquetas de pedido |
conteudo | String | Contenido de la etiqueta convertido a base64 |
tipo | String | Tipo de archivo antes de convertir a base64 |
canal | String | Canal de Marketplace donde se generó el pedido |
idPedidoCanal | Number | ID del pedido en el canal del mercado donde se generó |
info | Object | Información sobre el listado (paginación, filtros, total de artículos, etc.) |
filtros | Object (key/value) | Filtros aplicados a la URL |
prev | String | Pagina anterior |
self | String | Página actual |
next | String | Página siguiente |
offset | Number | Compensación solicitada |
limit | Number | Límite solicitado |
exibindo | Number | Número de registros que se muestran en la página actual |
total | Number | Registros totales en todas las páginas. |
Información del endpoint | |
---|---|
Ambiente | Sandbox / Producción |
Estado de éxito | 200 Ok |
Limitar solicitudes por minuto | 10 |
{
"canais":[
{
"id":123,
"hash":"abc123",
"nome":"Canal A",
"ativo":true
},
{
"id":456,
"hash":"def456",
"nome":"Canal B",
"ativo":false
}
],
"info":{
"total":2
}
}
Campo | Tipo | Descripción |
---|---|---|
canais | Data Collection | Canales conectados |
id | Number | ID de canal en HUB |
hash | String | Hash de canal en HUB |
nome | String | Nombre dado al canal por el vendedor |
ativo | Boolean | Define si el canal está activo en el HUB |
info | Object | Información sobre cómo devolver la consulta |
total | Number | Total de canales devueltos |
Recurso disponible para consultar el existencias de seguridad de productosEste recurso se puede utilizar para comprobar la cantidad de stock de seguridad disponible para los productos de tu tienda. Importante: Si el producto no dispone de stock de seguridad, no se devolverá
Información del endpoint | |
---|---|
Ambiente | Sandbox / Producción |
Estado de éxito | 200 Ok |
filtros | idCanalIntegracao: Filtrar la búsqueda de productos utilizando el ID del canal de integración Exemplo de requisição: /v1/erp/products/security-stock?idCanalIntegracao=16|22|708 sku: Filtrar la búsqueda de productos usando el sku Exemplo de requisição: /v1/erp/products/security-stock?sku=produto-teste|novo-produto |
Limitar solicitudes por minuto | 40 |
Offset/Limit | Obligatorio el envío de los parámetros offset y limit en la URL de solicitud. Ejemplo de requisición: /v1/erp/products/security-stock?offset=0&limit=100 Valor máximo para el parámetro límite: 100 |
{
"produtosEstoqueSeguranca": {
"Wapstore Marketplace": [
{
"idProduto": 4,
"skuProduto": "produto-2-tete-36",
"idCanalIntegracao": 459,
"qtdEstoqueSeguranca": 12
}
],
"Shopee": [
{
"idProduto": 9,
"skuProduto": "produto-teste-1",
"idCanalIntegracao": 708,
"qtdEstoqueSeguranca": 10
}
]
},
"info": {
"filtros": [],
"prev": "",
"self": "https://omni.wapstore.com.br/v1/erp/products/security-stock?offset=0&limit=5",
"next": "https://omni.wapstore.com.br/v1/erp/products/security-stock?offset=5&limit=5",
"offset": 0,
"limit": 2,
"exibindo": 2,
"total": 55
}
}
Campo | Tipo | Descripción |
---|---|---|
produtosEstoqueSeguranca | Object | Lista de productos devueltos por la consulta |
nomeCanalIntegracao | Data Collection | Nombre del canal devuelto por la consulta |
idProduto | Number | ID de producto de plataforma |
skuProduto | String | SKU del producto |
idCanalIntegracao | Number | Integración de ID de canal en HUB |
qtdEstoqueSeguranca | Number | Cantidad de stock de seguridad |
info | Object | Información sobre el resultado de la consulta |
filtros | Array | Array de filtros utilizados en la consulta. |
prev | String | Página anterior |
self | String | Página actual |
next | String | Página siguiente |
offset | Number | Compensación solicitada |
limit | Number | Límite solicitado |
exibindo | Number | Número de registros que se muestran en la página actual |
total | Number | Registros totales en todas las páginas |
Recurso responsable de cambiar el existencias de seguridad de un producto
Este recurso se puede utilizar para actualizar un existencias de seguridad existente o crear uno nuevo.
Importante: El producto debe estar registrado en el HUB
Información del endpoint | |
---|---|
Ambiente | Sandbox / Producción |
Estado de éxito | 200 Ok |
{
"idCanalIntegracao": 205,
"sku": "TESTE-ITEM02",
"estoqueSeguranca": 8
}
Campo | Tipo | Obligatorio | Descripción |
---|---|---|---|
idCanalIntegracao | Number | Si | Integración de ID de canal en HUB Valor mínimo: 1 |
sku | String | Si | SKU del producto Talla minima: 1 | Talla máxima: 255 |
estoqueSeguranca | Number | Si | Cantidad de stock de seguridad Valor mínimo: 0 |
{
"ProdutoEstoqueSeguranca": [
{
"idProduto": 3,
"idAtributoSimples": 2,
"idCanalIntegracao": 207,
"idIntegracao": 3,
"estoqueSeguranca": 10,
"dataCadastro": "2024-02-15 20:28:35",
"dataAtualizacao": "2024-02-15 21:39:29"
},
{
"idProduto": 3,
"idAtributoSimples": 3,
"idCanalIntegracao": 207,
"idIntegracao": 3,
"estoqueSeguranca": 10,
"dataCadastro": "2024-02-15 20:28:35",
"dataAtualizacao": "2024-02-15 21:39:29"
},
{
"idProduto": 3,
"idAtributoSimples": 4,
"idCanalIntegracao": 207,
"idIntegracao": 3,
"estoqueSeguranca": 10,
"dataCadastro": "2024-02-15 20:28:35",
"dataAtualizacao": "2024-02-15 21:39:29"
}
]
}
Campo | Tipo | Descripción |
---|---|---|
ProdutoEstoqueSeguranca | Data Collection | Listado de productos con stock de seguridad modificado/creado |
idProduto | Number | ID del producto |
idAtributoSimples | Number | ID de atributo simple |
idCanalIntegracao | Number | Integración de ID de canal en HUB |
idIntegracao | Number | integración de identificación |
estoqueSeguranca | Number | Cantidad de stock de seguridad |
dataCadastro | String | Fecha de registro |
dataAtualizacao | String | Fecha de actualización |
Recurso disponible para consultar productos con precios personalizados en el HUB.Esta funcionalidad se puede utilizar para consultar productos con precios personalizados en tu tienda, retornando precio "desde" y precio "por"Importante: Si el producto no tiene precio personalizado, no será devuelto
Información del endpoint | |
---|---|
Ambiente | Sandbox / Producción |
Estado de éxito | 200 Ok |
filtros | idCanalIntegracao: Filtrar la búsqueda de productos utilizando el ID del canal de integración Exemplo de requisição: /v1/erp/products/customized-prices?idCanalIntegracao=16|22|708 sku: Filtrar la búsqueda de productos a través del sku | Nivel de producto Exemplo de requisição: /v1/erp/products/customized-prices?sku=produto-teste|novo-produto |
Limitar solicitudes por minuto | 40 |
Offset/Limit | Obligatorio el envío de los parámetros offset y limit en la URL de solicitud. Ejemplo de requisición: /v1/erp/products/customized-prices?offset=0&limit=100 Valor máximo para el parámetro límite: 100 |
{
"produtosPrecoPersonalizado": {
"Dafiti": [
{
"idProduto": 77,
"skuProduto": "Teste",
"idCanalIntegracao": 177,
"precoDePersonalizado": "100,00",
"precoPorPersonalizado": "80,00"
}
],
"Mercado Livre": [
{
"idProduto": 58,
"skuProduto": "produto-teste",
"idCanalIntegracao": 177,
"precoDePersonalizado": "20,00",
"precoPorPersonalizado": "10,00"
}
]
},
"info": {
"filtros": [],
"prev": "",
"self": "https://omni.wapstore.com.br/v1/erp/products/customized-prices?offset=0&limit=2",
"next": "https://omni.wapstore.com.br/v1/erp/products/customized-prices?offset=2&limit=2",
"offset": "0",
"limit": "2",
"exibindo": 2,
"total": "14"
}
}
Campo | Tipo | Descripción |
---|---|---|
produtosPrecoPersonalizado | Object | Objeto con devolución de canales y sus respectivos productos con precios personalizados |
nomeCanalIntegracao | Data Collection | Propiedad dinámica que devuelve el nombre del canal. |
idProduto | Number | ID de producto en HUB |
skuProduto | String | SKU del producto en HUB |
idCanalIntegracao | Number | Integración de ID de canal en HUB |
precoDePersonalizado | Number | Precio “desde” personalizado del producto |
precoPorPersonalizado | Number | Precio "por" producto personalizado |
info | Object | Información de paginación y filtros. |
filtros | Array | Matriz de filtros utilizados en la consulta. |
prev | String | Página anterior |
self | String | Página actual |
next | String | Página siguiente |
offset | Number | Compensación solicitada |
limit | Number | Límite solicitado |
exibindo | Number | Número de registros que se muestran en la página actual |
total | Number | Registros totales en todas las páginas. |
Recurso disponible para cambiar/crear precios personalizados para productos registrados en el HUB.
Con esta funcionalidad es posible que un mismo producto tenga diferentes precios por canal de integración. Esto se puede aplicar en ambos niveles: (Producto/Variación).
Importante: El producto debe estar registrado en el HUB.
Información del endpoint | |
---|---|
Ambiente | Sandbox / Producción |
Estado de éxito | 200 Ok |
Limitar solicitudes por minuto | 60 |
{
"precos": [
{
"idCanalIntegracao": 1,
"skuProduto": "ABC123",
"precoDe": 25.50,
"precoPor": 20.00
},
{
"idCanalIntegracao": 2,
"skuProduto": "XYZ789",
"precoDe": 35.75,
"precoPor": 30.50
},
{
"idCanalIntegracao": 1,
"skuProduto": "DEF456",
"precoDe": 18.99,
"precoPor": 15.49
}
]
}
Campo | Tipo | Obligatorio | Descripción |
---|---|---|---|
precos | Data Collection | Si | Lista de precios personalizada por Canal de Integración Talla minima: 1 | Talla máxima: 100 |
idCanalIntegracao | Number | Si | Integración de ID de canal en HUB Valor mínimo: 1 |
skuProduto | String | Si | SKU del producto Talla minima: 1 | Talla máxima: 250 |
precoDe | Number | Si | Precio del producto 'desde' Valor mínimo: 0.01 | Valor máximo: 999999.99 |
precoPor | Number | Si | Precio 'por' del producto Valor mínimo: 0.01 | Valor máximo: 999999.99 |
{
"resultados": [
{
"skuProduto": "ABC123",
"sucessos": [
{
"idCanalIntegracao": 1,
"precoDe": 25.50,
"precoPor": 20.00
},
{
"idCanalIntegracao": 2,
"precoDe": 35.75,
"precoPor": 30.50
}
],
"erros": []
},
{
"skuProduto": "XYZ789",
"sucessos": [],
"erros": [
{
"idCanalIntegracao": 1,
"mensagem": "Produto não encontrado"
}
]
},
{
"skuProduto": "DEF456",
"sucessos": [
{
"idCanalIntegracao": 1,
"precoDe": 18.99,
"precoPor": 15.49
}
],
"erros": []
}
]
}
Campo | Tipo | Descripción |
---|---|---|
resultados | Data Collection | Resultados de procesamiento de precios personalizados |
skuProduto | String | SKU del producto |
sucessos | Data Collection | Precios personalizados creados/cambiados exitosamente |
idCanalIntegracao | Number | Integración de ID de canal en HUB |
precoDe | Number | Precio del producto 'desde' |
precoPor | Number | Precio 'por' del producto |
erros | Data Collection | Errores que ocurrieron al crear/cambiar precios personalizados |
idCanalIntegracao | Number | Integración de ID de canal en HUB |
mensagem | String | Información de error |
Recurso responsable de eliminar un precio personalizado.
Información del endpoint | |
---|---|
Ambiente | Sandbox / Producción |
Estado de éxito | 204 No Content |
/v1/erp/products/customized-prices/{idCanalIntegracao}/{skuProduto} | Integración de ID de canal en HUB |
/v1/erp/products/customized-prices/{idCanalIntegracao}/{skuProduto} | SKU del producto |
Recurso disponible para cambiar/crear precios personalizados para los anuncios del Hub que se publican en MercadoLivre.
Importante: El anuncio debe estar publicado en MercadoLibre.
Información del endpoint | |
---|---|
Ambiente | Sandbox / Producción |
Estado de éxito | 200 Ok |
Limitar solicitudes por minuto | 60 |
{
"precos": [
{
"idCanalIntegracao": 1,
"prefixoCanalIntegracao": "MLB",
"skuProduto": "ABC123",
"precoDe": 25.50,
"precoPor": 20.00
},
{
"idCanalIntegracao": 1,
"prefixoCanalIntegracao": "MLP",
"skuProduto": "ABC123",
"precoDe": 35.75,
"precoPor": 30.50
},
{
"idCanalIntegracao": 1,
"prefixoCanalIntegracao": "MLF",
"skuProduto": "DEF456",
"precoDe": 18.99,
"precoPor": 15.49
}
]
}
Campo | Tipo | Obligatorio | Descripción |
---|---|---|---|
precos | Data Collection | Si | Lista de precios personalizada para anuncios de MercadoLibre Talla minima: 1 | Talla máxima: 100 |
idCanalIntegracao | Number | Si | ID de integración de canal en HUB Valor mínimo: 1 |
prefixoCanalIntegracao | String | Si | Prefijo configurado para diferenciar tipos de anuncios Talla minima: 1 | Talla máxima: 10 |
skuProduto | String | Si | SKU del producto Talla minima: 1 | Talla máxima: 250 |
precoDe | Number | Si | Precio del producto 'desde' Valor mínimo: 0.01 | Valor máximo: 999999.99 |
precoPor | Number | Si | Precio 'por' del producto Valor mínimo: 0.01 | Valor máximo: 999999.99 |
{
"resultados": [
{
"skuProduto": "ABC123",
"sucessos": [
{
"idCanalIntegracao": 1,
"prefixoCanalIntegracao": "MLB",
"codigoMlb": "MLB1999999999",
"precoDe": 25.50,
"precoPor": 20.00
},
{
"idCanalIntegracao": 1,
"prefixoCanalIntegracao": "MLP",
"codigoMlb": "MLB2999999999",
"precoDe": 35.75,
"precoPor": 30.50
}
],
"erros": []
},
{
"skuProduto": "DEF456",
"sucessos": [],
"erros": [
{
"idCanalIntegracao": 1,
"prefixoCanalIntegracao": "MLF",
"mensagem": "Não foi possível localizar anúncios Grátis para este SKU."
}
]
}
]
}
Campo | Tipo | Descripción |
---|---|---|
resultados | Data Collection | Resultados de procesamiento de precios personalizados |
skuProduto | String | SKU del producto |
sucessos | Data Collection | Precios personalizados creados/cambiados exitosamente |
idCanalIntegracao | Number | ID de integración de canal en HUB |
prefixoCanalIntegracao | String | Prefijo para el cual la solicitud de personalización de precios fue exitosa |
codigoMlb | String | Código MLB del anuncio al que se aplicó la personalización. |
precoDe | Number | Precio del producto 'desde' |
precoPor | Number | Precio 'por' del producto |
erros | Data Collection | Errores que ocurrieron al crear/cambiar precios personalizados |
idCanalIntegracao | Number | Integración de ID de canal en HUB |
prefixoCanalIntegracao | String | Prefijo por el que hubo error al aplicar la personalización de precios |
mensagem | String | Información de error |
Recurso responsable de eliminar un precio personalizado.
Información del endpoint | |
---|---|
Ambiente | Sandbox / Producción |
Estado de éxito | 204 No Content |
/v1/erp/mercadolivre/items/customized-prices/{idCanalIntegracao}/{prefixoCanalIntegracao}/{skuProduto} | Integración de ID de canal en HUB |
/v1/erp/mercadolivre/items/customized-prices/{idCanalIntegracao}/{prefixoCanalIntegracao}/{skuProduto} | Prefijo configurado para diferenciar tipos de anuncios |
/v1/erp/mercadolivre/items/customized-prices/{idCanalIntegracao}/{prefixoCanalIntegracao}/{skuProduto} | SKU del producto |
Todas las solicitudes que resulten en errores tendrán el mismo patrón de devolución. El código de estado HTTP devuelto indicará si el problema está relacionado con la solicitud (sitio-cliente - 4xx) o con el procesamiento (sitio-servidor - 5xx) y el mensaje describirá detalles adicionales sobre el problema.
{
"error": "Requisição rejeitada.",
"details": [
"O SKU 'TESTEAPISIMPLES' já está cadastrado"
]
}
Campo | Tipo | Descripción |
---|---|---|
error | String | Información sobre el error presentado. |
details | Array de strings | Detalles sobre el error presentado (devuelto en algunos casos de error) |