Multi Frete no Storefront
Nessa secção iremos falar sobre como implementar adequadamente a funcionalidade de Multi Frete no Storefront Wake. Para saber o que é essa funcionalidade clique aqui.
A seguir, detalharemos os passos técnicos necessários para implementar corretamente o Multi-frete, garantindo o funcionamento adequado da funcionalidade no Storefront Wake.
Esse recurso só deve ser utilizado por lojas em construção!!
Se você está trabalhando em uma loja que já está em produção e precisa utilizar o recurso de Multi-frete, entre em contato com o Suporte Wake solicitando ajuda.
Pré-requisito
Antes de mais nada você deve habilitar a configuração de Multi-frete no admin da loja. Para isso siga o caminho Fretes> Configurações> Multi fretes nos produtos de CDs diferentes (Storefront).
Como Cotar o Frete
Com a configuração de Multi-frete ativa, a cotação de frete deve ser realizada exclusivamente através da query shippingQuoteGroups.
Importante!
A query
shippingQuotes(antiga) foi substituída pelashippingQuoteGroups(nova) e elas não devem ser utilizadas em conjunto.
A query shippingQuoteGroups agrupa os produtos do checkout por Centro de Distribuição (CD) priorizado e retorna cotações para cada um desses grupos.
Para um exemplo real da query clique aqui
Query shippingQuoteGroups:
shippingQuoteGroups(
cep: CEP
checkoutId: Uuid!
useSelectedAddress: Boolean
): [ShippingQuoteGroup]
checkoutId: (Obrigatório) O identificador único do checkout.
cep ou useSelectedAddress: Utilize um CEP específico ou defina useSelectedAddress: true para utilizar o endereço já salvo no checkout. Não envie ambos os parâmetros ao mesmo tempo.
Entendendo o Retorno
O retorno da query é um array de ShippingQuoteGroup. Cada objeto neste array representa um pacote de frete, contendo os produtos de um mesmo CD e as opções de envio disponíveis para eles.
Estrutura do ShippingQuoteGroup:
type ShippingQuoteGroup {
distributionCenter: DistributionCenter
pickups: [PickupShippingQuote]
products: [ShippingQuoteGroupProduct]
shippingQuotes: [GroupShippingQuote]
}
distributionCenter: O Centro de Distribuição de origem para este pacote.products: A lista de produtos que fazem parte deste pacote.shippingQuotes: A lista de cotações de frete (entrega ou retirada) disponíveis para este pacote, baseadas no CD priorizado.pickups: A lista de opções de retirada adicionais.
Como selecionar o frete para cada pacote
Para cada ShippingQuoteGroup retornado pela query, sua aplicação deve permitir que o usuário final selecione uma das opções de frete disponíveis (shippingQuotes), e então enviar essa escolha via mutation checkoutSelectShippingQuote. Clique aqui para ver um exemplo real desta mutation.
- Mutation
checkoutSelectShippingQuote:
checkoutSelectShippingQuote(
checkoutId: Uuid!
shippingQuoteId: Uuid!
distributionCenterId: ID
# Outros campos como additionalInformation, customerAccessToken, etc.
): Checkout
Fluxo de seleção:
- Execute a query
shippingQuoteGroups. - Para cada grupo no array de resposta:
- Apresente as opções de frete disponíveis no campo
shippingQuotes.
- Apresente as opções de frete disponíveis no campo
- Para o usuário selecionar uma opção execute a mutation
checkoutSelectShippingQuote, enviando:checkoutId: O ID do checkout.shippingQuoteId: O ID da cotação escolhida (vinda deshippingQuotes).distributionCenterId: O ID do CD principal do grupo (vindo dedistributionCenter.id).
Verificando as Cotações selecionadas e concluindo a etapa
Após cada chamada à mutation checkoutSelectShippingQuote, é possível verificar o estado atual das seleções de frete. O campo selectedShippingGroups no objeto Checkout (retornado por queries e mutations de checkout) contém essa informação.
O Campo selectedShippingGroups
selectedShippingGroupsEste array espelha a estrutura dos pacotes de frete, mostrando qual cotação foi selecionada para cada um.
Exemplo de Query para Verificar o Checkout:
query GetCheckout($checkoutId: String!) {
checkout(checkoutId: $checkoutId) {
checkoutId
# O array de grupos de cotações já selecionadas.
selectedShippingGroups {
distributionCenter {
id # CD do pacote
sellerName
}
products {
productVariantId
}
# A cotação que foi selecionada para este pacote.
# Se este campo for nulo, a seleção para este pacote ainda está pendente.
selectedShipping {
shippingQuoteId
name
type
value
}
}
completed
}
}
A seleção de frete é considerada concluída quando todos os grupos no array selectedShippingGroups tiverem o campo selectedShipping preenchido (não nulo). A partir desse ponto, é possível prosseguir para as etapas seguintes do checkout, como pagamento e finalização.
Updated 3 months ago
