Consumo de Pedidos - Queues

Baixar pedidos (fila de integração)

Quando um pedido é realizado ou tem o status atualizado pelo o marketplace, o pedido é colocado em uma fila de integração e fica disponível no recurso GET /queues/orders.

Para baixar um pedido (ou atualização):

Exemplo de Solicitação no Endpoint "/queues/orders"
1
curl --request GET \
2
--url https://api.skyhub.com.br/queues/orders \
3
--header 'Accept: application/json' \
4
--header 'Content-Type: application/json' \
5
--header 'X-User-Email: [email protected]' \
6
--header 'X-Api-Key: YOUR API KEY HERE' \
7
--header 'X-Accountmanager-Key: token_account'
Copied!
Será retornado o json de um pedido como no exemplo abaixo:
Exemplo de Resposta do Endpoint "/queues/orders"
1
{
2
"updated_at": "2019-10-16T17:45:38-03:00",
3
"total_ordered": 391.45,
4
"tags": [],
5
"sync_status": "SYNCED",
6
"status": {
7
"type": "APPROVED",
8
"label": "Aprovado (SkyHub)",
9
"code": "payment_received"
10
},
11
"shipping_method": "Courier",
12
"shipping_estimate_id": "",
13
"shipping_cost": 24.25,
14
"shipping_carrier": "Courier",
15
"shipping_address": {
16
"street": "Av Central da Praia do Rosa",
17
"secondary_phone": "48 D0",
18
"region": "SC",
19
"reference": "Mercado Pimenta Rosa",
20
"postcode": "88780000",
21
"phone": "51 00000000",
22
"number": "01",
23
"neighborhood": "Ibiraquera",
24
"full_name": "marco antonio",
25
"detail": "Mercado Pimenta Rosa",
26
"country": "BR",
27
"complement": "Mercado Pimenta Rosa",
28
"city": "Imbituba"
29
},
30
"shipped_date": "",
31
"shipments": [],
32
"seller_shipping_cost": 0.0,
33
"placed_at": "2019-10-16T17:25:23-03:00",
34
"payments": [{
35
"value": 391.45,
36
"transaction_date": "2019-10-16T17:32:00-03:00",
37
"status": null,
38
"sefaz": {
39
"type_integration": "1",
40
"payment_indicator": "1",
41
"name_payment": "Cartão de Crédito",
42
"name_card_issuer": "Visa",
43
"id_payment": "3",
44
"id_card_issuer": "01"
45
},
46
"parcels": 3,
47
"method": "CREDIT_CARD",
48
"description": "No valor de: 391.45",
49
"card_issuer": "00000000000000",
50
"autorization_id": "000000"
51
}],
52
"items": [{
53
"special_price": 45.9,
54
"shipping_cost": 24.25,
55
"remote_store_id": null,
56
"qty": 8,
57
"product_id": "12222",
58
"original_price": 45.9,
59
"name": "Protetor Solar Sundown FPS 50 200mL",
60
"id": "00000",
61
"gift_wrap": null,
62
"detail": null
63
}],
64
"invoices": [],
65
"interest": 0.0,
66
"imported_at": "2019-10-16T17:30:14-03:00",
67
"import_info": {
68
"ss_name": "Lojas Americanas",
69
"remote_id": "02-000000000",
70
"remote_code": "000000000000"
71
},
72
"exported_at": "2019-10-16T17:32:19-03:00",
73
"estimated_delivery_shift": null,
74
"estimated_delivery": "2019-11-01T00:00:00-03:00",
75
"discount": 0.0,
76
"delivery_contract_type": "B2WENDIREC",
77
"delivered_date": null,
78
"customer": {
79
"vat_number": "00000000000",
80
"phones": ["51 00000000", "48 000000000"],
81
"name": "marco antonio",
82
"gender": "",
83
"email": "[email protected]",
84
"date_of_birth": "1979-07-26"
85
},
86
"code": "Lojas Americanas-000000000000",
87
"channel": "Lojas Americanas",
88
"calculation_type": "b2wentregadirect",
89
"billing_address": {
90
"street": "Avenida Alberto Pasqualini",
91
"secondary_phone": "48 000000000",
92
"region": "RS",
93
"reference": "pizzaria",
94
"postcode": "91215000",
95
"phone": "51 00000000",
96
"number": "000",
97
"neighborhood": "Jardim Sabará",
98
"full_name": "marco antonio",
99
"detail": "comercio - pizzaria",
100
"country": "BR",
101
"complement": "comercio",
102
"city": "Porto Alegre"
103
},
104
"approved_date": "2019-10-16T20:47:36.690000"
105
}
Copied!
Importante saber que não é possível consumir um pedido especificamente, a fila deve ser consumida por COMPLETO sempre com o que estiver disponível de informação, e mesmo que por exemplo tenham 20 pedidos, não é possível controlar qual será consumido pois os registros vão ser feitos aleatoriamente e por isso novamente, a importância de sempre consumir a fila por completo.

Dicas sobre a fila de integração de pedidos

Verificar o campo status[code]

Ao recuperar um pedido da fila de integração, a integração deve verificar o campo status[code] para saber qual foi o tipo de evento: pedido novo ou uma atualização (aprovação ou cancelamento).

GET queues/orders sempre retorna o status atual do pedido

O pedido entra na fila sempre que houver uma atualização, e a integração terá a informação do pedido na situação da ultima atualização.
Imagine o seguinte cenário:
    1.
    O pedido é realizado no marketplace (status NEW) e entra na fila queues/orders
    2.
    A integração não consome o recurso queues/orders
    3.
    O pedido tem o pagamento confirmado no marketplace (status APPROVED) e entra novamente na fila queues/orders
    4.
    Nesse momento a integração faz uma chamada GET queues/orders. O JSON do pedido retornado conterá o status "APPROVED" (status atual do pedido) ao inves do status "NEW" (status que o pedido tinha quando entrou na fila pela primeira vez). Como o pedido entrou duas vezes na fila, se repetir a chamada GET queues/orders (sem que haja atualização do marketplace), a integração receberá o mesmo json novamente.

Marcar pedido como processado

Ao consumir o recurso GET queues/orders, o pedido sai da fila de integração e fica "aguardando" por 5 minutos a notificação de processado por parte da integração: DELETE queues/orders.
Se a SkyHub não receber a confirmação de que a integração conseguiu processar o pedido com sucesso, o pedido voltará para a fila depois de 5 minutos. Para confirmar que o evento foi processo com sucesso, é preciso fazer uma requisição como no exemplo abaixo.
1
curl --request DELETE \
2
--url https://api.skyhub.com.br/queues/orders/Marketplace-000000002 \
3
--header 'Accept: application/json' \
4
--header 'Content-Type: application/json' \
5
--header 'X-User-Email: [email protected]' \
6
--header 'X-Api-Key: YOUR-API-KEY-HERE' \
7
--header 'X-Accountmanager-Key: token_account'
Copied!
Como uma boa prática, aconselhamos o DELETE na sequencia do GET, para evitar possíveis furos no consumo de pedidos.
É obrigatório consumir todos os pedidos da fila de integração (Queues) com status NEW, pra que os produtos sejam empenhados em seus estoques.

Porque é obrigatório?

Para não ter divergência de estoque Disponível X estoque Empenhado
Se não consumir os pedidos o que pode acontecer? Podemos vender produtos sem estoque, uma vez que o empenho não existe na plataforma receberemos o estoque como Estoque Disponível, consequentemente disponibilizaremos o estoque errado para o Marketplace.
Vale Lembrar:
    As plataformas que não se adequarem a essa regra de negócios podem arcar com prejuízo do seller.
    Para a Skyhub, deve ser enviado apenas o estoque disponível.
Last modified 29d ago