Dando seguimento para quem está usando a versão 23.07 como eu e ainda não quiz atualizzar para a versão 24.xx para usar o novo formato e código da api..
eu fiz uma alteracões no código original da api versão 23.07 para funcionar na opcão de titulo vencido ele informar junto o copia e cola qrcode pix em formato pagina separada
segue o código
public function get_vencido($valor){
$comandoSQL = "SELECT uuid_lanc AS uuid, login, status, tipo, valor, linhadig, datavenc, login, cpf_cnpj, sis_qrpix.qrcode AS pix FROM vtab_titulos LEFT JOIN sis_qrpix ON uuid_lanc = sis_qrpix.titulo WHERE (login = :valor OR cpf_cnpj = :valor) AND status = 'vencido' AND deltitulo = 0";
// Process the response and return the overdue invoices along with the Pix QR codes const boletosVencidos = response.data.titulos.map(boleto => ({ valor: boleto.valor, datavenc: new Date(boleto.datavenc.split(' ')[0]), linhadig: boleto.linhadig.replace(/[. ]/g, ''), // Remove dots and spaces pix: boleto.pix // Assuming 'pix' field is included in the API response }));
// Sort the invoices by due date boletosVencidos.sort((a, b) => a.datavenc - b.datavenc);
depois no tratamento que irá enviar a resposta do whatsapp bot ao cliente conforme na imagem abaixo
else if (currentState.aguardandoCPFBolVencido) { const cpfCliente = msg.body.trim().replace(/\D/g, ''); // Formata o CPF para remover pontos e espaços const boletosVencidos = await buscarBoletosVencidos(cpfCliente);
if (boletosVencidos.length > 0) { boletosVencidos.forEach(boleto => { let mensagemBoletoVencido = `Boleto vencido:\n💰 Valor: ${boleto.valor}\n📅 Vencimento: ${boleto.datavenc}\n🔢 Linha Digitável:\n${boleto.linhadig.replace(/\D/g, '')}\n`;
// Envia a primeira mensagem com os detalhes do boleto client.sendMessage(msg.from, mensagemBoletoVencido).then(() => { // Envia a segunda mensagem apenas com o QR Code Pix após um breve intervalo setTimeout(() => { client.sendMessage(msg.from, `🔢 QR Code Pix:\n${boleto.pix}`); }, 1000); // Ajuste o intervalo conforme necessário }); }); } else { client.sendMessage(msg.from, 'Não foram encontrados boletos vencidos para este CPF.'); }
chatStates[chatId] = {}; // Resetar o estado }
neste formato eu já consigo obter os dados que necessito no meu API bot whatsapp que estou desenvolvendo
de volta agora com mais tempo para voltar aos testes, irei efetuar os testes hoje ainda, lembrando que estou na versão 23.07 ainda kkk não atualizei.. porque tenho que mexer em um monte de outros plugins dashboard, etc.. que tenho de monitoramento no meu sistema.
Boa tarde, fiz alguns testes aqui e consegui pegar os QR codes desta pasta e passá-los na API, caso o título tenha o QR code e o sistema tenha salvo.
Se puder testar e dar um feedback, ajudaria muito. Este arquivo está atualizado com os últimos endpoints que atualizei e pode usar a documentação que vai funcionar.
José sabe informar se dá para adicionar código para o jwt puxar direto da pasta /boleto/qrcode ? pois o sistema armazena lá a imagem do qrcode especifico PIX.01020304-506070800A0B0C0D0E0F10.png agora só resta saber como o código armazena os mesmos lá. se é quando o carne com todos os titulos é gerado ou se são salvos posteriormente.
José aproveitei e corrigi o seu código para funcionar na versão 23.07 titulo.api
e funcionou, vou tentar verificar as novidades que postou no link https://storage.. pra implementar na api 23.07
segue o código alterado pra funcionar na 23.07
public function get_aberto($valor) {
$comandoSQL = "SELECT uuid_lanc AS uuid, login, status, tipo, valor, linhadig, datavenc,login, cpf_cnpj, sis_qrpix.qrcode AS pix FROM vtab_titulos LEFT JOIN sis_qrpix ON uuid_lanc = sis_qrpix.titulo WHERE (login = :valor OR cpf_cnpj = :valor) AND status = 'aberto' AND deltitulo = 0 ORDER BY uuid_lanc;";
OBS- alguns dados pessoais editados na resposta do CURL.. por motivos de privacidade.
Pedro Costa > Thiago MendonçaJaneiro 26, 2024 21:14
é possivel sim se pegar o link completo url com uuid mas para isso é necessário filtra via CPF = numero titulo = uuuid para buscar , acredito que irá abrir direto no site do banco e baixar o pdf no meu caso estou testando com gerencianet abre direto o link completo do gerencianet, mesmo link que aparece quando clicamos dentro do mk-auth em visualizar boleto ele já abre em pdf /boleto/boleto.hhvm?titulo=$tit_number
Boa noite josé então, eu consegui atualizar o titulo.api na versão 23.07 para me responder no curl o pixqrcode tive que criar a funcão abaixo
public function get_pix($valor) { // Ajustando a consulta para incluir dados do QR Code PIX $comandoSQL = "SELECT t.uuid_lanc AS uuid, t.login, t.status, t.tipo, t.valor, t.linhadig, t.datavenc, t.login, t.cpf_cnpj, p.qrcode FROM vtab_titulos AS t LEFT JOIN sis_qrpix AS p ON t.uuid_lanc = p.titulo WHERE (t.login = :valor OR t.cpf_cnpj = :valor) AND t.status = 'aberto' AND t.deltitulo = 0";
// Retornando os títulos abertos junto com os QR Codes PIX correspondentes echo json_encode(array('Total' => $numeroDeLinhas, 'titulosComPix' => $resultadosSQL)); }
em seguida testei via curl jwt token de um servidor remoto
curl -H 'Authorization: Bearer SEU JWT TOKEN AQUI' -i -k 'https://mk-auth-ip/api/titulo/pix/$cpf_cnpj' HTTP/1.1 200 OK Date: Fri, 26 Jan 2024 01:43:30 GMT Server: Apache/2.4.38 (Debian) Access-Control-Max-Age: 86400 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET Etag: MKA_JSON_968a921225281 Vary: Accept-Encoding MKAUTH: API Content-Length: 5310 Content-Type: text/html;charset=UTF-8
receio de atualizar o mk-auth é grande kkkk ainda não tive tempo de subir uma nova VM para testar 100% a versão 24.0x antes de rodar um update no sistema em producão.
confesso que tentei criar o arquivo pix.api e adicionei o código mas ao conectar via JWT ele me dava erro. acesso negado.. foi então que eu vi que só os arquivos já criados com .api que conseguiriam executar o código.
No caso, o endpoint aberto ainda não existe na versão 23.07. Se atualizar o sistema, será possível utilizá-lo. Ou pode baixá-lo aqui titulo.zip, mas não inclui o pixqrcode (apenas na versão 24 em diante).
As próximas novidades que estou finalizando são a paginação da API (para não vir trocentos registros de uma vez) e no endpoint api/titulo/titulos, no modo POST, possibilitando passar login e CPF em um array e retornar os títulos de sua escolha (pagos, abertos e vencidos). logo fica um exemplo pratico no postman.
Respostas
Dando seguimento para quem está usando a versão 23.07 como eu e ainda não quiz atualizzar para a versão 24.xx para usar o novo formato e código da api..
eu fiz uma alteracões no código original da api versão 23.07 para funcionar na opcão de titulo vencido ele informar junto o copia e cola qrcode pix em formato pagina separada
segue o código
public function get_vencido($valor){
$comandoSQL = "SELECT uuid_lanc AS uuid, login, status, tipo, valor, linhadig, datavenc, login, cpf_cnpj, sis_qrpix.qrcode AS pix
FROM vtab_titulos
LEFT JOIN sis_qrpix ON uuid_lanc = sis_qrpix.titulo
WHERE (login = :valor OR cpf_cnpj = :valor)
AND status = 'vencido' AND deltitulo = 0";
$rotinaSQL = DB::prepare($comandoSQL);
$rotinaSQL -> bindParam('valor', $valor);
$rotinaSQL -> execute();
$resultadosSQL = $rotinaSQL -> fetchAll();
$numeroDeLinhas = $rotinaSQL -> rowCount();
echo json_encode(array('Total' => $numeroDeLinhas, 'titulos' => $resultadosSQL));
}
Depois no whatsapp bot codigo funcão para interpretar os dados enviados da api do mk-auth via jwt-token
funcão que recebe os dados
// Função para buscar boletos vencidos do cliente pelo CPF no setor financeiro
async function buscarBoletosVencidos(cpf) {
const tokenJWT = fs.readFileSync(path.join(__dirname, 'token.txt'), 'utf-8');
const url = `https://ip-do-mk-auth-aqui/api/titulo/vencido/${cpf}`;
const agent = new https.Agent({ rejectUnauthorized: false });
try {
const response = await axios.get(url, {
headers: { 'Authorization': `Bearer ${tokenJWT}` },
httpsAgent: agent
});
// Process the response and return the overdue invoices along with the Pix QR codes
const boletosVencidos = response.data.titulos.map(boleto => ({
valor: boleto.valor,
datavenc: new Date(boleto.datavenc.split(' ')[0]),
linhadig: boleto.linhadig.replace(/[. ]/g, ''), // Remove dots and spaces
pix: boleto.pix // Assuming 'pix' field is included in the API response
}));
// Sort the invoices by due date
boletosVencidos.sort((a, b) => a.datavenc - b.datavenc);
return boletosVencidos;
} catch (error) {
console.error('Erro ao buscar boletos vencidos:', error);
return [];
}
}
depois no tratamento que irá enviar a resposta do whatsapp bot ao cliente conforme na imagem abaixo
else if (currentState.aguardandoCPFBolVencido) {
const cpfCliente = msg.body.trim().replace(/\D/g, ''); // Formata o CPF para remover pontos e espaços
const boletosVencidos = await buscarBoletosVencidos(cpfCliente);
if (boletosVencidos.length > 0) {
boletosVencidos.forEach(boleto => {
let mensagemBoletoVencido = `Boleto vencido:\n💰 Valor: ${boleto.valor}\n📅 Vencimento: ${boleto.datavenc}\n🔢 Linha Digitável:\n${boleto.linhadig.replace(/\D/g, '')}\n`;
// Envia a primeira mensagem com os detalhes do boleto
client.sendMessage(msg.from, mensagemBoletoVencido).then(() => {
// Envia a segunda mensagem apenas com o QR Code Pix após um breve intervalo
setTimeout(() => {
client.sendMessage(msg.from, `🔢 QR Code Pix:\n${boleto.pix}`);
}, 1000); // Ajuste o intervalo conforme necessário
});
});
} else {
client.sendMessage(msg.from, 'Não foram encontrados boletos vencidos para este CPF.');
}
chatStates[chatId] = {}; // Resetar o estado
}
neste formato eu já consigo obter os dados que necessito no meu API bot whatsapp que estou desenvolvendo
José boa tarde tranquilo
de volta agora com mais tempo para voltar aos testes, irei efetuar os testes hoje ainda, lembrando que estou na versão 23.07 ainda kkk não atualizei.. porque tenho que mexer em um monte de outros plugins dashboard, etc.. que tenho de monitoramento no meu sistema.
José sabe informar se dá para adicionar código para o jwt puxar direto da pasta /boleto/qrcode ? pois o sistema armazena lá a imagem do qrcode especifico PIX.01020304-506070800A0B0C0D0E0F10.png agora só resta saber como o código armazena os mesmos lá. se é quando o carne com todos os titulos é gerado ou se são salvos posteriormente.
Bom dia, para criar um controle personalizado, você deve nomear a classe igual ao arquivo .api e então liberar o acesso no webadmin
pix.zip
José aproveitei e corrigi o seu código para funcionar na versão 23.07 titulo.api
e funcionou, vou tentar verificar as novidades que postou no link https://storage.. pra implementar na api 23.07
segue o código alterado pra funcionar na 23.07
public function get_aberto($valor) {
$comandoSQL = "SELECT uuid_lanc AS uuid, login, status, tipo, valor, linhadig, datavenc,login, cpf_cnpj, sis_qrpix.qrcode AS pix
FROM vtab_titulos
LEFT JOIN sis_qrpix ON uuid_lanc = sis_qrpix.titulo
WHERE (login = :valor OR cpf_cnpj = :valor) AND status = 'aberto' AND deltitulo = 0
ORDER BY uuid_lanc;";
$rotinaSQL = DB::prepare($comandoSQL);
$rotinaSQL -> bindParam('valor', $valor);
$rotinaSQL -> execute();
$resultadosSQL = $rotinaSQL -> fetchAll();
$numeroDeLinhas = $rotinaSQL -> rowCount();
if ($numeroDeLinhas > 0) {
echo json_encode(array('Total' => $numeroDeLinhas, 'titulos' => $resultadosSQL));
} else {
echo json_encode(array('mensagem' => 'Registro não encontrado'));
}
}
e a resposta abaixo
curl -H 'Authorization: Bearer JWT TOKEN' -i -k 'https://190.8.160.4/api/titulo/aberto/01234567890'
HTTP/1.1 200 OK
Date: Sat, 27 Jan 2024 01:40:00 GMT
Server: Apache/2.4.38 (Debian)
Access-Control-Max-Age: 86400
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Etag: MKA_JSON_3b879c288f039
Vary: Accept-Encoding
MKAUTH: API
Content-Length: 5268
Content-Type: text/html;charset=UTF-8
{"Total":2,
"titulos":
[
{"uuid":"04441CD1-B998-4F82-B650-CCB9C1856785207",
"login":"nomedocliente",
"status":"aberto",
"tipo":"mensalidade",
"valor":"97.99",
"linhadig":"36491.01192 00024.9231006 00001.556956 3 00000000009099",
"datavenc":"2024-07-10 00:00:00",
"cpf_cnpj":"01234567890",
"pix":"00020406071829990014BR.GOV.BCB.PIX2572qrcodespix.sejaefi.com.br\/bolix\/v2\/cobv\/000000000065408a94ab3be1470d28aa5204000053039865802BR5905EFISA6008SAOPAULO62070503***63040DF3"}
{"uuid":"2D4441E1-B8DE-4F16-A0CD-C18E3094561581B",
"login":"nomedocliente",
"status":"aberto",
"tipo":"mensalidade",
"valor":"97.99",
"linhadig":"36490.00092 00014.981005 00000.557009 3 00000000009799",
"datavenc":"2024-08-10 00:00:00",
"cpf_cnpj":"01234567890",
"pix":"00020304025226947084BR.GOV.BCB.PIX2572qrcodespix.sejaefi.com.br\/bolix\/v2\/cobv\/0000000000bd4cffae708af548d9b82a5204000053039865802BR5905EFISA6008SAOPAULO62070503***630497B4"}
]
}
OBS- alguns dados pessoais editados na resposta do CURL.. por motivos de privacidade.
é possivel sim se pegar o link completo url com uuid mas para isso é necessário filtra via CPF = numero titulo = uuuid para buscar , acredito que irá abrir direto no site do banco e baixar o pdf no meu caso estou testando com gerencianet abre direto o link completo do gerencianet, mesmo link que aparece quando clicamos dentro do mk-auth em visualizar boleto ele já abre em pdf /boleto/boleto.hhvm?titulo=$tit_number
Boa noite josé então, eu consegui atualizar o titulo.api na versão 23.07 para me responder no curl o pixqrcode tive que criar a funcão abaixo
public function get_pix($valor) {
// Ajustando a consulta para incluir dados do QR Code PIX
$comandoSQL = "SELECT t.uuid_lanc AS uuid, t.login, t.status, t.tipo, t.valor, t.linhadig, t.datavenc, t.login, t.cpf_cnpj, p.qrcode
FROM vtab_titulos AS t
LEFT JOIN sis_qrpix AS p ON t.uuid_lanc = p.titulo
WHERE (t.login = :valor OR t.cpf_cnpj = :valor)
AND t.status = 'aberto' AND t.deltitulo = 0";
$rotinaSQL = DB::prepare($comandoSQL);
$rotinaSQL->bindParam(':valor', $valor);
$rotinaSQL->execute();
$resultadosSQL = $rotinaSQL->fetchAll(PDO::FETCH_ASSOC);
$numeroDeLinhas = $rotinaSQL->rowCount();
// Retornando os títulos abertos junto com os QR Codes PIX correspondentes
echo json_encode(array('Total' => $numeroDeLinhas, 'titulosComPix' => $resultadosSQL));
}
em seguida testei via curl jwt token de um servidor remoto
curl -H 'Authorization: Bearer SEU JWT TOKEN AQUI' -i -k 'https://mk-auth-ip/api/titulo/pix/$cpf_cnpj'
HTTP/1.1 200 OK
Date: Fri, 26 Jan 2024 01:43:30 GMT
Server: Apache/2.4.38 (Debian)
Access-Control-Max-Age: 86400
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Etag: MKA_JSON_968a921225281
Vary: Accept-Encoding
MKAUTH: API
Content-Length: 5310
Content-Type: text/html;charset=UTF-8
{"Total":1,"titulosComPix":[{"uuid":"857B0000-FF00-4D00-8F00-C1767E340000","login":"clienteteste","status":"aberto","tipo":"mensalidade","valor":"58.68","linhadig":"36490.00032 003214.9561705 00001.553459442 9 35600000005847","datavenc":"2024-02-12 00:00:00","cpf_cnpj":"01234567890","qrcode":"00020101021363940014BR.GOV.BCB.PIX2571qrcodespix.sejaefi.com.br\/bolix\/v2\/cobv\/2c32a6f1d36b40f5a50eca74f04bccc05204000025435866802BR5905EFISA6008SAOPAULO62070503***6304F3F5"}]}
receio de atualizar o mk-auth é grande kkkk ainda não tive tempo de subir uma nova VM para testar 100% a versão 24.0x antes de rodar um update no sistema em producão.
confesso que tentei criar o arquivo pix.api e adicionei o código mas ao conectar via JWT ele me dava erro. acesso negado.. foi então que eu vi que só os arquivos já criados com .api que conseguiriam executar o código.
vai incluir na api webhook? para quando der alguma baixa no pagamento sermos notificados, assim como os chamados etc