Não funciona no Magento 2.2.3
Closed this issue · 19 comments
Não consigo fazer funcionar no Magento 2.2.3.
Não aparece erro no console.
Nada.
Vácuo
Mas não passa a compra
@gcampedelli Bom dia ! Obrigado por contribuir, poderia informar mais informações do erro que não funciona ? Alguma imagem do erro ? Qual versão do PHP ? Pra efetuar uma validação/ simulação do erro ocorrido.
Então, não aparece erro nenhum no 2.2.3. Vácuo total. Eu testei a mesma configuração do servidor NGINX com o Magento 2.2.2, e aparecem erros no console, mas funciona. Está funcionando agora, mas estou usando algumas modificações que estão funcionando e resolveram os erros do Firefox. Para você entender seguem os dois esquemas que usei
PagSeguro - setup_module 2.0.2 - Magento Versão 2.2.3 - Não Funciona - Nenhuma alteração - Não passa pagamento - Não aparece erro
PagSeguro - setup_module 2.0.1 - Magento Versão 2.2.2 - Funciona sem alteração. Funciona com alteração no arquivo modificado é o Direct Payment Validator.js
Tanto 2.2.2 e 2.2.3 tem a mesma configuração do NGINX.
Direct Payment Validator Modificado abaixo (funciona!) De modo que eu acho que não é esse o problema. No 2.2.3, eu não sei qual o problema. Suspeito que seja o erro do DI que aparece no 2.1.9. Mas, eu não testei a versão do PagSeguro alterando o arquivo PHP nas versões 2.2.2 e 2.2.3.
/**
* 2007-2017 [PagSeguro Internet Ltda.]
*
* NOTICE OF LICENSE
*
*Licensed under the Apache License, Version 2.0 (the "License");
*you may not use this file except in compliance with the License.
*You may obtain a copy of the License at
*
*http://www.apache.org/licenses/LICENSE-2.0
*
*Unless required by applicable law or agreed to in writing, software
*distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*See the License for the specific language governing permissions and
*limitations under the License.
*
* @author PagSeguro Internet Ltda.
* @copyright 2016 PagSeguro Internet Ltda.
* @license http://www.apache.org/licenses/LICENSE-2.0
*/
/*
* This file have all the pagseguro direct payment common functions, like
* form input masks and validations and calls to the pagseguro js api
*/
function mascaraMutuario(o,f){
v_obj=o
v_fun=f
setTimeout('execmascara()',1)
}
function execmascara(){
v_obj.value=v_fun(v_obj.value)
}
function cpfCnpj(v){
//Remove tudo o que não é dígito
v=v.replace(/\D/g,"")
if (v.length <= 14) { //CPF
//Coloca um ponto entre o terceiro e o quarto dígitos
v=v.replace(/(\d{3})(\d)/,"$1.$2")
//Coloca um ponto entre o terceiro e o quarto dígitos
//de novo (para o segundo bloco de números)
v=v.replace(/(\d{3})(\d)/,"$1.$2")
//Coloca um hífen entre o terceiro e o quarto dígitos
v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2")
} else { //CNPJ
//Coloca ponto entre o segundo e o terceiro dígitos
v=v.replace(/^(\d{2})(\d)/,"$1.$2")
//Coloca ponto entre o quinto e o sexto dígitos
v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3")
//Coloca uma barra entre o oitavo e o nono dígitos
v=v.replace(/\.(\d{3})(\d)/,".$1/$2")
//Coloca um hífen depois do bloco de quatro dígitos
v=v.replace(/(\d{4})(\d)/,"$1-$2")
}
return v
}
function validateDocumentFinal(self) {
var value = unmask(self.value)
if (value.length === 11) {
return validateCpf(self)
} else if (value.length === 14) {
return validateCnpj(self)
} else {
displayError(self)
return false
}
}
/**
* Validate document (cpf or cnpj) according with it's length
* @param {type} self
* @returns {Boolean}
*/
function validateDocument(self) {
var value = unmask(self.value)
if (value.length === 11) {
status = validateCpf(self);
} else if (value.length === 14) {
status = validateCnpj(self)
} else if (value.length === 0) {
return false;
} else if (value.length !== 11 && value.length !== 14){
displayError(self)
return false
}
if (status == "true") {
//displayError(self, false)
return false;
} else {
displayError(self)
return false
}
}
/**
* Remove special characters, spaces
* @param {type} el
* @returns {unresolved}
*/
function unmask(el) {
return el.replace(/[/ -. ]+/g, '').trim()
}
/**
* Validate CPF
* @param {object} self
* @returns {Boolean}
*/
function validateCpf(self) {
var cpf = unmask(self.value)
var numeros, digitos, soma, i, resultado, digitos_iguais
digitos_iguais = 1
if (cpf.length < 11) {
displayError(self)
return false
}
for (i = 0; i < cpf.length - 1; i++)
if (cpf.charAt(i) != cpf.charAt(i + 1)) {
digitos_iguais = 0
break
}
if (!digitos_iguais) {
numeros = cpf.substring(0, 9)
digitos = cpf.substring(9)
soma = 0
for (i = 10; i > 1; i--) {
soma += numeros.charAt(10 - i) * i
}
resultado = soma % 11 < 2 ? 0 : 11 - soma % 11
if (resultado != digitos.charAt(0)) {
displayError(self)
return false
}
numeros = cpf.substring(0, 10)
soma = 0
for (i = 11; i > 1; i--) {
soma += numeros.charAt(11 - i) * i
}
resultado = soma % 11 < 2 ? 0 : 11 - soma % 11
if (resultado != digitos.charAt(1)) {
displayError(self)
return false
}
displayError(self, false)
return true
} else {
displayError(self)
return false
}
}
/**
* Validates CNPJ
* @param {object} self
* @returns {Boolean}
*/
function validateCnpj(self) {
var cnpj = unmask(self.value)
var numbersVal
var digits
var sum
var i
var result
var pos
var size
var equal_digits
equal_digits = 1
if (cnpj.length < 14 && cnpj.length < 15) {
displayError(self)
return false
}
for (i = 0; i < cnpj.length - 1; i++) {
if (cnpj.charAt(i) != cnpj.charAt(i + 1)) {
equal_digits = 0
break
}
}
if (!equal_digits) {
size = cnpj.length - 2
numbersVal = cnpj.substring(0, size)
digits = cnpj.substring(size)
sum = 0
pos = size - 7
for (i = size; i >= 1; i--) {
sum += numbersVal.charAt(size - i) * pos--
if (pos < 2) {
pos = 9
}
}
result = sum % 11 < 2 ? 0 : 11 - sum % 11
if (result != digits.charAt(0)) {
displayError(self)
return false
}
size = size + 1
numbersVal = cnpj.substring(0, size)
sum = 0
pos = size - 7
for (i = size; i >= 1; i--) {
sum += numbersVal.charAt(size - i) * pos--
if (pos < 2) {
pos = 9
}
}
result = sum % 11 < 2 ? 0 : 11 - sum % 11
if (result != digits.charAt(1)) {
displayError(self)
return false
}
displayError(self, false)
return true
} else {
displayError(self)
return false
}
}
/**
* Show input error
* @param {type} target
* @param {type} error
* @returns {undefined}
*/
function displayError(target, error = true) {
target = document.getElementsByClassName(target.id + '-error-message')[0]
if (error && target.classList.contains('display-none')) {
target.classList.remove('display-none')
target.style.display = "";
} else if (!error) {
target.classList.add('display-none')
target.style.display = "none";
}
}
/**
* Add mask for document (cpf or cnpj)
* Important: Called on keyup
* @param {this} document
* @returns {bool}
*/
function documentMask(document) {
if (document.value.length < 14
|| (document.value.length == 14 && (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 46))
) {
MascaraCPF(document);
} else {
MascaraCNPJ(document);
}
}
/*
* Mask functions below adapted from
* http://www.fabiobmed.com.br/excelente-codigo-para-mascara-e-validacao-de-cnpj-cpf-cep-data-e-telefone/
*/
/**
* Add CNPJ mask to input
* @param {type} cnpj
* @returns {Boolean}
*/
function MascaraCNPJ(cnpj) {
if (mascaraInteiro(cnpj) == false) {
event.return = false;
}
return formataCampo(cnpj, '00.000.000/0000-00', event);
}
/**
* Add date mask to input
* @param {type} cnpj
* @returns {Boolean}
*/
if (navigator.userAgent.search("Firefox") >= 0) {
function MascaraData(data, event) {
if (mascaraInteiro(data) == false) {
event.return = false;
}
return formataCampo(data, '00/00/0000', event);
}
}else{
function MascaraData(data) {
if (mascaraInteiro(data) == false) {
event.return = false;
}
return formataCampo(data, '00/00/0000', event);
}
}
/**
* Add CPF mask to input
* @param {type} cnpj
* @returns {Boolean}
*/
function MascaraCPF(cpf) {
if (mascaraInteiro(cpf) == false) {
event.return = false;
}
return formataCampo(cpf, '000.000.000-00', event);
}
/**
* Add credit card mask to input
* @param {type} cnpj
* @returns {Boolean}
*/
if (navigator.userAgent.search("Firefox") >= 0) {
function creditCardMask(cc, event) {
if (mascaraInteiro(cc) == false) {
event.return = false;
}
return formataCampo(cc, '0000 0000 0000 0000', event);
}
} else {
function creditCardMask(cc) {
if (mascaraInteiro(cc) == false) {
event.return = false;
}
return formataCampo(cc, '0000 0000 0000 0000', event);
}
}
/**
* Add not number mask to input
* @param {type} cnpj
* @returns {Boolean}
*/
function notNumberMask(someString, event) {
if (maskNotNumber(someString) == false) {
event.return = false;
}
return true;
}
/**
* Validate and prevent key typed event if it is a numbers
* @returns {Boolean}
*/
function maskNotNumber(event) {
if (event.keyCode == 8
|| event.keyCode == 9
|| event.keyCode == 46
|| event.keyCode < 48
|| (event.keyCode > 57 && event.keyCode < 96)
|| (event.keyCode > 105)) {
return true;
}
event.return = false;
return false;
}
/**
* Validate and prevent key typed event if it is not an integer([48,57] || [96, 105]),
* backspace(8), tab(9), or del(46)
* @returns {Boolean}
*/
function mascaraInteiro() {
function tecla(event){
var e = event.keyCode || e.which;
if ( e == 8
|| e == 9
|| e == 46
|| (e > 47 && e < 58)
|| (e > 95 && e < 106)) {
return true;
}
event.return = false;
return false;
}
}
/**
* Format fields, according with the mask pattern
* @param {type} campo
* @param {type} Mascara
* @param {type} evento
* @returns {Boolean}
*/
function formataCampo(campo, Mascara, evento) {
var boleanoMascara;
var Digitato = evento.keyCode;
var exp = /\-|\.|\/|\(|\)| /g
var campoSoNumeros = campo.value.toString().replace(exp, "");
var posicaoCampo = 0;
var NovoValorCampo = "";
var TamanhoMascara = campoSoNumeros.length;
;
if (Digitato != 8) { // backspace
for (i = 0; i <= TamanhoMascara; i++) {
boleanoMascara = ((Mascara.charAt(i) == "-") || (Mascara.charAt(i) == ".")
|| (Mascara.charAt(i) == "/"))
boleanoMascara = boleanoMascara || ((Mascara.charAt(i) == "(")
|| (Mascara.charAt(i) == ")") || (Mascara.charAt(i) == " "))
if (boleanoMascara) {
NovoValorCampo += Mascara.charAt(i);
TamanhoMascara++;
} else {
NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);
posicaoCampo++;
}
}
campo.value = NovoValorCampo;
return true;
} else {
return true;
}
}
/**
* Add credit card code mask to input
* @param {type} cnpj
* @returns {Boolean}
*/
function creditCardCodeMask(code) {
if (mascaraInteiro(code) == false) {
event.return = false;
}
return true;
}
Que configurações você usou para o NGINX? Estou tentando fazer funcionar no Magento 2.2.4 mas tb não tem jeito. Usando PHP 7.0.27.
Então, não é o NGINX. No caso do 2.2.4, quando você dá o update no composer, o PagSeguro faz o download da biblioteca inteira e atualiza para outra versão que é incompatível com o 2.2.4. Fiz o upload dos arquivos que funcionam com o 2.2.4
https://drive.google.com/file/d/1b8JwxyjZYnN5Y6-aclCrr3jA-9abznux/view?usp=sharing
Baixe essa pasta e coloque no lugar da pasta vendor/pagseguro no Magento 2.
No MYSQL faça essa alteração da imagem no setup_module
Depois deleta /var/viewpreprocessed /generated/code/ /generated/metadata/ /pub/static/etc
E php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento setup:static:content:deploy
Ajeita as permissões e testa
Oi gcampedelli... então, qual a versão do PagSeguro você instalou antes de fazer esse "mexe"? Instalei a versão 1.12 e segui seu passo a passo (aliás, muitíssimo obrigada pela dica!) e mesmo assim não funcionou... instala direitinho, aparece no frontend, mas ao clicar no botão finalizar compra fica "pensando" e não finaliza o pagamento. Recebo a mensagem "An error ocurred on the server. Please try to place the order again". (Só acontece com PagSeguro, se finalizo com moneyE não há nenhum erro no log, totalmente vazio... A chave setup_module está igual a que vc mostrou na minha db. Não alterei nada, já estava assim quando conferi.
Katiakweb, qual checkout você está usando??? O do Magento 2 mesmo ou tem alguma mod no checkout? OpCheckout não funciona, aliás, a maioria One Step Checkout vai dar erro. Só achei 1 OPC que funciona direitinho sem dar o erro, mas não tou com ele instalado. Então, todas as MODs que eu fiz no checkout são direto no tema. Já tive módulos de checkout e recebia esse erro, pode ser algum conflito de JS. Qual erro que tá dando no log?? E qual shipping method você instalou? O do Bleez conflita, tem que comentar umas linhas no Model/Consulta.php. Eu uso o Bleez + o do Igor para Correios e tem umas confs que tem que mudar. Enfim, nada fácil.
No meu 2.2.4 está funcionando o PagSeguro normalmente, desse jeito que eu te mostrei, mas sem módulos de checkout instalados. Só não testei ainda o Clean Checkout. No meu caso, o composer fazia o update para a versão pagseguro 1.12 e não funcionava e eu dei o downgrade para a versão 1.04.
De todo modo, segue a conf do NGINX pode ser algo assim. A propósito, eu tou usando o Varnish e o default.vcl do varnish é modificado também. O que foi gerado pelo magento 2 dá erro.
upstream fastcgi_backend {
server unix:/var/run/php/php7.0-fpm.sock;
}
server {
server_name meulindodominio.com.br;
listen 8080;
set $MAGE_ROOT /var/www/html/magento2;
set $MAGE_MODE production; # or developer
access_log /var/log/nginx/dmeulindodominio.com.br.com-access.log;
error_log /var/log/nginx/meulindodominio.com.br-error.log;
include /var/www/html/magento2/nginx.conf.sample;
}
server {
listen 443 ssl http2;
server_name meulindodominio.com.br;
proxy_headers_hash_bucket_size 128;
proxy_headers_hash_max_size 1024;
ssl_certificate /etc/letsencrypt/live/meulindodominio.com.br/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/meulindodominio.com.br/privkey.pem; # managed by Certbot
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
#ssl_session_cache shared:SSL:10m;
#ssl_session_timeout 24h;
#keepalive_timeout 300s;
location / {
proxy_pass http://127.0.0.1:80;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header Ssl-Offloaded "1";
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
#proxy_hide_header X-Varnish;
#proxy_hide_header Via;
proxy_set_header X-Forwarded-Proto $scheme;
include fastcgi.conf;
}
location /phpmyadmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}
}
gcampedelli, eu estava usando o checkout normal do magento... mas agora pouco instalei o Clean Checkout (https://github.com/danslo/CleanCheckout), e já vi que dá conflito... já estou quase desistindo do PagSeguro, mas vou tentar fazer downgrade para esta versão que você falou, talvez funcione. E aquela versão do PagSeguro do Bleez (https://github.com/Bleez/Pagseguro), você já usou? Eu testei no Magento 2.2.3, mas tb dava o mesmo erro... tava aqui pensando, será que é porque criei um novo website e loja? Será que tenho que mudar alguma coisa na url do PagSeguro? Mas estou usando o mesmo domínio para as duas lojas, mesmo website. No Nginx mapeei direitinho...
Bah, acabei de ler ali... nem me desanima, nem instalei módulo de Correio ainda! : / Eu queria usar o do Bleez, gosto mais desse. Que alterações vc fez? Pode me passar? O do Igor nunca consegui fazer funcionar direito. Menina, haja paciência pra fazer este PagSeguro funcionar, olha...
Então, eu sofri com o lance do PagSeguro. Mas, no 2.2.4 eu fiz isso que te falei e funcionou.
O que está aparecendo no console do browser? Fica rodando e qual o erro que aparece?
Você tá com minify js ou algo do gênero instalado? Pra mim dava o mesmíssimo erro e sei lá o que eu fiz. Se precisar de ajuda pode me chamar. Você veio de um upgrade ou reinstalou?? Se você deu um upgrade, eu sugiro que você faça um backup, deleta o env.php, deleta o config.php, limpa a var, a pub e a generated e reinstala sem necessariamente limpar a DB, mas usa os arquivos que eu te enviei, inclusive a biblioteca PHP do PagSeguro. No entanto, você vai ter que fazer isso usando a command line. Ah, não esquece de configurar o Varnish. O Bleez PagSeguro não funciona. O q funciona é a versão mod do 1.04 do PagSeguro que eu te enviei. Na hora que voce colocar as confs do redis de volta no env.php, toma cuidado pra não deletar a chave nova e a data de instalação. Pode ser esse o conflito. O problema todo vem do composer, não sei te indicar exatamente o que.
Pro Bleez funcionar out of box, vai no arquivo Model/Consulta.php e edita a função public function consultaCep($cep) da seguinte maneira. Ah, outra coisa, você configurou o Redis? Às vezes, um flushall do redis resolve tudo. Se você estiver usando o memcached, pelamor de Deus, se livra disso.
public function consultaCep($cep){
/* A partir daqui você comenta todas as linhas ou deleta mesmo, tanto faz, até onde está marcado
$data = Correios::getEndereco($cep);
if($data){
$this->setData('logradouro', $data['logradouro']);
$this->setData('bairro', $data['bairro']);
$this->setData('cep', $data['cep']);
$this->setData('cidade', $data['cidade']);
$this->setData('uf', $this->getRegionId($data['uf']));
return $this;
}
$this->_helperSigep->_initSigep();
$phpSigep = new Real();
$data = $phpSigep->consultaCep($cep);
if($data->getResult() == null){
$this->setData('error', $data->getErrorMsg());
return $this;
}
if($data->getErrorCode() == null){
$this->setData('logradouro', $data->getResult()->get('endereco'));
$this->setData('bairro', $data->getResult()->get('bairro'));
$this->setData('cep', $data->getResult()->get('cep'));
$this->setData('cidade', $data->getResult()->get('cidade'));
$this->setData('uf', $data->getResult()->get('uf'));
return $this;
}
/* AQUI TERMINA A EDIÇÃO E O RESTO DA FUNÇÃO CONTINUA IGUAL
$data = Viacep::getEndereco($cep);
if($data){
$this->setData('logradouro', $data['logradouro']);
$this->setData('bairro', $data['bairro']);
$this->setData('cep', $data['cep']);
$this->setData('cidade', $data['cidade']);
$this->setData('uf', $this->getRegionId($data['uf']));
return $this;
}
$data = Republicavirtual::getEndereco($cep);
if($data){
$this->setData('logradouro', $data['logradouro']);
$this->setData('bairro', $data['bairro']);
$this->setData('cep', $data['cep']);
$this->setData('cidade', $data['cidade']);
$this->setData('uf', $this->getRegionId($data['uf']));
return $this;
}
return false;
}
gcampedelli, obrigada pela dicas... consegui fazer o módulo Correios do Bleez funcionar... mas o PagSeguro não tem jeito mesmo!
Me passa o teu contato direto, quero falar contigo!
Oi, me envia um email gcampedelli@gmail.com
Alguém conseguiu colocar para rodar no 2.3.1 ???
No meu caso estou migrando da versão 2.2.6 já sem funcionar.
O principal problema é que após a realização da compra o campo transaction_code da tabela pagseguro_orders não é preenchido, consecutivamente quando há notificação não é possível fazer a alteração do estado para PagSeguro Confirmado.
Oi Tiago, esse módulo não vai funcionar no 2.3.1. Eu tenho outro módulo que eu mesma fiz php 7.2 para a versão 2.3.1. Mas o required dev é php 7.2. Ele não trabalha com a tabela pagseguro_orders e não faz nenhuma alteração na db do Magento2, sendo totalmente compatível com a plataforma. E volta as notificações, sendo que vce pode instalar outros módulo para envio de emails abandonados sem nenhuma incompatibilidade. Eu abandonei o PagSeguro Oficial na versão 2.2.4 e a partir de então passei a trabalhar apenas com o meu módulo. Ainda não tem boleto instalado, mas já funciona sem problemas no cartão.
Boa, é este no seu Git?
Sobrescrevo o que já tenho ou desinstalo antes? O que recomendas?
Vou testar e deixo aqui meu Review.
Obrigado pela iniciativa. Abraço!
Olá @gcampedelli como faço para ter acesso? Podes compartilhar?
Não sei se era exatamente o mesmo erro, mas comigo não conseguia prosseguir com o pedido (Place Order) pois estava dando "Ocorreu um erro no servidor. Por favor, tente fazer o pedido novamente.". No log aparecia o erro de "Lock wait timeout exceeded" na query:
UPDATE sales_order_grid SET environment='Produção' WHERE entity_id=<NÚMERO>
Então fiz a seguinte modificação no arquivo vendor/pagseguro/magento2/Observer/CreatePagSeguroOrder.php
, substituindo a linha 159 por:
$this->_grid->getConnection()->query($mapsDeleteQuery);
Ambiente:
Magento 2.3.1 migrado da 1.9.3
Módulo Pagseguro 1.12
PHP 7.2
MySQL 5.7
Não sei se era exatamente o mesmo erro, mas comigo não conseguia prosseguir com o pedido (Place Order) pois estava dando "Ocorreu um erro no servidor. Por favor, tente fazer o pedido novamente.". No log aparecia o erro de "Lock wait timeout exceeded" na query:
UPDATE sales_order_grid SET environment='Produção' WHERE entity_id=<NÚMERO>Então fiz a seguinte modificação no arquivo
vendor/pagseguro/magento2/Observer/CreatePagSeguroOrder.php
, substituindo a linha 159 por:$this->_grid->getConnection()->query($mapsDeleteQuery);
Ambiente:
Magento 2.3.1 migrado da 1.9.3
Módulo Pagseguro 1.12
PHP 7.2
MySQL 5.7
Me salvou....
Bom demais.