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.