Controle de fila de integração de pedidos (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
Seção intitulada “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 Olist Ecommerce
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
Seção intitulada “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": "xyz@vnda.com.br", "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": "Olist Ecommerce", "company_name": null, "email": "xyz@olistecommerce.com.br", "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 Olist Ecommerce" }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.