Passar para o conteúdo principal

Script Checkout - WooCommerce

Atualizado há mais de um mês

Redirecionamento de Carrinho no WooCommerce para o Checkout Unicopag

Introdução

Neste tutorial, vamos criar um script para redirecionar o carrinho de uma loja WooCommerce para o checkout da Unicopag com os dados de produtos preenchidos automaticamente. O objetivo é criar um script dinâmico que funcione tanto para lojas com múltiplos produtos no carrinho quanto para lojas com apenas um produto.

Cenários de Uso

  1. Carrinho com múltiplos produtos: O script precisa identificar todos os itens no carrinho e redirecionar para o checkout Unicopag com os detalhes dos produtos.

  2. Compra de um único produto: O script será simplificado para identificar apenas um produto e redirecionar diretamente para o checkout.

Parâmetros

O script foi criado para aceitar parâmetros dinâmicos, já que cada loja WooCommerce pode ter um tema diferente, com variações nos botões e classes HTML:

  • textoBotao: O texto exibido no botão de finalização de compra, usado para capturar o clique.

  • classCart: A classe HTML que identifica os itens no carrinho de compras. Usado apenas quando há múltiplos produtos.

  • classNameProduct: A classe HTML que identifica o nome do produto.

Estrutura do Script

O script usa jQuery para manipular o DOM e capturar os eventos de clique, além de realizar requisições AJAX para a API da Unicopag com base nos produtos encontrados no carrinho.

Esse script sera colocado na raiz do template usado da pagina. ex: header.php caso nao exista header usar o footer.php.

Exemplo do script:

Nesse tutorial será necessário saber o ID de sua loja WooCommerce, número de 4 dígitos

Carrinho com múltiplos produtos:

<script type="text/javascript">

jQuery(document).ready(function ($) {
const textoBotao = 'Finalizar Compra'; //Verificar! Página de carrinho: Mudar o nome do botão de acordo com o botão da loja
const textoBotao2 = 'Checkout'; //Verificar! Drawer: Mudar o nome do botão de acordo com o botão da loja
const classCart = '.woocommerce-cart-form__cart-item'; //Verificar! Mudar de acordo com a classe do carrinho. Inspecionar o carrinho para saber qual a classe, colocar o que tiver antes do espaço.
const urlVariant = 'https://api.unicopag.com.br/api/api/variant/';
const urlProduct = 'https://api.unicopag.com.br/api/api/product/';

$(document).on('click', '.checkout-button, .wc-forward, .elementor-button--checkout', async function (e) { //Verificar! ".checkout-button", ver se a classe do botão de finalizar compra e mudar de acordo com o que é mostrado, colocar o que tiver antes do espaço.

e.preventDefault();

const comparText = $(this).text().trim();
if (comparText !== textoBotao && comparText !== textoBotao2) {
return;
}

console.log('Finalização de compra clicado.');

const produtos = [];
const requests = [];

$(classCart).each(function () {

// 1) extrai o href do link do produto
const href = $(this).find('.product-name a').attr('href') || '';

// 2) pega apenas os dígitos após "#woosq-"
const match = href.match(/#woosq-(\d+)$/);
const variationId = match ? match[1] : null;
const nomeProduto = $(this).find('.product-name a').text().trim();
const quantidade = parseInt($(this).find('.quantity input.qty').val(), 10) || 1;
console.log('nomeProduto::.', nomeProduto);
console.log('variationId::.', variationId);

// escolhe endpoint: variant se tiver productId, senão product

const endpoint = urlVariant;
const payload = {
variant_id: parseInt(variationId, 10),
store_id: 3680 //Verificar! Mudar o ID de acordo com o da loja
title: nomeProduto,
quantity: quantidade,
};

const fetchRequest = fetch(endpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
})

.then(response => {
if (!response.ok) {
throw new Error(Erro HTTP! Status: ${response.status});
}
return response.json();
})

.then(data => {
produtos.push(data);
})

.catch(error => {
console.error('Erro na requisição:', error);
});

requests.push(fetchRequest);
});

try {
await Promise.all(requests);

if (produtos.length > 0) {
const variationIds = produtos.map(p => ${p.variations[0].woocommerce_variant_id}%3A);
const firstId = produtos[0].variations[0].woocommerce_variant_id;
const finalUrl = ${firstId}?multiple=${variationIds.join(',')}&platform=woocommerce;

console.log('Redirecionando para:', finalUrl);
window.location.href = 'https://seguro.mixpontoloja.com/' + finalUrl; // Verificar! Fazer o domínio personalizado antes de integrar e mudar de forma manual no script a parte https://seguro.loja.com/
} else {
console.warn('Nenhum produto processado para redirecionamento.');
}
} catch (error) {
console.error('Erro ao processar os produtos:', error);
}
});
});
</script>

Compra de um único produto:

<script type="text/javascript">
jQuery(document).ready(function($) {

// Defina o texto do botão que deseja capturar
var textoBotao = 'Comprar produto';
var classCart = '.elementor-widget-container';

// Captura todos os botões que tenham o texto "Continuar" (ou qualquer outro texto que desejar)
$('button, a').each(function() {
if ($(this).text().trim() === textoBotao) {
// Adiciona o evento de clique ao botão
$(this).on('click', function(event) {
event.preventDefault(); // Impede o comportamento padrão (opcional)

console.log('Finalização de compra clicado.');

var produtos = [];
var requests = [];
setTimeout(function() {
// Seleciona todos os produtos no carrinho
var nomeProduto = $('.elementor-element-537e635').find('h1.product_title.entry-title.wd-entities-title').text().trim();
var textoCorrigido = nomeProduto.replace(/–/g, '-');
console.log('Nome do produto:', nomeProduto);

if (textoCorrigido) {
const fetchRequest = fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
title: textoCorrigido,
store_id: idLoja,
}),
})
.then((response) => {
if (!response.ok) {
throw new Error(`Erro HTTP! Status: ${response.status}`);
}
return response.json();
})
.then((data) => {
produtos.push(data);
})
.catch((error) => {
console.error('Erro na requisição:', error);
});

requests.push(fetchRequest);
}

setTimeout(function() {
// Aguarda todas as requisições AJAX serem concluídas
$.when.apply($, requests).then(function() {
console.log('Produtos recebidos:', produtos);

// Mapeia as variações de cada produto
var variationIds = produtos.map((product, index) => `${product.variations[0].woocommerce_variant_id}%3A`);
console.log('Produtos variationIds:', variationIds);
// Monta a URL final com base nas variações
var finalUrl = `${produtos[0].variations[0].woocommerce_variant_id}?multiple=${variationIds.join(',')}&platform=woocommerce`;

console.log('URL Final:', finalUrl);

// Redireciona para a página de pagamento
window.location.href = 'https://pay.unicopag.com.br/' + finalUrl;
});
}, 1000);

}, 1000);
});
}
});
});
</script>
Respondeu à sua pergunta?