Import OFX - Failed to parse OFX file

Hi guys - I’m running 2.6.10 and have exported an OFX from my bank (Natwest UK)

When importing I get ‘Failed to parse OFX File’

Any ideas?

Many thanks

I’ve reviewed the code, try changing line 132 in app/Http/Controllers/BankAccountController.php

From:
Session::flash(‘error’, trans(‘texts.ofx_parse_failed’));

To:
Session::flash(‘error’, trans(‘texts.ofx_parse_failed’) . $e->getMessage());

It won’t fix it but will at least provide more info as to where it’s failing.

Thanks Hillel - Code changed and now the contents of laravel-error.log

[2016-08-22 09:21:09] production.ERROR: ErrorException: Use of undefined constant ‘error’ - assumed ‘‘error’’ in /var/www/ninja/app/Http/Controllers/BankAccountController.php:132 Stack trace: #0 /var/www/ninja/app/Http/Controllers/BankAccountController.php(132): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, ‘Use of undefine…’, ‘/var/www/ninja/…’, 132, Array) #1 [internal function]: App\Http\Controllers\BankAccountController->doImportOFX(Object(Illuminate\Http\Request)) #2 /var/www/ninja/bootstrap/cache/compiled.php(9479): call_user_func_array(Array, Array) #3 /var/www/ninja/bootstrap/cache/compiled.php(9541): Illuminate\Routing\Controller->callAction(‘doImportOFX’, Array) #4 /var/www/ninja/bootstrap/cache/compiled.php(9521): Illuminate\Routing\ControllerDispatcher->call(Object(App\Http\Controllers\BankAccountController), Object(Illuminate\Routing\Route), ‘doImportOFX’) #5 [internal function]: Illuminate\Routing\ControllerDispatcher->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #6 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #7 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #8 /var/www/ninja/bootstrap/cache/compiled.php(10004): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #9 /var/www/ninja/bootstrap/cache/compiled.php(9522): Illuminate\Pipeline\Pipeline->then(Object(Closure)) #10 /var/www/ninja/bootstrap/cache/compiled.php(9509): Illuminate\Routing\ControllerDispatcher->callWithinStack(Object(App\Http\Controllers\BankAccountController), Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), ‘doImportOFX’) #11 /var/www/ninja/bootstrap/cache/compiled.php(8579): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), ‘App\Http\Contro…’, ‘doImportOFX’) #12 /var/www/ninja/bootstrap/cache/compiled.php(8566): Illuminate\Routing\Route->runController(Object(Illuminate\Http\Request)) #13 /var/www/ninja/bootstrap/cache/compiled.php(8280): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request)) #14 [internal function]: Illuminate\Routing\Router->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #15 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #16 /var/www/ninja/app/Http/Middleware/PermissionsRequired.php(52): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #17 [internal function]: App\Http\Middleware\PermissionsRequired->handle(Object(Illuminate\Http\Request), Object(Closure)) #18 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #19 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #20 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #21 /var/www/ninja/app/Http/Middleware/Authenticate.php(90): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #22 [internal function]: App\Http\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure), ‘user’) #23 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #24 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #25 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #26 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #27 /var/www/ninja/bootstrap/cache/compiled.php(10004): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #28 /var/www/ninja/bootstrap/cache/compiled.php(8281): Illuminate\Pipeline\Pipeline->then(Object(Closure)) #29 /var/www/ninja/bootstrap/cache/compiled.php(8272): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request)) #30 /var/www/ninja/bootstrap/cache/compiled.php(8262): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request)) #31 /var/www/ninja/bootstrap/cache/compiled.php(2419): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) #32 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}(Object(Illuminate\Http\Request)) #33 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #34 /var/www/ninja/app/Http/Middleware/StartupCheck.php(193): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #35 [internal function]: App\Http\Middleware\StartupCheck->handle(Object(Illuminate\Http\Request), Object(Closure)) #36 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #37 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #38 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #39 /var/www/ninja/app/Http/Middleware/QueryLogging.php(28): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #40 [internal function]: App\Http\Middleware\QueryLogging->handle(Object(Illuminate\Http\Request), Object(Closure)) #41 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #42 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #43 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #44 /var/www/ninja/app/Http/Middleware/DuplicateSubmissionCheck.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #45 [internal function]: App\Http\Middleware\DuplicateSubmissionCheck->handle(Object(Illuminate\Http\Request), Object(Closure)) #46 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #47 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #48 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #49 /var/www/ninja/bootstrap/cache/compiled.php(3225): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #50 /var/www/ninja/app/Http/Middleware/VerifyCsrfToken.php(51): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure)) #51 [internal function]: App\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure)) #52 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #53 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #54 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #55 /var/www/ninja/bootstrap/cache/compiled.php(13517): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #56 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure)) #57 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #58 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #59 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #60 /var/www/ninja/bootstrap/cache/compiled.php(12010): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #61 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure)) #62 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #63 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #64 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #65 /var/www/ninja/bootstrap/cache/compiled.php(13256): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #66 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure)) #67 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #68 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #69 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #70 /var/www/ninja/bootstrap/cache/compiled.php(13193): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #71 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure)) #72 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #73 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #74 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #75 /var/www/ninja/bootstrap/cache/compiled.php(3286): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #76 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure)) #77 /var/www/ninja/bootstrap/cache/compiled.php(10019): call_user_func_array(Array, Array) #78 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #79 /var/www/ninja/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #80 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #81 /var/www/ninja/bootstrap/cache/compiled.php(10004): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #82 /var/www/ninja/bootstrap/cache/compiled.php(2366): Illuminate\Pipeline\Pipeline->then(Object(Closure)) #83 /var/www/ninja/bootstrap/cache/compiled.php(2350): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) #84 /var/www/ninja/public/index.php(51): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) #85 {main} [] []

I think the quotes are off, try using this line instead.

Session::flash('error', trans('texts.ofx_parse_failed') . $e->getMessage());

Error outputted to the browser

Failed to parse OFX fileFailed to parse OFX: array ( 0 => LibXMLError::__set_state(array( ‘level’ => 3, ‘code’ => 76, ‘column’ => 8, ‘message’ => 'Opening and ending tag mismatch: STATUS line 7 and CODE ', ‘file’ => ‘’, ‘line’ => 10, )), 1 => LibXMLError::__set_state(array( ‘level’ => 3, ‘code’ => 76, ‘column’ => 13, ‘message’ => 'Opening and ending tag mismatch: SONRS line 5 and SEVERITY ', ‘file’ => ‘’, ‘line’ => 13, )), 2 => LibXMLError::__set_state(array( ‘level’ => 3, ‘code’ => 76, ‘column’ => 11, ‘message’ => 'Opening and ending tag mismatch: SIGNONMSGSRSV1 line 3 and STATUS ', ‘file’ => ‘’, ‘line’ => 15, )), 3 => LibXMLError::__set_state(array( ‘level’ => 3, ‘code’ => 76, ‘column’ => 12, ‘message’ => 'Opening and ending tag mismatch: OFX line 1 and DTSERVER ', ‘file’ => ‘’, ‘line’ => 18, )), 4 => LibXMLError::__set_state(array( ‘level’ => 3, ‘code’ => 5, ‘column’ => 1, ‘message’ => 'Extra content at the end of the document ', ‘file’ => ‘’, ‘line’ => 20, )), )

It looks like it’s failing to parse the OFX file.

We use a third party library to do the actual parsing, if you want to email the file to contact@invoiceninja.com we can try to figure out why it’s failing.

Email sent.

Many thanks :slight_smile:

Thanks, I was able to get it to work by commenting out line 93 in vendor/asgrim/ofxparser/lib/OfxParser/Parser.php

return "<{$matches[1]}>{$matches[2]}</{$matches[1]}>";

I tried placing * in front of that code, however I just got a ‘whoops something went wrong’ message after trying an import.

Nevermind, used // instead.

Seems to import OK now