Problemas com Tokeniza??o
-
Muitos clientes reclamando que ao clicar em finalizar pedido fica o loading e n?o vai para frente, após investigar o código JS do plugin, percebo que o problema é com a tokeniza??o do plugin, simplesmente o código js faz referencias a elementos com ids e classes HTML que nem existem, ou seja n?o é compatível com outros temas e plugins. Abaixo segue uma gambiarra que fiz em um arquivo JS separado para tentar reduzir os erros, e gerar o Token para enviar o formulário. O problema também acontece quando a pessoa troca o meio de pagamento, por exemplo, gerou o token no PIX e depois decidiu fazer no credito, ao selecionar ele nao gera….
/**
* Function to check for errors and block form submission
*
* @param {Element} event Clicked Place Order Button
* @since 09/10/2024
*/
function validatePagarmeErrors(event) {
// Select the error div associated with the selected payment method
const pagarmeErrorDiv = $('input[name$="payment_method"]:checked').closest('li').find('#wcmp-checkout-errors .woocommerce-error');
// Check if the error div contains content and is visible
if (pagarmeErrorDiv.length && pagarmeErrorDiv.is(':visible')) {
// Scroll the page to the error div
$('html, body').animate({
scrollTop: pagarmeErrorDiv.offset().top - 50 // Adjust the scroll to be slightly above the div
}, 300); // The animation time in milliseconds
// Call the function to remove the loading state
$(document.body).trigger('checkout_error');
}
}
/**
* Add an event listener to the checkout form submit button
*
* @since 09/10/2024
*/
$(document).on('click', '#place_order', function (event) {
validatePagarmeErrors(event);
});
/**
* Prevent Pagar.me Bugs
*/
if(pagarmeTokenize && pagarmeCard){
/**
* Intercepting the Pagar.me showError function
*
* @since 08/10/2024
*/
const originalShowError = pagarmeTokenize.showError;
pagarmeTokenize.showError = function (text) {
// Call the original function
originalShowError.call(this, text);
// Add behavior to remove the loading state
$(document.body).trigger('checkout_error');
};
/**
* Intercepting the Pagar.me listError function
*
* @since 08/10/2024
*/
const originalListError = pagarmeTokenize.listError;
pagarmeTokenize.listError = function (errors) {
// Call the original function
originalListError.call(this, errors);
// Add behavior to remove the loading state
$(document.body).trigger('checkout_error');
};
/**
* Prevent Tokenizer Bug, when user change payment method and token already created.
*
* @since 09/10/2024
*/
const originalCanExecute = pagarmeCard.canExecute;
pagarmeCard.canExecute = function (event) {
// Call the original function
let canExecute = originalCanExecute.call(this, event);
if (!canExecute && pagarmeCard.isTokenized()) {
pagarmeTokenize.clearInputTokens();
$('input[name$="payment_method"]:checked').trigger('change');
pagarmeTokenize.tokenize();
canExecute = originalCanExecute.call(this, event);
}
if (!canExecute) {
// Select the error message wrapper
let errorWrapper = $(".woocommerce-notices-wrapper:last");
// Check if the error list already exists
let listError = errorWrapper.find("ul.woocommerce-error");
// If the list does not exist, create a new one
if (listError.length === 0) {
listError = $('<ul role="alert" class="woocommerce-error"></ul>');
errorWrapper.append(listError);
}
// Add the new error message to the list
if (listError.find('#chd-payment-error').length === 0) {
listError.append('<li id="chd-payment-error"><strong>Verifique</strong> as informa??es de pagamento selecionadas e tente novamente!</li>');
}
// If you want to ensure that the message is always visible, you can force scroll to the error list
$('html, body').animate({
scrollTop: errorWrapper.offset().top
}, 500);
// Add behavior to remove the loading state
$(document.body).trigger('checkout_error');
}
return canExecute;
}
}Este é mais um de vários outros erros que estou postando a mais de 2 meses, resultado? SEM RESPOSTA.
- You must be logged in to reply to this topic.