Artigo destinado a usuários do OneStepCheckout 6 (Deivison Arthur)
Cenário
Ao criar uma regra de promoção, oferecendo desconto baseado no meio de pagamento, foi reportado que ao selecionar o meio Cartão de crédito PagSeguro, os totais do pedido não são atualizados, removendo ou acrescentando o desconto.
Porque isso ocorre?
Isso ocorre por duas razões:
- a primeira delas é porque o módulo realiza uma validação JavaScript nos dados do formulário antes de envia-lo. Desta forma, meios de pagamento que possuem campos obrigatórios ainda não preenchidos e válidos (a exemplo do nome do titular do cartão e número do cartão) não passam na validação, e os totais do pedido não são enviados.
- a segunda razão, é que mesmo que essa validação via JavaScript não fosse feita, o Magento processará as validações no servidor com os dados enviados, e mesmo assim não atualizará os totais, pois ainda não foi possível obter o código do cartão codificado pelo PagSeguro.
Como contornar o problema?
A forma que encontrei para corrigir o problema consiste em pular essa validação quando se tratar do módulo pagseguro, e em enviar um código de cartão falso, para passar a validação do módulo.
Para isso, siga os seguintes passos...
No arquivo skin/frontend/base/default/onestepcheckout/js/payment.js localize o seguinte trecho de código (por volta da linha 230, dentro de savePayment):
//validation
Form.getElements(element).each(function (vElm) {
var cn = $w(vElm.className);
isValid = isValid && cn.all(function (name) {
e circunde esse trecho com este if...
if(block != "payment_form_pagseguro_cc") {
Ficará assim:
if(block != "payment_form_pagseguro_cc") {
//validation
Form.getElements(element).each(function (vElm) {
var cn = $w(vElm.className);
isValid = isValid && cn.all(function (name) {
var v = Validation.get(name);
try {
if (Validation.isVisible(vElm) && !v.test($F(vElm), vElm)) {
return false;
} else {
return true;
}
} catch (e) {
return true;
}
});
})
}
Desta forma, a validação do formulário só ocorrerá para aquilo que não for o cartão de crédito pagseguro.
Em seguida, ainda nesse arquivo - apenas se você usa versão 2.x ou 1.x (não necessário para 3.0 ou superior), um pouco mais abaixo, acrescente este trecho de código:
if(block == "payment_form_pagseguro_cc" && $$('input[name="payment[credit_card_token]"]').first().value == ''){
$$('input[name="payment[credit_card_token]"]').first().value = 'blablab';
}
antes de
if (!isValid) {
return;
}
Isto fará com que o credit_card_token, que é um campo cujo valor é informado pelo pagseguro - com base no cartão digitado - não é enviado em branco, o que causada o outro problema de validação.
Feito isso, os totais serão atualizados com sucesso.
Update para usuários da versão 3.0+
Para usuários da versão 3.0 ou superior, substitua
payment_form_pagseguro_cc
por
payment_form_rm_pagseguro_cc
no primeiro bloco.
Comentários
1 comentário
Fiz as alterações propostas mais infelizmente não tive sucesso.
Da uma olhada...
https://pedircacamba.com.br/cacambaonline/index.php/onestepcheckout/index/
Por favor, entre para comentar.