allgood / APInter-PHP

Biblioteca PHP para acesso à API do Banco Inter
GNU Lesser General Public License v3.0
104 stars 52 forks source link

Api 2.0 #29

Closed MoisesFagundes closed 2 years ago

MoisesFagundes commented 2 years ago

Olá Claudemir, estou tendo alguns problemas para implementar a api no meu sistema.

Este erro fica aparecendo:

erro1 erro2

Este é meu código:

boleto.blade.php:

`<?php

require_once "vendor/autoload.php";

use ctodobom\APInterPHP\BancoInter; use ctodobom\APInterPHP\TokenRequest; use ctodobom\APInterPHP\BancoInterException; use ctodobom\APInterPHP\Cobranca\Boleto; use ctodobom\APInterPHP\Cobranca\Pagador;

$dotenv = Dotenv\Dotenv::createImmutable(DIR); $dotenv->load();

// dados do correntista $conta = $ _ENV['INTER_CONTA' ; $cnpj = $ _ENV['INTER_CNPJ']; $certificado = $ _ENV['INTER_CERTIFICATE_PATH']; $chavePrivada = $ _ENV['INTER_PRIVATE_KEY_PATH'];

// A T E N Ç Ã O // // Todos os dados verificáveis precisam ser válidos // Utilize sempre CPF/CNPJ, CEP, Cidade e Estado válidos // Para evitar importunar estranhos utilize seus próprios // dados ou de alguma pessoa que esteja ciente, pois as // cobranças sempre são cadastradas no sistema quente // do banco central e aparecerão no DDA dos sacados. // // Os dados de exemplo NÃO SÃO VÁLIDOS e se não forem // alterados o script de exemplo não funcionará.

// dados de teste $cpfPagador = $ _ENV['PAGADOR_CPF']; $estadoPagador = $ _ENV['PAGADOR_UF'];

$banco = new BancoInter($conta, $certificado, $chavePrivada, new TokenRequest($ _ENV['INTER_CLIENT_ID'], $ _ENV ['INTER_CLIENT_SECRET'], 'boleto-cobranca.read boleto-cobranca.write'));

// Se a chave privada estiver encriptada no disco // $banco->setKeyPassword("senhadachave");

$pagador = new Pagador(); $pagador->setTipoPessoa(Pagador::PESSOA_FISICA); $pagador->setNome("Nome de Teste"); $pagador->setEndereco("Nome da rua"); $pagador->setNumero(42); $pagador->setBairro("Centro"); $pagador->setCidade("Cidade"); $pagador->setCep($ _ENV['PAGADOR_CEP']);

$pagador->setCnpjCpf($cpfPagador); $pagador->setUf($estadoPagador);

$boleto = new Boleto(); $boleto->setPagador($pagador); $boleto->setSeuNumero("123456"); $boleto->setValorNominal(100.10); $boleto->setDataVencimento(date_add(new DateTime() , new DateInterval("P10D"))->format('Y-m-d'));

var_dump(json_decode(json_encode($boleto)));

try { $banco->createBoleto($boleto); echo "\nBoleto Criado\n"; echo "\n seuNumero: ".$boleto->getSeuNumero(); echo "\n nossoNumero: ".$boleto->getNossoNumero(); echo "\n codigoBarras: ".$boleto->getCodigoBarras(); echo "\n linhaDigitavel: ".$boleto->getLinhaDigitavel(); } catch ( BancoInterException $e ) { echo "\n\n".$e->getMessage(); echo "\n\nCabeçalhos: \n"; echo $e->reply->header; echo "\n\nConteúdo: \n"; echo $e->reply->body; echo "\n\n".$e->getTraceAsString(); die; }

try { echo "\Download do PDF\n"; $pdf = $banco->getPdfBoleto($boleto->getNossoNumero()); echo "\n\nSalvo PDF em ".$pdf."\n"; } catch ( BancoInterException $e ) { echo "\n\n".$e->getMessage(); echo "\n\nCabeçalhos: \n"; echo $e->reply->header; echo "\n\nConteúdo: \n"; echo $e->reply->body; echo "\n\n".$e->getTraceAsString(); }

try { echo "\nConsultando boleto\n"; $boleto2 = $banco->getBoleto($boleto->getNossoNumero()); var_dump($boleto2); } catch ( BancoInterException $e ) { echo "\n\n".$e->getMessage(); echo "\n\nCabeçalhos: \n"; echo $e->reply->header; echo "\n\nConteúdo: \n"; echo $e->reply->body; echo "\n\n".$e->getTraceAsString(); }

try { echo "\nBaixando boleto\n"; $banco->baixaBoleto($boleto->getNossoNumero(), INTER_BAIXA_DEVOLUCAO); echo "Boleto Baixado"; } catch ( BancoInterException $e ) { echo "\n\n".$e->getMessage(); echo "\n\nCabeçalhos: \n"; echo $e->reply->header; echo "\n\nConteúdo: \n"; echo $e->reply->body; echo "\n\n".$e->getTraceAsString(); }

try { echo "\nConsultando boleto antigo\n"; $boleto2 = $banco->getBoleto("00571817313"); var_dump($boleto2); } catch ( BancoInterException $e ) { echo "\n\n".$e->getMessage(); echo "\n\nCabeçalhos: \n"; echo $e->reply->header; echo "\n\nConteúdo: \n"; echo $e->reply->body; echo "\n\n".$e->getTraceAsString(); }

try { echo "\nListando boletos vencendo nos próximos 10 dias (apenas a primeira página)\n"; $listaBoletos = $banco->listaBoletos(date('Y-m-d'), date_add(new DateTime() , new DateInterval("P10D"))->format('Y-m-d')); var_dump($listaBoletos); } catch ( BancoInterException $e ) { echo "\n\n".$e->getMessage(); echo "\n\nCabeçalhos: \n"; echo $e->reply->header; echo "\n\nConteúdo: \n"; echo $e->reply->body; }

echo "\n\n";`

.env:

`INTER_CONTA="" INTER_CNPJ="" INTER_CERTIFICATE_PATH="private/Inter API_Certificado.crt" INTER_PRIVATE_KEY_PATH="private/Inter API_Chave.key"

INTER_CLIENT_ID="" INTER_CLIENT_SECRET=""

PAGADOR_CPF="*" PAGADOR_UF="*" PAGADOR_CEP=""`

Pelo que eu entendi o código no arquivo BancoInter.php não está encontrando o certificado e a chave que eu obtiver no internet banking.

Eu coloquei elas dentro da pasta private dentro da raiz da aplicação da api-inter.

erro4 erro5

Até o momento eu já tentei mudar a pasta de lugar para dentro da src, tirar os arquivos de dentro da pasta e deixar solto na raiz e na src, mudar o jeito como passo o caminho dentro do meu código partindo da raíz do meu projeto e não da raiz da api, também mudei a extensão do arquivo Inter Api_Certificado para (ctr, pem, ssl), porém sem sucesso.

Você saberia me informar onde eu devo está deixando esses arquivos e como eu referencio o caminho dentro do meu código?

dadeke commented 2 years ago

Olá @MoisesFagundes

Como vai?

https://github.com/allgood/APInter-PHP/blob/2f3ac799e69541938ac5a77bdf77eefd8fd06cc2/exemplo.php#L38

Conforme com o exemplo.php e seus screenshots, realize o seguinte teste:

$banco = new BancoInter(
    $conta,
    'C:\xampp\htdocs\EmpireEvents2\vendor\ctodobom\api-inter\private\Inter API_Certificado.crt',
    'C:\xampp\htdocs\EmpireEvents2\vendor\ctodobom\api-inter\private\Inter API_Chave.key'
);

🤔

Acontece algum resultado positivo?

allgood commented 2 years ago

o erro é de carga do certificado mesmo, possivelmente o caminho passado não está correto. O ideal é sempre passar o caminho completo, ou usar a constante DIR concatenado com o caminho. Consulte o resultado do caminho final inspecionando o que você está passando e conferindo com o caminho do arquivo no seu hd.