VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/Carrinho

Unir carrinhos e comprar de novo

Passa o carrinho do visitante para a conta depois do login e copia os itens de um pedido antigo para o carrinho.

Estas duas rotas só funcionam para cliente logado e movem itens para o carrinho da conta. A primeira resolve o caso do visitante que montou um carrinho e depois entrou; a segunda é o botão "Comprar de novo" da tela de pedidos.

Unir o carrinho do visitante ao da conta

Quando alguém monta um carrinho sem estar logado e depois faz login ou cria a conta, existem dois carrinhos: o do visitante (X-Session-ID) e o da conta. Chame esta rota logo depois do login, uma vez, para juntá-los. O carrinho do visitante é apagado no fim.

Regras da união:

  • Linhas iguais (mesmo produto, variação, opções, observação e origem de estoque) têm as quantidades somadas.
  • A quantidade somada respeita o estoque. Uma linha do visitante sem estoque disponível é descartada, sem erro.
  • Os cupons do carrinho da conta são mantidos; se a conta não tem cupom, entram os do visitante.
  • Se o visitante não tem carrinho (ou ele está vazio), a rota só devolve o carrinho da conta.
POST/api/v1/storefront/cart/mergeCliente

Mescla o carrinho do visitante ao carrinho da conta

Cabeçalhos

Authorizationstringobrigatório
Bearer <token> do cliente logado.
X-Session-IDstringobrigatório
O mesmo identificador de visitante enviado em guest_session_id. É a prova de que quem chama possui o carrinho de visitante: sem o cabeçalho igual ao corpo, a resposta é 404 guest cart not found.

Corpo da requisição

guest_session_idstringobrigatório
O X-Session-ID que o visitante usava antes do login.

Exemplo de requisição

bash
curl -X POST "$BASE_URL/api/v1/storefront/cart/merge" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Session-ID: $SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{
  "guest_session_id": "6f1c3c0e-8f5b-4c3e-9d6a-2b7d0e0f1a11"
}'

Resposta

200Carrinho da conta depois da união
json
{
  "id": "5a3f7b0e-1c2d-4e8f-9a6b-7d1c0e2f3a44",
  "user_id": "f12f30a9-cbec-40ba-98f1-b7fa8f2e8e10",
  "items": [
    {
      "line_id": "64ddde83-28ce-4bba-86e5-ba9ebf1ba500",
      "product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
      "name": "Notebook Slim Rosa 02373",
      "unit_price": 11500,
      "quantity": 3,
      "total": 34500
    }
  ],
  "subtotal": 34500,
  "total": 34500,
  "currency": "BRL"
}

A resposta é o carrinho da conta, no mesmo formato de Ler o carrinho.

Comprar de novo um pedido

Copia para o carrinho da conta os itens de um pedido anterior do mesmo cliente. Cada item é validado como se fosse adicionado agora: o preço é o de hoje, não o que foi pago na época, e itens que saíram de linha ou estão sem estoque não entram. A resposta separa o que entrou do que ficou de fora.

POST/api/v1/storefront/cart/reorder/{orderId}Cliente

Copia os itens de um pedido anterior para o carrinho

Parâmetros de caminho

orderIduuidobrigatório
Id do pedido a repetir. Precisa ser um pedido do cliente logado.

Cabeçalhos

Authorizationstringobrigatório
Bearer <token> do cliente logado.
bash
curl -X POST "$BASE_URL/api/v1/storefront/cart/reorder/a8a3c7a3-5f15-45a8-a385-4f20fbf8b722" \
  -H "Authorization: Bearer $TOKEN"
200Itens copiados
json
{
  "added": [
    {
      "line_id": "e0a45a70-6e1c-4a2b-8f55-1f6a7d3c9b22",
      "product_id": "2a6541bf-d5b0-4a2e-ad7b-1183af189d42",
      "name": "Cafeteira Moderno Branco 01426",
      "unit_price": 80990,
      "quantity": 1,
      "total": 80990
    }
  ],
  "failed": [
    {
      "product_id": "00000000-0000-0000-0000-000000000000",
      "reason": "product not found or inactive: 00000000-0000-0000-0000-000000000000"
    }
  ],
  "cart": { "id": "5a3f7b0e-1c2d-4e8f-9a6b-7d1c0e2f3a44", "subtotal": 80990, "total": 80990 }
}

O formato é o de POST /cart/bulk, descrito em Adicionar itens: added, failed (cada um com product_id e reason) e cart.

Erros

StatusQuandoCorpo
400guest_session_id ausente (merge){"error":"guest_session_id is required"}
400Corpo que não é JSON (merge){"error":"invalid request body"}
400orderId que não é UUID (reorder){"error":"invalid orderId","detail":"orderId must be a valid UUID"}
401Sem token{"error":"missing authorization header"}
401Token inválido ou expirado{"error":"invalid or expired token"}
403Chave de API sem o escopo customer:write (um token de login não passa por essa checagem){"error":"missing_scope","required":"customer:write"}
404O X-Session-ID está ausente ou é diferente de guest_session_id (merge){"error":"guest cart not found"}
404O pedido não existe (reorder){"error":"order not found","detail":"order not found: ..."}
500Falha ao unir carrinhos, ou pedido que pertence a outro cliente (reorder){"error":"failed to reorder","detail":"order does not belong to user"}
Pedido de outro cliente devolve 500

Pedir para repetir um pedido que existe mas pertence a outra conta retorna 500 failed to reorder, e não 403 nem 404. Nenhum item é copiado. Só ofereça "Comprar de novo" em pedidos do próprio cliente.

Una uma única vez, logo depois do login

Depois da união o carrinho do visitante deixa de existir. Chamar de novo com o mesmo identificador não faz nada e só devolve o carrinho da conta. Se o login foi feito em outro aparelho, não há carrinho de visitante a unir.

Veja também

  • Ler o carrinho
  • Adicionar itens
  • Visão geral do carrinho
Anterior
Cupons no carrinho
Próxima
Importar itens de uma planilha
Nesta página
  • Unir o carrinho do visitante ao da conta
  • Exemplo de requisição
  • Resposta
  • Comprar de novo um pedido
  • Erros
  • Veja também