Git Product home page Git Product logo

apinter-php's Introduction

APInter-PHP

Projeto com o início de uma biblioteca para a utilização das APIs fornecidas pelo Banco Inter (077).

Inicialmente apenas a criação de boletos é suportada.

Como usar:

Instalação

Para utilizar a biblioteca através do composer:

Versão estável

composer require "ctodobom/api-inter"

Versão de desenvolvimento principal

composer require ctodobom/api-inter:dev-main

Documentação

O arquivo exemplo.php fornece o básico para a utilização das classes.

Os parâmetros para a execução do exemplo devem ser salvos no arquivo com o nome .env, exemplos de configuração encontram-se no arquivo .env.example

ATENÇÃ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á.

Licença

Todo o código deste projeto está licensiado sob a GNU Lesser General Public License versão 3.

Pode ser utilizado inalterado em qualquer projeto fechado ou open source, alterações efetuadas precisam ser fornecidas em código aberto aos usuários do sistema.

Facilitou sua vida?

Se o código do projeto ajudou você em uma tarefa complexa, considere fazer uma doação ao autor pelo PIX abaixo.

image

Chave Pix: 80fd8916-1131-4844-917e-2732eaa2ba74

apinter-php's People

Contributors

allgood avatar dadeke avatar devdiogenes avatar kravetz avatar viniciusdbarth avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

apinter-php's Issues

Arquivo duplo no temporário

Na classe BancoInter, no método getPdfBoleto, linha 256

$filename = tempnam($savePath, "boleto-inter-").".pdf";

Está criando 2 arquivos no temporário ou no diretório setado no $savePath

Ele cria por exemplo: "boleto-inter-yB2er6" e "boleto-inter-yB2er6.pdf"

{"message":["codigoBaixa: não pode ser nulo"]}

Bom dia,

Salve pessoal,

Venho usando o código à uns meses com sucesso, mas agora

começou a apresentar essa mensagem:

Erro HTTP 400
Cabeçalhos:
HTTP/2 400 cache-control: no-cache, no-store, max-age=0, must-revalidate content-type: application/json;charset=utf-8 date: Mon, 24 Jan 2022 09:49:03 GMT expires: 0 pragma: no-cache server: Apache-Coyote/1.1 strict-transport-security: max-age=31536000 ; includeSubDomains vary: Origin x-application-context: application x-content-type-options: nosniff x-envoy-upstream-service-time: 8 x-frame-options: DENY x-upstream-time: 176 x-xss-protection: 1; mode=block content-length: 47
Conteúdo:
{"message":["codigoBaixa: não pode ser nulo"]}

Alguém tem uma ideia?

Erro 401, mas nenhuma mensagem

Olá, primeiro de tudo quero agradecer ao incrível trabalho de vocês ao mantar essa api complicadíssima e de pouca documentação. Fui contratado para integrar um sistema em Java com a api, então tive que escrever boa parte do código na linguagem. Algo muito confuso, a princípio, é a forma com que o Java faz https. É necessário instanciar e configurar tantas factory class e tantos managers que sinceramente preferiria utilizar php. Enfim, no final, todas as minhas requests retornavam algo como "402: Unauthorized", o que é estranho pois havia configurado tudo para funcionar perfeitamente. Então, criei um script python de poucas linhas para averiguar se não era algum erro meu, e por incrível que pareça, utilizando o mesmo body e mesmos headers, consegui fazer a requisição (lib requests). Achando isso muito estranho, decidi baixar esse projeto e preencher os dados no example.php para fazer o mesmo teste. Devo dizer, a cada momento que passa fico mais e mais frustrado com esse projeto. Simplesmente não há mensagem de erro, apenas um erro 401. Segue o output:

diegovsky@ryzenarch ~/APInter-PHP (master)> php exemplo.php


Erro HTTP 401

Cabeçalhos: 
HTTP/2 401 
content-type: application/json
date: Thu, 11 Mar 2021 17:30:14 GMT
server: Apache-Coyote/1.1
vary: Origin
x-request-id: 
x-upstream-time: 29
content-length: 0



Conteúdo: 
diegovsky@ryzenarch ~/APInter-PHP (master)>

Uma coisa que devo citar é: a empresa que me contratou gerou o App no site do inter e eu baixei um zip contendo os arquivos .crt e .key. Não tive de criar com openssl, mas sei que não há senha.

Release request

Cara, antes de tudo, obrigado por ter começado esse projeto, me salvou aqui na integração com o Inter.
Comecei a usar a lib e ai pra instalar tive de mudar a minimum-stability para "dev", só que isso quebrou meu projeto com algumas dependências instáveis. Acho que no estado atual seria legal lançar uma release 1.0.0 da tua lib.

Sobre a Api2

Boa tarde Claudemir! A respeito da nova versão da api do banco inter, no arquivo .env requer dois novos parâmetros que não era pedido na versão anterior, que são INTER_CLIENT_ID e INTER_CLIENT_SECRET, no próprio arquivo menciona que esses dados poderiam ser obtidos no internet banking do banco inter, porém não estou conseguindo localizar esses dados em nenhum lugar, o senhor poderia me informar em que lugar do internet banking os encontro?

Erro na instalação pelo composer

Estou obtendo esse erro ao tentar instalar:

[InvalidArgumentException]
Could not find a version of package ctodobom/api-inter matching your minimum-stability (stable).
Require it with an explicit version constraint allowing its desired stability.

Lentidão Geração e Consulta de Boletos

Olá,

Estamos usando sua classe para a geração de boletos do banco inter, porém nos últimos dias estamos sentido uma lentidão absurda, você está experienciando o mesmo problema? Será que é algo que possamos fazer na classe para melhorar?

Adicionar Conta como parametro no call back

Seria interessante adicionar a conta como parametro no callback para carregar o token certo de cada cliente? dessa forma abaixo

if (($loadedTokenData = ($this->tokenLoadCallback)($this->accountNumber)) !== false) {

($this->tokenNewCallback)(json_encode($this->exportOAuthToken()), $this->accountNumber);

Erro de CURL could not load PEM

Exception: Curl error: could not load PEM client certificate, OpenSSL error error:02001003:system library:fopen:No such process, (no key found, wrong pass phrase, or wrong file format?) in C:\xampp\htdocs_workana\siga_componentes_bancointer\src\BancoInter.php on line 190

Erro ao definir desconto: Métodos set() com notação de tipo retorno

Boa tarde,

Nos métodos Boleto::setDesconto1(), Boleto::setDesconto2() e Boleto::setDesconto3() tem uma notação do tipo de retorno. Porém, como é um método set(), não tem deve ter um return.

Precisa remover essas notações de tipo de retorno.

Atualmente da esse erro se crio um desconto: TypeError: Return value of ctodobom\APInterPHP\Cobranca\Boleto::setDesconto1() must be an instance of ctodobom\APInterPHP\Cobranca\Desconto, none returned in file /var/www/e1-remessa-api/vendor/ctodobom/api-inter/src/Cobranca/Boleto.php on line 254

bug_boletoInter

Boletos pagos não são identificados

Tenho percebido que boletos pagos não são identificados pelo meu site. Isso começou esporadicamente, mas notei que um numero maior de vezes se estabeleceu. Alguém notou algo semelhante?

Novos endpoints, implementar funções de consulta de saldo e extrato

Boa tarde, Claudemir.

O Inter disponibilizou três novos endpoints na API2, todos dentro do escopo extrato.read

  1. Consultar saldo:
    GET https://cdpj.partners.bancointer.com.br/banking/v2/saldo
    parâmetro: dataSaldo, YYYY-MM-DD, opcional

  2. Consultar extrato, entre datas
    https://cdpj.partners.bancointer.com.br/banking/v2/extrato
    GET https://cdpj.partners.bancointer.com.br/banking/v2/extrato
    parâmetros: dataInicio e dataFim

  3. Gerar extrato em PDF:
    https://cdpj.partners.bancointer.com.br/banking/v2/extrato/exportar
    parâmetros: dataInicio e dataFim

Solicitei novas chaves pra mim com esse escopo extrato.read. Posso fazer as funções e mandar o pull req?

compatibilidade com php 8.0

Originally posted by @rodbn in #7 (comment)_

tentei instalar usando composer num ambiente de php 8.0 porém retorna o seguinte erro:

_Your requirements could not be resolved to an installable set of packages.

Problem 1
- nunomaduro/phpinsights[v1.14.0, ..., v1.14.1] require php ^7.2 -> your php version (8.0.1) does not satisfy that requirement.
- Root composer.json requires nunomaduro/phpinsights ^1.14 -> satisfiable by nunomaduro/phpinsights[v1.14.0, v1.14.1]._

Recentemente já atualizei todo o ambiente para a nova versão do PHP 8.0. Será que é fácil atualizar a compatibilidade da biblioteca para a nova versão, ou eu que estou errando em algum ponto?

Nova API

Hoje verifiquei que o Banco Inter liberou nova API, com recursos adicionais para consulta de extratos, saldos e configuração de webhook para cobranças (não ficou claro quando que os webhooks são acionados)

Para quem tiver interesse a documentação é acessível através do internet banking, na seção Conta Digital -> Aplicações -> Gestão de Aplicações -> Portal do Desenvolvedor

Nos próximos dias devo dar uma olhada mais a fundo e no mínimo tentar portar a funcionalidade já existente do projeto para a nova API.

Aviso de porta removida a partir de 18 de Dezembro de 2020

Olá, tudo bem?
Recebemos esta comunicação do Inter:

A partir de 18 de dezembro de 2020, a configuração de emissão de boletos via API terá alterações: A porta 8443 deve ser excluída e o novo link é https://apis.bancointer.com.br/openbanking/v1/certificado/boletos

Pensei em submeter um Pull Request verificando a data atual e adicionando a porta caso seja antes de 18/12/2020, mas queria validar antes com vocês pois talvez isso já esteja mapeado.

Api 2.0

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-&gt;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?

Projeto está funcional

Bom dia, Este projeto está funcional com as últimas alterações da API do banco Inter?

Problema intermitente Erro 400

Olá,
Não seria necessariamente um Issue, mas acontece com alguém mais o erro 400 intermitentemente ?

Screenshot_743
Censurado dados pois é de cliente em produção, mas não é gerado a exception de erro de parâmetros no Pagador().

capturando da (BancoInterException $e)

$e->reply->header :

HTTP/2 400
cache-control: no-cache, no-store, max-age=0, must-revalidate
content-type:
date: Tue, 08 Dec 2020 17:40:06 GMT
expires: 0
pragma: no-cache
server: Apache-Coyote/1.1
strict-transport-security: max-age=31536000 ; includeSubDomains
vary: Origin
x-application-context: application
x-content-type-options: nosniff
x-envoy-upstream-service-time: 3
x-frame-options: DENY
x-request-id:
x-upstream-time: 142
x-xss-protection: 1; mode=block
content-length: 0

$e->reply->body: (vazio)

Alguns momentos raros cria a cobrança, (já aconteceu de outro dia com os mesmos dados criar)

Dúvida no arquivo do certificado

Olá, estou testando a API do Inter e achei a tua implementação. Só fiquei na dúvida se posso usar o certificado em CRT ou funcionaria somente no formato PEM

Abraços

WebHook

Bom dia!
Alguém sabe como configurar um Webhook em PHP para receber os callbacks de pagamento dos boletos?
Não achei nada ainda e na documentação do Banco Inter só tem pra NODE.JS.
Desde já, agradeço!

Como salvar o PDF em um determinada pasta

O script e sensacional só queria algo bem simples clicar e gerar o boleto PDF
Olhei esta upando dentro da pasta TEMP mudar dessa forma
$savePath = "upload/"; /Crie essa pasta na raiz permisão 777/

// $savePath = ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir();

Valeu

Erro no servidor

Esse tipo de erro é porque não o servidor do Inter não esta conseguindo "enxergar" meu servidor, certo? Neste caso o meu servidor é BR São Paulo, pode ter alguma coisa a ver?

Erro HTTP 401 Cabeçalhos: HTTP/1.1 401 Unauthorized Server

Não estou conseguindo cadastrar cobrança

Tentei utilizar o seu pacote, e o mesmo esta dando problema para mim, ele nao esta registrando, utilizei exatamente como o seu exemplo, sometne mudando as credenciais claro, porem ele da erro

image
image
image

Erro relacionado com o certificado

Por favor, o que pode estar causando esse erro?

PHP Fatal error:  Uncaught Exception: Curl error: SSL certificate problem: self signed certificate in certificate chain in D:\web\localuser\ruvitus\www\includes\apiboleto\BancoInter.php:144
Stack trace:
#0 D:\web\localuser\ruvitus\www\includes\apiboleto\BancoInter.php(211): ctodobom\APInterPHP\BancoInter->controllerPost('/openbanking/v1...', Object(ctodobom\APInterPHP\Cobranca\Boleto))
#1 D:\web\localuser\ruvitus\www\testeboleto.php(48): ctodobom\APInterPHP\BancoInter->createBoleto(Object(ctodobom\APInterPHP\Cobranca\Boleto))
#2 {main}
  thrown in D:\web\localuser\ruvitus\www\includes\apiboleto\BancoInter.php on line 144

Obrigado!

API para PIX

Na página do banco Inter so fala "em breve" para a API do PIX deles. Alguem está usando alguma outra alternativa para usar PIX com eles?

Olá @MoisesFagundes

Olá @MoisesFagundes

Como vai?

$banco = new BancoInter($conta, $certificado, $chavePrivada);

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?

Originally posted by @dadeke in #29 (comment)

update para Boleto com PIX

Olá, parece que recentemente o banco inter colocou uma opcao de api para boleto com pix juntos, voce teria interesse em atualizar o projeto para este recurso? posso fazer uma doação para o projeto se for ajudar no desenvolvimento disto.
Ha recurso tambem webhook para retornar a aplicacao os boletos/pix compensados no banco inter.

Acredito que ficaria show!

https://developers.inter.co/references/cobranca-bolepix

boletocompix

Link para o café 👍

Prezado desenvolvedor. Eu estava tentando implantar a API "na unha" e encontrei seu código, que me salvou um tremendo tempo.

Sugestao adicionar um link para uma contribuição voluntária, Paypal, PIX, etc. para que eu possa ao menos te pagar um café.

Return type of jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize() com o Laravel

Olá Claudemir

Eu novamente! 😁
Como vai?

Estou utilizando sua lib com o Laravel e ao rodar os testes estão aparecendo essas mensagens abaixo.

Note que separadamente todos os testes do seu projeto está rodando 100% ✅
Isso acontece apenas quando está junto com o Laravel.
Tudo indica que precisa desses ajustes para ficar compatível.

Pergunta: Posso tentar corrigir isso e lhe enviar um pull request?

PHP version

8.1.6

Laravel version

Framework 9.15.0

PHP Deprecated:  Return type of ctodobom\APInterPHP\Cobranca\Pagador::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /usr/share/nginx/html/sistema/modules/InterBr/vendor/ctodobom/api-inter/src/Cobranca/Pagador.php on line 263
PHP Deprecated:  Return type of ctodobom\APInterPHP\Cobranca\Boleto::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /usr/share/nginx/html/sistema/modules/InterBr/vendor/ctodobom/api-inter/src/Cobranca/Boleto.php on line 355
PHP Deprecated:  Return type of ctodobom\APInterPHP\Cobranca\Mensagem::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /usr/share/nginx/html/sistema/modules/InterBr/vendor/ctodobom/api-inter/src/Cobranca/Mensagem.php on line 92
PHP Deprecated:  Return type of ctodobom\APInterPHP\Cobranca\Desconto::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /usr/share/nginx/html/sistema/modules/InterBr/vendor/ctodobom/api-inter/src/Cobranca/Desconto.php on line 84
PHP Deprecated:  Return type of ctodobom\APInterPHP\Cobranca\Multa::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /usr/share/nginx/html/sistema/modules/InterBr/vendor/ctodobom/api-inter/src/Cobranca/Multa.php on line 79
PHP Deprecated:  Return type of ctodobom\APInterPHP\Cobranca\Mora::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /usr/share/nginx/html/sistema/modules/InterBr/vendor/ctodobom/api-inter/src/Cobranca/Mora.php on line 80
PHP Deprecated:  Exception::__construct(): Passing null to parameter #2 ($code) of type int is deprecated in /usr/share/nginx/html/sistema/modules/InterBr/vendor/ctodobom/api-inter/src/BancoInterException.php on line 15

Composer não instala pacote: minimum-stability (stable)

Tentando adicionar ao meu projeto pelo composer
Mas segue um erro
Could not find a version of package ctodobom/api-inter matching your minimum-stability (stable). Require it with an explicit version constraint allowing its desired stability

Senha PDF

Olá, bom dia.

Existem algum método para inserir senha no pdf, ou tem alguma biblioteca que pode fazer isso?

Não consigo dar baixa no boleto pelo banco inter

Olá, estou com um problema pra baixar os boletos, passo todas as informações e o banco não dá baixa. Vou deixar parte do meu código aqui, pra ver se não tem nada de errado nele. Tive que adaptar algumas coisas pra funcionar no sistema, pois o mesmo utiliza Laravel. Ele gera os boletos corretamente, porém não dá baixa.

Como são muitos arquivos, vou deixar parte do código que interessa apenas pra entender onde está passando as informações.

Arquivo BoletosController.php (Nesse arquivo chama essa função quando eu clico no botão pela interface, pra poder dar baixa no boleto)

public function destroy (Boletos $boleto) {
    try {
        if (! $boleto->id) {
            return \response([
                "code" => 404,
                "error" => "Boleto nao encontrado"
            ], 404);
        }

        $boleto->cancelarNoBanco($boleto->id_transacao, $boleto->tipo);
        $boleto->delete();

        return \response([
            "code" => 200
        ]);
    } catch (Exception $e) {
        Log::error($e);
        return \response([
            "code" => 500
        ]);
    }
}

Arquivo Boletos.php (Chama o job pra cancelar o boleto)

public function cancelarNoBanco ($id_transacao, $tipo_banco) {
    try {
        if ($this->transmitido && $this->id_transacao != null) {
            ProcessCancelarBoleto::dispatch($id_transacao, $tipo_banco)
                ->delay(now()->addSeconds(10));
        }
    } catch (\Exception $e) {
        throw $e;
    }
}

Arquivo ProcessCancelarBoleto.php (Aqui ele testa se é Inter ou SafetoPay)

class ProcessCancelarBoleto implements ShouldQueue {
	use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

	private $id_transacao;
	private $tipo_banco;

	/**
	 * Create a new job instance.
	 *
	 * @param $idTransacao
	 */
	public function __construct($id_transacao, $tipo_banco)
	{
		$this->id_transacao = $id_transacao;
		$this->tipo_banco = $tipo_banco;
	}

	/**
	 * Execute the job.
	 *
	 * @return void
	 */
	public function handle() {

		if ($tipo_banco == 'SAFETOPAY') {

			$safe = new Safe2Pay();
			$responseSafe = $safe->cancelar($this->id_transacao);
			Log::info(print_r($responseSafe));

		} elseif ($tipo_banco == 'INTER') {

			$inter = new Inter(Bancos::byTipo(Boletos::INTER));
			$responseInter = $inter->cancelarBoletoInter($this->id_transacao);
			Log::info(print_r($responseInter));

		}
	}
}

Arquivo Inter.php (Se for boleto inter, ele chama essa função pra poder passar pela api)

public function cancelarBoletoInter ($idTransacao) {
    try {
        $b = $this->getInstanceBank();
        
        $boleto = $b->baixaBoleto($idTransacao, INTER_BAIXA_ACERTOS);

        return $boleto;
    } catch ( BancoInterException $e ) {
        Log::info($e->getMessage());
        throw $e;
    }
}

Arquivo BancoInter.php (Aqui já é a parte da api)

public function baixaBoleto(string $nossoNumero, string $motivo = "ACERTOS")
{
    $data = new StdSerializable();
    $data->motivoCancelamento = $motivo;

    $reply = $this->controllerPost("/cobranca/v2/boletos/" . $nossoNumero . "/cancelar", $data);

    $replyData = json_decode($reply->body);

    return $replyData;
}

Bom dia grande mestre, estou com esse erro na integração da api o senhor pode me dizer o que eu estou fazendo de errado ?

require_once "../vendor/autoload.php";

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

// dados do correntista
$conta = "1111111111111";
$cnpj = "1111111111111111111";
$certificado = "certificado.crt";
$chavePrivada = "private-chave.pem";

// dados de teste
$cpfPagador = "12312312312";
$estadoPagador = "AM";

$banco = new BancoInter($conta, $certificado, $chavePrivada);
//$banco->setKeyPassword("");

echo'

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

$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("12345000");

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

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

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;
}

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;
}

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;
}

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;
}

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;
}

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";

Captura de Tela 2020-08-23 às 09 03 41

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.