pagseguro/pagseguro-modulo-magento-v2

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

image

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.