Autor Tópico: Erro chamar funcção para leitura de arquivo OFX  (Lida 1376 vezes)

downtown

  • Novato
  • *
  • Mensagens: 14
    • Email
Erro chamar funcção para leitura de arquivo OFX
« Online: Dezembro 19, 2014, 10:18:05 am »
Bom dia.

tenho um biblioteca chamada ofx.php que adicionei ao projeto.
e em uma aplicação blank  no evento on-validate coloquei o seguinte codigo. mas não sei porque ele não roda, estou tentando adaptar  codigo ao scriptcase.   marquei em aplicação usar a biblioteca ofx.php, se criar o blank com a biblioteca marcada sem o codigo no on-validade ele executa mas quando chamo no on-validade não acontece nada.


<?php
require_once 'ofx.php';
$ofx = new Ofx({Arquivo});
$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>

Willian Fernando

  • Expert
  • *****
  • Mensagens: 1154
  • .....
    • Email
Re:Erro chamar funcção para leitura de arquivo OFX
« Responder #1 Online: Dezembro 19, 2014, 10:43:03 am »
acho que você esta se confundindo Blank apenas tem o evento onExecute

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Erro chamar funcção para leitura de arquivo OFX
« Responder #2 Online: Dezembro 19, 2014, 12:17:56 pm »
Rapaz não é assim! Use um controle, no controle crie um campo do tipo "arquivo banco de dados" e mude a rotina nas linhas:

require_once 'ofx.php';

para

sc_include(ofx.php);

Isso é um CNAB ?
F. A.
Analista de Sistemas

downtown

  • Novato
  • *
  • Mensagens: 14
    • Email
Re:Erro chamar funcção para leitura de arquivo OFX
« Responder #3 Online: Dezembro 19, 2014, 01:33:34 pm »
desculpe eu me enganei é um controle eu ja criei um campo arquivo de dados.

e Agora fiz a alteração para sc_include(ofx.php);

mesmo assim não da erro mas também não executa.

a proposito não é CNAB é para ler arquivo de extrato bancario .ofx para conciliação bancaria.
segue o ofx.php abaixo
<?php

class 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('&', '&amp;', $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;
    }

}
?>

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Erro chamar funcção para leitura de arquivo OFX
« Responder #4 Online: Dezembro 19, 2014, 02:22:48 pm »
Cara, vou ter que fazer essa rotina... Pergunta: Esse layout serve pra qualquer banco?
Manda ele pro meu e-mail, hoje a noite faço ele.

fred@wizardsystem.com.br

Caso sua solução for essa : http://forum.imasters.com.br/topic/490216-leitura-de-arquivos-ofx-com-php/
não precisa mandar o e-mail, eu faço por ela.

Abraço.
« Última modificação: Dezembro 19, 2014, 02:26:51 pm por FredKeyster »
F. A.
Analista de Sistemas

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Erro chamar funcção para leitura de arquivo OFX
« Responder #5 Online: Dezembro 22, 2014, 10:28:18 pm »
Sandro já ta tudo feito! Com esse código abaixo, eu leio diretamente o arquivo OFX sem precisar converter em nada.
Aproveitei e trouxe os valores pra você colocar na Query.

Teste e confira, agora só montar o insert pra popular o banco e depois fazer a devida conciliação bancária.

$file = $this->Ini->path_doc.'/'.$arquivo;
$ofxFile = file_get_contents($file);


$firstPosition = strpos($ofxFile, "<OFX>");    // Aqui inicio pelo primeiro nó e mato o cabeçalho antes do nó
$onlyBody = substr($ofxFile, $firstPosition);  // posiciono os ponteiros
$onlyBodyUFT8 = utf8_encode($onlyBody);  // codifico pra utf8
$xml = new SimpleXMLElement($onlyBodyUFT8);  // uso a função SimpleXMLElement pra ler como um XML

// Aqui faço um foreach pra passar nó por nó e retornar o que eu desejar do arquivo OFX.

Código: [Selecionar]
foreach($xml->BANKMSGSRSV1->STMTTRNRS->STMTRS->BANKTRANLIST->STMTTRN as $list){
   
     echo $list->TRNAMT."</br>";
     echo $list->TRNAMT."</br>";
     echo $list->FITID."</br>";
     echo $list->CHECKNUM."</br>";
     echo $list->REFNUM."</br>";
     echo $list->MEMO."</br>=========================</br>";

}

Este código não tem na net, pode procurar, foi montado através de estudos e muita tentativa e erros.
Espero que ajude a você e a muita gente.

Atenciosamente;
F. A.
Analista de Sistemas