"salesChannel" do orderFormId diferente do "salesChannel" da loja

Olá Pessoal bom dia,

Estou tendo um problema aqui em relação ao salesChannel.

Por exemplo, quando eu tento adicionar um produto com desconto ao carrinho, estou recebendo um erro 401 na api de adicionar o produto no carrinho. Ai no caso o produto vai pro carrinho sem o desconto.

Verificando o problema, descobri que na primeira tentativa ao tentar comprar o produto com desconto, o orderForm vem com o salesChannel = 1 sendo que na verdade deveria ser salesChannel = 3.
orderForm na primeira tentativa →

Já na segunda tentativa o produto é adicionado no carrinho com desconto, e verificando o mesmo orderForm, o salesChanel vem correto, vem setado como 3.
orderForm na segunda tentativa →

Essa loja possui uma conta principal que é a dmvfarma, e dentro dela ela possui 4 lojas, que é drogasmil, rosario, tamoio e farmalife. E a politica comercial de todos os produtos vem assim →
image (4).

Verificando o salesChannel de cada loja, descobri que:
Drogasmil = salesChannel = 1;
Farmalife = salesChannel = 2;
Tamoio = salesChannel = 3;
Rosario = salesChannel = 4;

1 Like

Olá Erik, tudo bom?

Erro 401 esta sempre relacionado a permissão. Qual API você esta tentando utilizar para incluir produto ao carrinho?

Que dependendo, esta tentando utilizar uma API privada, sem os tokens, por isso ele dá erro 401.

Em paralelo, sendo VTEX IO, você tem a opção de utilizar um contexto pronto para adicionar produto ao carrinho.

Adicionar no manifest.json

"vtex.order-items": "0.x",

E em seguida ao seu código:

import { useOrderItems } from "vtex.order-items/OrderItems"
const { addItems } = useOrderItems()

let item = {
  id: itemId,
  seller: 1,
  quantity: 1
}

addItems(item)

Inclusive, podendo passar o seller, que voce pode modificar para 3, fazendo o relacionamento ao seu Sales Channel.

Olá @RamonBenova bom dia,

Tentei algumas coisas aqui + a solução que você enviou e não deram certo.

Verificando o salesChannel com esse hook da VTEX → useProduct do ‘vtex.product-context’, ele está retornando o salesChannel correto da loja, no entanto testando pela extensão da VTEX, o VTEX helpers, o salesChannel está como 1:

Opa, tudo bem?

Cada loja possui o seu proprio dominio? Em caso positivo, tenta fazer os testes usando a url da farmacia em vez de myvtex.com ou vtexcommercestable.

Olá Saito, belezinha e você?

Isso, cada loja tem seu próprio dominio.

Testei aqui conforme você falou, mas o resultado é o mesmo :confused:

Beleza!

Cada loja realmente está configurada com apenas 1 sales channel no binding?

O que você precisa verificar é se no carrinho e na finalização esta o que você precisa.
Lembrando que essa extensão não é da VTEX em si, e ela vai ser referente a o que você tinha quando carregou a página na primeira vez, ela não fica atualizando sempre.

O que você pode ver também, é colocando o orderForm num useEffect(), para ver se ele atualizou corretamente.

Não creio que seja o ideal se basear por essa extensão.

Olá @Erik-Corebiz, já quebrei a cabeça com temas relacionados. Porém nos meus testes a mudança do sales channel só funciona de fato para usuários logados.

Se forçar a mudança pode até refletir em algumas partes do site, porém na hora que chega no checkout, quando o usuário informa o e-mail, pelo o que entendi o checkout verifica-se se o usuário está logado, senão está logado, salvo engano volta para o sales channel principal.

Refletindo sobre este comportamento, faz sentido que seja assim, já que seria muito fácil para qualquer pessoa setar na própria URL em qualquer loja virtual VTEX o parâmetro ?sc=1 ou ?sc=2 ou sc=3 e puxar o preço de outra política comercial que não a principal.

Abraços!

Olá Saito bom dia,

Está sim, tem a dmvfarma que é o account principal, e nele tem as 4 lojas ticadas.
Em nas outras accounts de drogasmil, tamoios, rosario e farmalife, cada uma está ticada de acordo com a loja, segue as evidências:

DMVFARMA:

DROGASMIL:

FARMALIFE:

ROSARIO:

TAMOIO:

De repente é melhor tentar explorar mais a sugestão do Ramon já que a confguração está ok.

Olá Ramon bom dia,

Fiz o teste aqui e o orderForm atualiza certinho:

orderForm Antes:

orderForm Depois:

O problema é quando verifico o id do orderForm pela api:

/api/checkout/pub/orderForm/{orderFormID}

o salesChannel dele está vindo como 1. Ai na segunda tentativa ele vem correto, como salesChannel 2.

Olá André bom dia,

Fiz o teste com usuário logado, e não funcionou, salesChannel continua = 1 :confused:.

Opa,

Tentar adicionar o parametro ?refreshOutdatedData=true na hora de puxar o orderForm.

Opa Saito boa tarde,

Fiz aqui conforme você falou mas também não deu certo, salesChannel continua como 1 na primeira tentativa:

const orderFormObject = useOrderForm({ refreshOutdatedData: true })

Recomendo fazer um teste.

Verifique se você no momento de adicionar o carrinho esta especificando o salesChannel.
Por padrão, sempre que tentarmos adicionar um produto ao carrinho e não especificarmos a VTEX considera o SC como 1.
Então caso seu cenário você utilize outro salesChannel eu recomendo fortemente repassar ele no momento de adicionar ao carrinho.

A questão é qual o método de adicionar ao carrinho você esta utilizando, vou te passar a base com a api da VTEX, mas com graphql podem conter variações e provavelmente vai aceitar um campo sc.

Com endpoint da VTEX você vai precisar adicionar o queryParam sc e seu respectivo valor.

Na teoria temos isso:

/api/checkout/pub/orderForm/${orderFormObject?.orderForm?.id}/items?&sc=${salesChannel}

Como resultado final teríamos algo próximo disso: /api/checkout/pub/orderForm/ceód5ac19d2c4a178dbddfObb8647068/tems?sc=3

Faça um teste e retorne por gentileza.

3 Likes

Bom dia Vinicius.

Deu certo, muito obrigado :rocket: :metal:

2 Likes

Boa Vinicius!

1 Like

E muito obrigado @Saito , @RamonBenova e @andremiani pela ajuda :metal: :handshake: :rocket:

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.