Skip to content

Commit

Permalink
Criação da página pix.php [Issue #767]
Browse files Browse the repository at this point in the history
  • Loading branch information
GabrielPintoSouza committed Dec 10, 2024
1 parent efb3ea4 commit 8ec1d5d
Show file tree
Hide file tree
Showing 4 changed files with 180 additions and 4 deletions.
8 changes: 6 additions & 2 deletions html/apoio/controller/ContribuicaoLogController.php
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ public function criarCarne()
* Cria um objeto do tipo ContribuicaoLog, chama o serviço de pix registrado no banco de dados
* e insere a operação na tabela de contribuicao_log caso o serviço seja executado com sucesso.
*/
public function criarQrCode()
public function criarQRCode()
{
$valor = filter_input(INPUT_POST, 'valor');
$documento = filter_input(INPUT_POST, 'documento_socio');
Expand Down Expand Up @@ -412,9 +412,13 @@ public function criarQrCode()
$socioDao->registrarLog($contribuicaoLog->getSocio(), $mensagem);

//Chamada do método de serviço de pagamento requisitado
if (!$servicoPagamento->gerarQrCode($contribuicaoLog)) {

$codigoApi = $servicoPagamento->gerarQrCode($contribuicaoLog);

if (!$codigoApi) {
$this->pdo->rollBack();
} else {
$contribuicaoLogDao->alterarCodigoPorId($codigoApi, $contribuicaoLog->getId());
$this->pdo->commit();
}
} catch (PDOException $e) {
Expand Down
102 changes: 102 additions & 0 deletions html/apoio/public/js/pix.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
let acao = 'qrcode';

async function decidirAcao() {
switch (acao) {
case 'qrcode': gerarQRCode(); break;
case 'cadastrar': await cadastrarSocio(); gerarQRCode(); break;//colocar chamada para função de cadastrar sócio
case 'atualizar': await atualizarSocio(); gerarQRCode(); break;//colocar chamada para função de atualizar sócio
default: console.log('Ação indefinida');
}
}

function gerarQRCode() {
const form = document.getElementById('formulario');
const formData = new FormData(form);

const documento = pegarDocumento();

formData.append('nomeClasse', 'ContribuicaoLogController');
formData.append('metodo', 'criarQRCode');
formData.append('documento_socio', documento);

fetch("../controller/control.php", {
method: "POST",
body: formData
})
.then(response => {
if (!response.ok) {
throw new Error("Erro na requisição: " + response.status);
}
return response.json(); // Converte a resposta para JSON
})
.then(resposta => {
if (resposta.qrcode) {
const qrCodeDiv = document.getElementById('qrcode-div');
qrCodeDiv.classList.remove('hidden');

// Criar uma div para centralizar o conteúdo
let qrContainer = document.createElement("div");
qrContainer.style.textAlign = "center";

// Adicionar o QR Code como imagem
let qrcode = document.createElement("img");
qrcode.src = "data:image/jpeg;base64," + resposta.qrcode;
qrContainer.appendChild(qrcode);

// Adicionar um botão abaixo do QR Code
let copyButton = document.createElement("button");
copyButton.textContent = "Copiar Código QR";
copyButton.style.display = "block";
copyButton.style.marginTop = "10px";
copyButton.style.margin = "auto";
copyButton.classList.add('btn');
copyButton.classList.add('btn-success');
qrContainer.appendChild(copyButton);

qrCodeDiv.appendChild(qrContainer);

// Ajustar a largura do botão após a imagem carregar
qrcode.onload = function () {
copyButton.style.width = qrcode.width * (0.75) + "px";
};

// Rolar a página para o form3
window.location.hash = '#qrcode-div';

// Adicionar o evento de clique no botão para copiar o código
copyButton.addEventListener('click', function (ev) {
ev.preventDefault();
// Criar um elemento temporário para copiar o texto
let tempInput = document.createElement("input");
tempInput.value = resposta.copiaCola;//substituir pelo código da área de transferência
document.body.appendChild(tempInput);

// Selecionar e copiar o texto
tempInput.select();
document.execCommand("copy");

// Remover o elemento temporário
document.body.removeChild(tempInput);

alert("Código QR copiado para a área de transferência!");
});

} else {
alert("Ops! Ocorreu um problema na geração da sua forma de pagamento, tente novamente, se o erro persistir contate o suporte.");
}

})
.catch(error => {
console.error("Erro:", error);
});
}

configurarAvancaValor(verificarValor);
configurarVoltaValor();
configurarVoltaCpf();
configurarVoltaContato();
configurarAvancaEndereco(verificarEndereco);
configurarAvancaContato(verificarContato);
configurarAvancaTerminar(decidirAcao);
configurarMudancaOpcao(alternarPfPj);
configurarConsulta(buscarSocio);
8 changes: 6 additions & 2 deletions html/apoio/service/PagarMePixService.php
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,13 @@ public function gerarQrCode(ContribuicaoLog $contribuicaoLog)
if ($responseData['status'] === 'pending') {
// Gera um qr_code
$qr_code_url = $responseData['charges'][0]['last_transaction']['qr_code_url'];
$qr_code = file_get_contents($qr_code_url);
$qr_code_url = file_get_contents($qr_code_url);

$qr_code = $responseData['charges'][0]['last_transaction']['qr_code'];
$idPedido = $responseData['id'];
//envia o link da url
echo json_encode(['qrcode' => base64_encode($qr_code)]); //enviar posteriormente a cópia do QR para área de transferência junto
echo json_encode(['qrcode' => base64_encode($qr_code_url), 'copiaCola' => $qr_code]); //enviar posteriormente a cópia do QR para área de transferência junto
return $idPedido;
} else {
echo json_encode(["erro" => "Houve um erro ao gerar o QR CODE de pagamento. Verifique se as informações fornecidas são válidas."]);
return false;
Expand Down
66 changes: 66 additions & 0 deletions html/apoio/view/pix.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php
$title = 'Emitir QRCode';
require_once './templates/header.php';

$textoTipoContribuicao = 'GERAR QRCode';
$tipoContribuicao = 'QRCode';

?>
<div class="container-contact100">
<div class="wrap-contact100">

<!--Adiciona a logo e o título ao topo da página-->
<?php include('./components/contribuicao_brand.php'); ?>

<form id="formulario">

<input type="hidden" name="forma-contribuicao" id="forma-contribuicao" value="boleto">

<div id="pag1" class="wrap-input100">
<!--Adiciona a página de valor de contribuição-->
<?php include('./components/contribuicao_valor.php'); ?>
<?php $tipoAvanca = 'valor';
include('./components/btn_avanca.php'); ?>
</div>

<div id="pag2" class="wrap-input100 hidden">
<!--Adiciona a página para identificação de Sócios PJ e PF-->
<?php include('./components/contribuicao_documento.php'); ?>
</div>

<div id="pag3" class="wrap-input100 hidden">
<!--Adiciona a página para coleta do nome, data de nascimento, telefone e e-mail-->
<?php include('./components/contribuicao_contato.php'); ?>
</div>

<div id="pag4" class="wrap-input100 hidden">
<!--Adiciona a página para coleta do CEP, rua, número, bairro, estado, cidade e complemento-->
<?php include('./components/contribuicao_endereco.php'); ?>
</div>

<div id="pag5" class="wrap-input100 hidden">
<!--Adiciona a página para agradecimento e confirmação da geração do boleto-->
<?php include('./components/contribuicao_confirmacao.php'); ?>
</div>
</div>

</form>

<div class="wrap-contact100 mt-5 hidden text-center" id="qrcode-div">
<h4>Escaneie seu QRCode, <br> ou então clique no nosso copia e cola!</h4>

</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.min.js"></script>

<script src="../vendor/bootstrap/js/bootstrap.min.js"></script>

<script src="../vendor/select2/select2.min.js"></script>
<script src="../public/js/mascara.js"></script>
<script src="../public/js/util.js"></script>
<script src="../public/js/pix.js"></script>
<!--Busca cep-->
<script src="../../../Functions/busca_cep.js"></script>
<?php
require_once './templates/footer.php';
?>

0 comments on commit 8ec1d5d

Please sign in to comment.