Jump to content

Emerson Rodrigo

Members
  • Content count

    19
  • Joined

  • Last visited

Community Reputation

4 Comum

2 Followers

About Emerson Rodrigo

  • Rank
    Analista Desenvolvedor PHP
  • Birthday 01/09/1989

Informações Pessoais

  • Sexo
    Masculino

Contato

  • Site Pessoal
    http://www.webagille.com.br

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Emerson Rodrigo

    Leitura de Arquivos OFX com PHP

    Pra quem está tento problemas com a codificação do arquivo OFX altere a linha $content = file_get_contents($this->ofxFile); para: $content = utf8_decode(file_get_contents($this->ofxFile)); isso deve resolver
  2. Emerson Rodrigo

    Leitura de Arquivos OFX com PHP

    Fala pessoal! Hoje precisei criar uma rotina para importação de arquivos OFX, aqueles que são usados para fazer integração bancária. Esse arquivos nada mais são do que o extrato bancário em um formato universal para integração com vários tipos de sistemas e linguagens de programação. Como não é uma coisa que se acha fácil por ai, resolvi postar e deixar disponível para quem precisar. Código do arquivo Ofx.php <?phpclass Ofx { private $ofxFile; public function __construct($ofxFile) { $this->ofxFile = $ofxFile; } /* * Converte o arquivo OFX para XML */ public function getOfxAsXML() { $content = file_get_contents($this->ofxFile); $line = strpos($content, "<OFX>"); $ofx = substr($content, $line - 1); $buffer = $ofx; $count = 0; while ($pos = strpos($buffer, '<')) { $count++; $pos2 = strpos($buffer, '>'); $element = substr($buffer, $pos + 1, $pos2 - $pos - 1); if (substr($element, 0, 1) == '/') $sla[] = substr($element, 1); else $als[] = $element; $buffer = substr($buffer, $pos2 + 1); } $adif = array_diff($als, $sla); $adif = array_unique($adif); $ofxy = $ofx; foreach ($adif as $dif) { $dpos = 0; while ($dpos = strpos($ofxy, $dif, $dpos + 1)) { $npos = strpos($ofxy, '<', $dpos + 1); $ofxy = substr_replace($ofxy, "</$dif>\n<", $npos, 1); $dpos = $npos + strlen($element) + 3; } } $ofxy = str_replace('&', '&', $ofxy); return $ofxy; } /* * Retorna o Saldo da conta na data de exportação do extrato */ public function getBalance() { $xml = new SimpleXMLElement($this->getOfxAsXML()); $balance = $xml->BANKMSGSRSV1->STMTTRNRS->STMTRS->LEDGERBAL->BALAMT; $dateOfBalance = $xml->BANKMSGSRSV1->STMTTRNRS->STMTRS->LEDGERBAL->DTASOF; $date = strtotime(substr($dateOfBalance, 0, 8)); $dateToReturn = date('Y-m-d', $date); return Array('date' => $dateToReturn, 'balance' => $balance); } /* * Retora um array de objetos com as transações * * DTPOSTED => Data da Transação * TRNAMT => Valor da Transação * TRNTYPE => Tipo da Transação (Débito ou Crédito) * MEMO => Descrição da transação */ public function getTransactions() { $xml = new SimpleXMLElement($this->getOfxAsXML()); $transactions = $xml->BANKMSGSRSV1->STMTTRNRS->STMTRS->BANKTRANLIST->STMTTRN; return $transactions; }} Exemplo de utilização: <?phprequire_once 'Ofx.php';$ofx = new Ofx('extrato.ofx');$saldo = $ofx->getBalance();?><html> <head> <title>Transações</title> </head> <body> <h1>Seu saldo em <?php echo date("d/m/Y", strtotime($saldo['date'])); ?> é de R$ <?echo $saldo['balance']; ?></h1> <h2>Transações</h2> <table border="1" cellpadding="3" cellspacing="0"> <thead> <tr> <th>Data</th> <th>Descrição</th> <th>Tipo</th> <th>Valor</th> </tr> </thead> <tbody> <?php foreach ($ofx->getTransactions() as $transaction) : ?> <tr> <td><?php echo date("Y-m-d", strtotime(substr($transaction->DTPOSTED, 0, 8))); ?></td> <td><?php echo $transaction->MEMO; ?></td> <td><?php echo $transaction->TRNTYPE; ?></td> <td><?php echo $transaction->TRNAMT; ?></td> </tr> <?php endforeach; ?> </tbody> </table> </body></html> É isso ai, espero que seja útil!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.