Controle de fila de integração de pedidos (Feed)
Como controlar a fila de integração de pedidos utilizando o order feed
O Orders Feed é uma lista de pedidos disponíveis para serem integrados por parceiros desenvolvedores. O Feed não é uma lista de pedidos, mas uma lista de eventos. Por exemplo, se um pedido é recebido e confirmado na plataforma, é disparado um evento que aparece como um dos objetos no retorno do endpoint.
Integração de pedidos: Feed vs. Orders
Ao utilizar o endpoint de get orders para integrar pedidos, o método disponibiliza os dados gerais dos pedidos sem o controle de quais dados são enviados na integração.
Dessa forma, Orders Feed foi desenvolvido especificamente para acompanhar as atualizações de pedidos e garantir o controle na integração. Assim, podemos evitar riscos de pedidos duplicados ou falta de integração de algum pedido.
Migrando sua loja para Vnda
Se você já possui uma integração baseada numa lista de pedidos via requisição de API, recomendamos a migração utilizando o Orders Feed. No entanto, é importante atentar-se que utilizando Orders Feed é preciso uma mudança no fluxo de integração. Saiba mais em guia de integração de pedidos para entender como o processo é feito.
Manipulando o Order Feed
Para receber informações sobre eventos de pedidos pedidos da sua loja, você pode utilizar a API Orders Feeds:
curl --request GET \
--url https://{host da loja}/api/feed/orders \
--header 'Authorization: Bearer {token}'
--header 'Content-Type: application/json'
A resposta dessa requisição com retorno 200
é um body como:
[
{
"id": 45,
"cart_id": 147,
"code": "34B2434D06",
"token": "e9PGdxjuDuccJCeo6sHaoR9VjvgUzeYs",
"status": "confirmed",
"client_id": 57,
"deposit": false,
"card": false,
"slip": true,
"slip_url": "https://api.pagar.me/1/boletos/live_clxertk0tm50cetsl4y",
"slip_token": null,
"payment_method": "Boleto",
"payment_tid": null,
"shipping_price": 0.0,
"shipping_label": "Opção A",
"delivery_type": "expressa",
"subtotal": 1000.0,
"discount_price": 0.0,
"taxes": 0.0,
"total": 1000.0,
"tracking_code": null,
"tracking_code_list": [],
"updated_at": "2022-06-23T16:21:12.290-03:00",
"received_at": "2022-06-23T16:17:20.723-03:00",
"confirmed_at": "2022-06-23T16:21:12.091-03:00",
"shipped_at": null,
"shipping_tracked_at": null,
"delivered_at": null,
"canceled_at": null,
"installments": 1,
"card_number": null,
"extra": {
"_ga": "GA1.1.1485965388.16560137",
"cotation_id": "387518131220883",
"handling_days": "1",
"delivery_company": "Total"
},
"email": "[email protected]",
"delivery_days": 9,
"card_validity": null,
"browser_ip": "176.210.24.97",
"payment_due_date": "2022-06-25T23:59:59.999-03:00",
"slip_due_date": "2022-06-25T23:59:59.999-03:00",
"paid_at": null,
"payment_gateway": "pagarme",
"expected_delivery_date": "2022-07-02",
"agent": null,
"channel": "ecommerce",
"coupon_code": null,
"affiliate_tag": null,
"payment_authorization": null,
"user_id": null,
"user_code": null,
"delivery_message": "Prazo de até 9 dias corridos para a entrega do pedido",
"rebate_token": null,
"rebate_discount": 0.0,
"has_split": false,
"pix": false,
"pix_qr_code": null,
"ame": false,
"ame_qr_code": null,
"antifraud_assurance": null,
"items": [
{
"id": 76,
"variant_id": 796,
"quantity": 1,
"price": 1000.0,
"total": 1000.0,
"weight": 1.0,
"width": 1.0,
"height": 1.0,
"length": 1.0,
"extra": {},
"picture_url": "//a1.vnda.com.br/xyz/2022/06/23/16_17_20_810_13_5_7_754_15_2_4_463_20210901230252_7418992582_h.png?v=1656011840",
"reference": "REF999999",
"sku": "REF999999-1",
"product_name": "Produto Exemplo",
"variant_name": "Variante 1",
"package": "34B2434D06-01",
"product_id": 435,
"original_price": 1000.0,
"place_id": null,
"place_name": null,
"place_city": null,
"has_customizations": false
}
]
}
]
Se você quiser incluir dados do cliente e de envio, utilize na chamada o parâmetro include_shipping_address=true. Será incluído o seguinte objeto no json de retorno:
"shipping_address": {
"id": 99,
"first_name": "Teste",
"last_name": "Vnda",
"company_name": null,
"email": "[email protected]",
"documents": {
"cpf": "12312312312"
},
"street_name": "Rua XYZ",
"street_number": "00",
"complement": null,
"neighborhood": "XYZ",
"first_phone_area": "11",
"first_phone": "99999901",
"second_phone_area": null,
"second_phone": null,
"reference": null,
"zip": "90540140",
"city": "Porto Alegre",
"state": "RS",
"recipient_name": "Teste Vnda"
}
Também é possível filtrar por situação do pedido, utilizando o parâmetro status.
Um exemplo de chamada utilizando os parâmetros supracitados é:
curl --request GET \
--url https://{host da loja}/api/feed/orders?include_shipping_address=true&status=confirmed \
--header 'Authorization: Bearer {token}'
--header 'Content-Type: application/json'
Após integração do pedido, você deve confirmar o(s) pedido(s) no feed através do método POST , utilizando a requisição:
curl --request POST \
--url https://{host da loja}/api/feed/orders
--header 'Authorization: Bearer {token}'
--header 'X-Shop-Host: {host da loja}'
--header 'Content-Type: application/json'
-d '{"orders":[{"code":"CODIGOPEDIDO1"},{"code":"CODIGOPEDIDO2"}]}'
A resposta dessa requisição deve ser um retorno 204
com no content.
Assim, confirmado que o pedido foi removido ou consumido da listagem de eventos no feed.
Updated about 1 year ago