1. Go to this page and download the library: Download husail/cnab-sdk library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Husail\CnabSdk\Banks\Itau\Cnab240Itau;
use Husail\CnabSdk\Cnab;
$content = file_get_contents('/path/to/retorno.txt');
$layout = Cnab240Itau::layout();
// Always validate before parsing
$validation = Cnab::validate($content, $layout);
if ($validation->fails()) {
foreach ($validation->errors() as $error) {
echo "Line {$error->line} [{$error->record}] {$error->field}: {$error->message}";
}
}
$result = Cnab::parse($content, $layout);
// File header
$header = $result->first('file_header');
echo $header?->get('company_name');
echo $header?->get('file_code'); // '1' = remessa, '2' = retorno
echo $header?->get('generated_date');
// Segment A collection — TED, DOC, PIX by bank account
$segmentsA = $result->records('segment_a');
$segmentsA->count();
$segmentsA->each(function ($seg) {
echo $seg->get('recipient_name');
echo $seg->get('amount'); // float
echo $seg->get('occurrence_code'); // '00' = paid
echo $seg->get('effective_date'); // filled by bank on return
});
// Filter paid segments
$paid = $segmentsA->filter(fn ($seg) => $seg->get('occurrence_code') === '00');
// Segment B PIX — PIX by key complement
$result->records('segment_b_pix')->each(function ($seg) {
echo $seg->get('pix_key_type');
echo $seg->get('pix_key');
echo $seg->get('occurrence_code');
});
// Segment J — boletos and concessionárias
$result->records('segment_j')->each(function ($seg) {
echo $seg->get('recipient_name');
echo $seg->get('payment_amount'); // float
echo $seg->get('occurrence_code');
});
// Segment J52 — payer/beneficiary data and QR Code
$result->records('segment_j52')->each(function ($seg) {
echo $seg->get('payer_document');
echo $seg->get('beneficiary_name');
echo $seg->get('pix_url');
});
use Husail\CnabSdk\Banks\Itau\Cnab240Itau;
use Husail\CnabSdk\Cnab;
$result = Cnab::parse($content, Cnab240Itau::layout());
$payments = Cnab240Itau::groupPayments($result);
$payments->count(); // total payments
$payments->pixCount(); // PIX payments only
$payments->boletoCount(); // boleto payments only
use Husail\CnabSdk\Banks\Itau\Cnab240Itau;
use Husail\CnabSdk\Cnab;
$result = Cnab::validate($content, Cnab240Itau::layout());
if ($result->passes()) {
// safe to process
}
foreach ($result->errors() as $error) {
echo "Line {$error->line} [{$error->record}] {$error->field}: {$error->message}";
}
use Husail\CnabSdk\Cnab;
$layout = Cnab::fromYaml('/path/to/my-bank/cnab240-pagamentos.yaml');
$file = Cnab::write($layout)
->fileHeader([...])
->batch(function ($batch) use ($payments) {
$batch->header([...]);
foreach ($payments as $p) {
$batch->add('segment_a', [...]);
}
})
->toString();
use Husail\CnabSdk\Contracts\BankLayoutInterface;
use Husail\CnabSdk\Builder\CnabFileBuilder;
use Husail\EdiSdk\Drivers\YamlDriver;
use Husail\EdiSdk\Schema\FileLayout;
class Cnab240MyBank implements BankLayoutInterface
{
public const BANK_CODE = '999';
public const BANK_NAME = 'MY BANK SA';
private const LAYOUT = __DIR__ . '/../../Layouts/MyBank/cnab240/pagamentos/layout.yaml';
public static function layout(): FileLayout
{
return (new YamlDriver())->load(self::LAYOUT);
}
public static function pagamentos(): CnabFileBuilder
{
return new CnabFileBuilder(self::layout());
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.