Pular para o conteúdo principal

Integrando seu e-commerce como canal de venda

Este guia é destinado a Sellers que possuem um e-commerce e querem utilizar o ANYMARKET como centralizador das informações, controlando assim anúncios, preços, estoques e pedidos através da nossa API Backoffice.

O fluxo e-commerce é composto por 4 processos:

  • Sistema de notificação (callback/webhook)
  • Gerenciamento de anúncios (transmissões)
  • Gerenciamento de pedidos
  • Cotação de Frete

Pré requisitos

Certifique-se de possuir as seguintes informações para que consiga realizar os testes na nossa API:

Exemplo de Fluxo E-Commerce utilizando a API Backoffice

image.png

image.png

image.png



Configurando o módulo E-COMMERCE

Para que o ANYMARKET aceite a criação de pedidos do E-COMMERCE, é necessário realizar a configuração do módulo. Para isso siga os passos abaixo:

  • Selecione o menu Configuração > Integrações > Ecommerce;

  • Em seguida clique em Ativar e Salvar.



Configurando o sistema de notificação (callback/webhook)

O primeiro passo do desenvolvimento é o e-commerce possuir um endpoint (callback/webhook), que ficará em standby até o ANYMARKET disparar as chamadas de notificação e com base no payload aplicar as regras dos outros fluxos;

A URL informada é o endereço do serviço REST da aplicação desenvolvida pelo parceiro. Todas as chamadas deverão ter suporte ao método POST e deverão retornar o status 200 ou 201 em caso de sucesso.

Para configurar a URL de notificação, acesse o aplicativo ANYMARKET e navegue até a tela de parâmetros. Informe a URL no campo Callback URL.

image.png


Tipos de notificação

Se a URL de retorno estiver cadastrada corretamente, informaremos a sua aplicação quando ocorrer os seguintes eventos no ANYMARKET:

Inclusão/Atualização de pedidos

Exemplo de Notificação de Pedido
{
"type" : "ORDER",
"content" : {
"id":"1458",
"oi":"99999."
}
}

Inclusão/Alteração de anúncios (Transmissões)

Exemplo de Notificação de Anúncios
{
"type" : "TRANSMISSION",
"content" : {
"id":"123456",
"oi":"99999."
}
}

Indisponibilidade e exceções

O ANYMARKET tentará notificar o parceiro 3 vezes em intervalos regulares.

Gerenciamento de anúncios (transmissões)

Para realizar o gerenciamento de anúncios, o e-commerce poderá utilizar os seguintes endpoints:

Consultar dados do anúncio no ANYMARKET:

Quando o sistema de notificação for acionado o e-commerce precisará fazer um GET na transmissão com o ID informado para recuperar as informações atualizadas do anúncio, podendo ser envio de uma nova publicação ou atualização de preço, estoque e status;

Nesse GET será retornado todas as informações que compõe o produto/sku enviado, ficando por parte da regra de negócio do e-commerce coletar todas as informações pertinentes para criação da publicação dentro do site;

É importante ressaltar que toda movimentação de estoque e preço que o cliente fizer no ANYMARKET será acionado o sistema de notificação, sendo necessário que o consumo seja feito novamente afim de buscar as informações mais atualizadas dos anúncios. Recomendamos que a integração sempre olhe para as tags de preço, estoque e status para que o anuncio fique equivalente as ações tomadas no ANYMARKET. Já as demais informações ficam a critério da regra de negócio.

Exemplo de consulta de anúncios

Exemplo de resposta da Consulta de Anúncios (transmissions) pelo ID via API:

Exemplo de resposta: 200 - OK
{
"id": 0,
"accountName": "string",
"description": "string",
"category": {
"id": 0,
"name": "string",
"path": "string"
},
"brand": {
"id": 0,
"name": "string"
},
"product": {
"id": 0,
"title": "string"
},
"nbm": {
"id": "string",
"description": "string"
},
"origin": {
"id": 0,
"description": "string"
},
"model": "string",
"videoUrl": "string",
"warrantyTime": 0,
"warrantyText": "string",
"height": 0,
"width": 0,
"weight": 0,
"length": 0,
"status": "string",
"transmissionMessage": "string",
"publicationStatus": "ACTIVE",
"marketPlaceStatus": "string",
"priceFactor": 0,
"sku": {
"id": 0,
"title": "string",
"partnerId": "string",
"ean": "string",
"price": 0,
"amount": 0,
"variations": [
{
"id": 0,
"description": "string",
"type": {
"id": 0,
"name": "string",
"visualVariation": true
}
}
],
"discountPrice": 0
},
"characteristics": [
{
"index": 0,
"name": "string",
"value": "string"
}
],
"images": [
{
"id": 0,
"index": 0,
"main": true,
"url": "http://example.com",
"thumbnailUrl": "http://example.com",
"lowResolutionUrl": "http://example.com",
"standardUrl": "http://example.com",
"originalImage": "http://example.com",
"variation": "string",
"status": "UNPROCESSED",
"statusMessage": "string",
"standardWidth": 0,
"standardHeight": 0,
"originalWidth": 0,
"originalHeight": 0
}
]
}

Atualiza status do Anúncio no ANYMARKET:

A partir do momento que que a publicação estiver ativa dentro do E-commerce, pode-se usar deste endpoint para a mudança do status dentro do ANYMARKET, passando assim para o cliente qual o status em que o anuncio se encontra dentro do E-commerce.

Para o field publicationStatus é esperado valores fixos pré-definidos pelo ANYMARKET, esses valores são ACTIVE, PAUSED, CLOSED, CORRUPTED, WITHOUT_STOCK e UNPUBLISHED.

Para o field marketPlaceStatus é esperado que passem o status no qual o produto se encontra dentro do E-commerce, vale ressaltar que todas as alterações de status como por exemplo de ACTIVE para PAUSED o ANYMARKET irá por padrão mudar esse campo para o status correspondente, no caso “pausado dessincronizado”

Exemplo de atualização de status dos anúncios

[PUT] https://sandbox-api.anymarket.com.br/v2/transmissions/{idTransmission}
{
"publicationStatus": "string",
"marketPlaceStatus": "string"
}

Gerenciamento de pedidos

Para realizar o gerenciamento de pedidos, o e-commerce poderá utilizar os seguintes endpoints:

Criar o pedido no ANYMARKET

No momento que o pedido for gerado dentro do E-commerce é esperado que o mesmo seja criado dentro do ANYMARKET para que assim possamos ter o gerenciamento de status do mesmo e efetuar as sinalizações ao parceiro referente ao estoque.

Exemplo de criação de pedido

[POST] https://sandbox-api.anymarket.com.br/v2/orders
{
"accountName": "ECOMMERCE",
"marketPlaceId": "NUMERODOPEDIDONOMARKETPLACE",
"marketPlaceNumber": "NUMERODOPEDIDONOMARKETPLACE",
"marketPlace": "ECOMMERCE",
"createdAt": "2022-09-27T09:01:08-03:00",
"paymentDate": "2022-09-27T09:02:03-03:00",
"status": "PENDING",
"marketPlaceStatus": "PENDENTE DE PAGAMENTO",
"discount": 0,
"freight": 0,
"gross": 310,
"total": 310,
"shipping": {
"city": "Maringá",
"state": "PR",
"country": "BR",
"address": "Rua Emiliano Perneta -1010 - 42 andar – Joao Bosco",
"number": "1010",
"neighborhood": "Joao Bosco",
"street": "Rua Emiliano Perneta",
"comment": "42 andar",
"zipCode": "10120-080",
},
"billingAddress": {
"city": "Maringá",
"state": "PR",
"country": "Brasil",
"number": "99",
"neighborhood": "Alvorada",
"street": "Rua Das Amélias",
"comment": "casa",
"zipCode": "87020035"
},
"buyer": {
"name": "Rick Sanches",
"email": "email322@email3.com",
"document": "57814258707",
"documentType": "CPF",
"cellPhone": "43999274719",
"phone": "43999274719"
},
"payments": [
{
"method": "Cartão de Crédito",
"value": 310,
"installments": 1
}
],
"items": [
{
"sku": {
"partnerId": "34480536"
},
"amount": 1,
"unit": 310,
"gross": 310,
"total": 310,
"discount": 0,
"shippings": [
{
"shippingtype": "Correios PAC"
}
]
}
]
}

Exemplo de resposta da Criação do Pedido Teste via API:

Exemplo de resposta: 201 - Created
Será retornado o pedido criado.

Atualizar o status do pedido para "PAGO"

Quando o pedido tiver seu pagamento confirmado, esperamos que o e-commerce atualize o status do pedido aqui no ANYMARKET.

Exemplo de atualização de status de pedido para "PAGO"

[PUT] https://sandbox-api.anymarket.com.br/v2/orders/{idPedido}
{
"status": "PAID_WAITING_SHIP",
"paymentDate": "2022-09-27T09:02:03-03:00"
}

Atualizar o status do pedido para "CANCELADO"

Caso o pedido seja cancelado no e-commerce, esperamos que a integração atualize o status do pedido aqui no ANYMARKET.

Exemplo de atualização de status de pedido para "CANCELADO"

[PUT] https://sandbox-api.anymarket.com.br/v2/orders/{idPedido}
{
"status": "CANCELED"
}

Consultar dados do pedidos no ANYMARKET

Quando o ANYMARKET notificar sobre uma alteração de pedido, a integração deverá consultar os dados atualizados do pedido e propagar para o e-commerce.

Exemplo de consulta de dados do pedido no ANYMARKET

Exemplo de resposta da Consulta de Pedidos pelo ID via API:

Exemplo de resposta: 200 - OK
{
"id": 109542,
"accountName": "ECOMMERCE",
"marketPlaceId": "1000058",
"marketPlaceNumber": "10000660",
"marketPlace": "ECOMMERCE",
"createdAt": "2022-07-08T12:01:08Z",
"paymentDate": "2022-07-08T12:02:03Z",
"transmissionStatus": "OK",
"status": "PAID_WAITING_SHIP",
"marketPlaceStatus": "PAID_WAITING_SHIP",
"discount": 0,
"freight": 0,
"sellerFreight": 0,
"interestValue": 0,
"gross": 310,
"total": 310,
"shipping": {
"city": "Maringá",
"state": "PR",
"stateNameNormalized": "Paraná",
"country": "BR",
"countryAcronymNormalized": "BR",
"countryNameNormalized": "BRASIL",
"address": "Rua Emiliano Perneta -1010 - 42 andar – Joao Bosco",
"number": "1010",
"neighborhood": "Joao Bosco",
"street": "Rua Emiliano Perneta",
"comment": "42 andar",
"zipCode": "10120-080"
},
"billingAddress": {
"city": "Maringá",
"state": "PR",
"stateNameNormalized": "Paraná",
"country": "Brasil",
"countryAcronymNormalized": "BR",
"countryNameNormalized": "BRASIL",
"number": "99",
"neighborhood": "Alvorada",
"street": "Rua Das Amélias",
"comment": "casa",
"zipCode": "87020035",
"shipmentUserName": "Rick Sanches",
"shipmentUserDocument": "57814258707",
"shipmentUserDocumentType": "CPF"
},
"anymarketAddress": {
"country": "BR",
"state": "PR",
"stateAcronymNormalized": "PR",
"city": "Maringá",
"zipCode": "10120-080",
"neighborhood": "Joao Bosco",
"address": "Rua Emiliano Perneta -1010 - 42 andar – Joao Bosco",
"street": "Rua Emiliano Perneta",
"number": "1010",
"comment": "42 andar"
},
"buyer": {
"name": "Rick Sanches",
"email": "email322@email3.com",
"document": "57814258707",
"documentType": "CPF",
"phone": "(43)99927-4719",
"documentNumberNormalized": "57814258707"
},
"payments": [
{
"method": "Cartão de Crédito",
"value": 310,
"marketplaceId": "1",
"paymentMethodNormalized": "CARTÃO DE CRÉDITO",
"paymentDetailNormalized": "CARTÃO DE CRÉDITO"
}
],
"items": [
{
"product": {
"id": 2512088,
"title": "Produto Variação de Exemplo - ANYMARKET"
},
"sku": {
"id": 1735266,
"title": "Produto Variação de Exemplo - ANYMARKET - Título Sku 01 - AMARELO",
"partnerId": "PRDVAR-01-1-AMARELO"
},
"amount": 1,
"unit": 310,
"gross": 310,
"total": 310,
"discount": 0,
"idInMarketPlace": "PRDVAR-01-1-AMARELO",
"orderItemId": 156726,
"freeShipping": false,
"stocks": [
{
"stockLocalId": 6245,
"amount": 1,
"stockName": "Estoque Físico"
}
]
}
],
"deliverStatus": "UNKNOWN",
"idAccount": 5447,
"fulfillment": false
}

COTAÇÃO DE FRETE

O e-commerce pode ter a opção de realizar a cotação de frete no ANYMARKET, afim de receber os valores de frete do seller.

Exemplo de cotação de frete

[POST] https://sandbox-api.anymarket.com.br/v2/freight/quotes
{
"zipCode": "87030030",
"products": [
{
"skuId": "231220003",
"amount": 1,
"dimensions": {
"height": 30.9,
"width": 53.2,
"weight": 1.6,
"length": 1.1
}
}
],
"marketPlace": "ECOMMERCE"
}

Exemplo de resposta da Cotação de Frete via API:

Exemplo de resposta: 200 - OK
{
"marketPlace": "ECOMMERCE",
"zipCode": "string",
"products": [
{
"skuId": "string",
"amount": 0,
"dimensions": {
"height": 0,
"width": 0,
"weight": 0,
"length": 0
},
"stockAmount": 0,
"additionalDeliveryTime": 0,
"price": 0,
"discountPrice": 0
}
],
"quotes": [
{
"carrierName": "string",
"serviceName": "string",
"deliveryTime": 0,
"freightType": "NORMAL",
"price": 0
}
],
"defaultFreight": {
"carrierName": "string",
"serviceName": "string",
"deliveryTime": 0,
"freightType": "NORMAL",
"price": 0
},
"missingSkus": {}
}