crtlmota / banco-sicredi-connector
Abstração de comunicação rest com a API do Banco Sicredi v3.3, apenas curl
Installs: 25
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 1
Open Issues: 0
Type:package
Requires
- php: >=7.4
Requires (Dev)
- fakerphp/faker: ^1.19
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^9.1
- scrutinizer/ocular: ^1.3
- squizlabs/php_codesniffer: ^3.5
- vlucas/phpdotenv: ^5.4
README
Conecte o Banco Sicredi com seu projeto PHP
Abstração de comunicação rest com API v3.3 fornecida pelo Banco Sicredi (748).
Inicialmente apenas a scopo de cobranças(crud de boleto + webhook) foi desenvolvido
Como usar:
1. Instalação
Para utilizar a biblioteca através do composer:
Versão estável
composer require "crtlmota/banco-sicredi-connector"
2. Solicite acesso ao sandbox do SICREDI
3. Configure as credenciais
Esses exemplos são com dados padrão de teste, se possuir acesso ao sandbox / homologação basta executar e ver a mágica acontecer
$banco = new SicrediCobranca( new CredencialsManager( '123456789', // USERNAME 'teste123', // PASSWORD 'API_KEY_0000000000000', // api key fornecida pela sicredi 'cobranca', // scope '6789', // COOPERATIVA '03', // POSTO '12345', // CODIGO_BENEFICIARIO //(opcional) Também é possível adicionar cache de token embutido para diminuir o tempo de processamento eliminando logins desnecessários function (string $tokenJson) { //new token callback if ($tokenFile = fopen('sicredi-oauth-token.txt', 'w')) { fwrite($tokenFile, $tokenJson); fclose($tokenFile); } }, function () { //get token callback $oAuthTokenData = null; // uso do @ para evitar o warning se o arquivo não existe if (($tokenFile = @fopen('sicredi-oauth-token.txt', 'r')) !== false) { // se tiver arquivo com token, carrega ele e retorna $tokenJson = fread($tokenFile, 8192); $oAuthTokenData = json_decode($tokenJson, true); fclose($tokenFile); return $oAuthTokenData; } else { // retorno "falso" força a emissão de novo token return false; } } ), "https://api-parceiro.sicredi.com.br/sb" // URL do sandbox );
- Sem cache de token
root@f660e935d737:/app# php vendor/bin/phpunit tests Time: 00:00.553, Memory: 8.00 MB OK (5 tests, 5 assertions)
- Com cache de token
root@f660e935d737:/app# php vendor/bin/phpunit tests Time: 00:00.249, Memory: 8.00 MB OK (5 tests, 5 assertions)
4. Registre um boleto
$fakerB = \Faker\Factory::create(); $fakerB->addProvider(new \Faker\Provider\pt_BR\Person($fakerB)); $fakerP = \Faker\Factory::create(); $fakerP->addProvider(new \Faker\Provider\pt_BR\Person($fakerP)); $beneficiario = (new Beneficiario()) ->setTipoPessoa(Pessoa::TIPO_PESSOA_FISICA) ->setDocumento($fakerB->cpf(false)) ->setNome($fakerB->name) ->setLogradouro($fakerB->streetName) ->setNumeroEndereco($fakerB->numberBetween(10, 999)) ->setCidade($fakerB->city) ->setUf($fakerB->stateAbbr()) ->setCep($fakerB->numerify("########")); $pagador = (new Pagador()) ->setTipoPessoa(Pessoa::TIPO_PESSOA_FISICA) ->setDocumento($fakerP->cpf(false)) ->setNome($fakerP->name) ->setLogradouro($fakerP->streetName) ->setNumeroEndereco($fakerP->numberBetween(10, 999)) ->setCidade($fakerP->city) ->setUf($fakerP->stateAbbr()) ->setCep($fakerP->numerify("########")); $dataVencimento = (new DateTime())->modify("+30 day"); $boleto = new Boleto(); $boleto->setPagador($pagador); $boleto->setBeneficiario($beneficiario); $boleto->setSeuNumero("TESTE"); $boleto->setValor(500.00); $boleto->setDataVencimento($dataVencimento->format("Y-m-d")); $boleto->setDesconto1((clone $dataVencimento)->modify('-20 days')->format("Y-m-d"), 200.00); $boleto->setDesconto2((clone $dataVencimento)->modify('-10 days')->format("Y-m-d"), 150.00); $boleto->setDesconto3((clone $dataVencimento)->modify('-5 days')->format("Y-m-d"), 100.00); $boleto->setJuros(1); $boleto->setMulta(12.00); $boleto->addMensagem('APÓS O VENCIMENTO, COBRAR MULTA DE ' . $boleto->getMulta() . '%'); $boleto->addMensagem('APÓS O VENCIMENTO, COBRAR JUROS DE ' . $boleto->getJuros() . '% AO MÊS'); $boleto->setTipoCobranca('HIBRIDO'); $boletoResponse = $banco->createBoleto($boleto); // OU defina false no segundo parametro para não aplicar a pré validação dos dados //Pode-se aplicar a pŕe validação localmente de forma manual, para executar um job de envio em massa mais tarde $boleto->validarBoleto(); $job[] = $boleto; /* exemplo de body esperado $boletoResponse: { TODOS OS TIPOS DE COBRANÇA CONTÉM "linhaDigitavel": "74891125110061420512803153351030188640000009990", "codigoBarras": "74891886400000099901125100614205120315335103", "cooperativa": "0512", "posto": "03", "nossoNumero": "251006142" IF (tipoCobranca:HIBRIDO) "txid": "f69d2a0076fb4ea2bddd7babd1200525", "qrCode": "00020101021226930014br.gov.bcb.pix2571pix-qrcodeh.sicredi.com.br/qr/v2/cobv/6946459e4b6e4c19ab5c9689fe0df30a520400005303986540599.905802BR5921OLIVEIRA MULTI MARCAS6008BRASILIA62070503***6304E5E1", IF (tipoCobranca:SPLIT) "splitBoleto": { "repasseAutomaticoSplit": "SIM", "tipoValorRateio": "PERCENTUAL", "regraRateio": "VALOR_COBRADO", "destinatarios": [ { "codigoBanco": "237", "codigoAgencia": "0434", "numeroContaCorrente": "2323232323", "numeroCpfCnpj": "02738306004", "nomeDestinatario": "DECIO OLIVEIRA", "parcelaRateio": "1", "valorPercentualRateio": 24.22, "floatSplit": 20 } ] } } */
Conte também com outros métodos
$findedBoleto = $banco->getBoleto($boletoResponse['nossoNumero']); //'busca Boleto pelo nossoNumero' $findedBoletoPdfTempFilepath = $banco->getBoletoPdf($boletoResponse['linhaDigitavel']); $findedBoletoEncodedPdf = $banco->getBoletoEncoded($boletoResponse['linhaDigitavel']); $updatedBoleto = $banco->updateVencimento($boletoResponse['nossoNumero'], $dataVencimento->modify("+5 days")->format("Y-m-d")); $boletosPagos = $banco->listBoletosPagosByDay($dataVencimento->modify("+5 days")); $banco->baixaBoleto($boletoResponse['nossoNumero']);
5. Go to production
Mude as credencias para o ambiente de produção e pronto sua aplicação estará integrada ao banco.
Documentação
Segue link da documentação em pdf Exemplos:
-
Manipulação de cobranças HandleBoleto.php
-
Contrato de webwook ContratarWebhook.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
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.
Chave Pix: d8ea7c17-2f20-492f-b45b-1913bf9d5819
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á.
Usando o atributo others
O atributo others
permite adicionar dados adicionais à sua requisição, que não estão definidos como propriedades da classe. Isso é útil para enviar informações personalizadas ou campos específicos que não estão mapeados na estrutura padrão da API.
Exemplo:
use crtlmota\BancoSicrediConnector\Boleto; // Crie um objeto Serializable $serializable = new Boleto(); // Adicione dados adicionais ao atributo `others` $serializable->addOthers('custom_field_1', 'valor_do_campo_1'); $serializable->addOthers('custom_field_2', 'valor_do_campo_2'); // Converta o objeto para JSON $json = json_encode($serializable); // Exemplo de saída { ... outros dados "valor": 100, "dataEmissao": '2024-07-01', "dataVencimento": '2024-07-01' "custom_field_1": "valor_do_campo_1", "custom_field_2": "valor_do_campo_2" }
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.