Выписка из интернет-банка Авангард, Тинькофф, Сбербанк и др. в формате OFX

Нашел у себя в блоге старый, неопубликованный черновик. Публикую.

В случае, если вы пользуетесь каким-то из инструментов домашней (и не очень) бухгалтерии, одним из животрепещущих вопросов встаёт импорт данных из различных систем интернет-банкинга.

В принципе, многие банки умеют экпортировать выписки в формате CSV или XLS и их (иногда немного помучавшись) можно скормить в тот же GnuCash. Но самый простой способ – это сгенерировать из банковского отчета файл OFX (универсальный открытый формат для банковских выписок) и его уже импортировать в бухгалтерское ПО.
Для этой задачи существует универсальная платформа ofxstatement, позволяющая генерировать такие выписки и куча плагинов, умеющих парсить выписки различных банков.

Список банков/плагинов есть на странице самого ofxstatement в README. Можно установить необходимый плагин руками. В частности репозиторий ofxstatement-russian содержит плагины для Авангарда, ТинькоффБанк, АльфаБанк, Сбербанк. Ну или можно поставить в Debian/Ubuntu пакеты ofxstatement и ofxstatement-plugins (если используете стабильный дистрибутив, то плагины лучше ставить из backports, там они более актуальные).

Авангард интернет-банкинг vs. Linux

Upd: Более неактуально, там теперь полностью джава.
Садись, малыш, сегодня я расскажу тебе как пользоваться интернет-банкингом Авангарда в Линуксе.
Итак ты являешься клиентом банка Авангард. У тебя должны быть:

  • логин и пароль от интернет-банкинга;
  • карточка с одноразовыми паролями;
  • флэшка с ключом ЭЦП.

С первыми двумя пунктами всё просто: логин с паролем позволяют зайти в веб-интерфейс и получить любую информацию. Если требуется выполнить типовой платеж, то раз в сеанс будет запрошен одноразовый пароль с карточки. Самое интересное происходит в ситуации, когда требуется выполнить какое-либо действие, которое по законодательству требует твоей подписи. Например, хочется открыть вклад. Или поменять какой-нибудь лимит для карточки. Или перевести миллионы в другой банк. Казалось бы надо идти в офис и там писать заявление, но не всё так страшно: в нашей самой лучшей на свете стране есть закон об Электронных Цифровых Подписях и Авангард как раз одну такую ЭЦП с православным ГОСТовским криптоключем внутри тебе сгенерировал.
Но тут-то и кроется подстава: софт, конечно же, кривой. Ну как не то чтобы совсем уж, чего обижать авторов, но не без забавностей.
Для того, чтобы проверить работу цифровой подписи можно попробовать изменить какой-нибудь лимит на закладке “Справочники/Лимиты по картам”.
Во-первых, для работы ЭЦП требуется java-plugin. Не знаю, как там с icedtea (или как там оно зовется), хотя вроде где-то писали, что и он работает, но я не стал оригинальничать и поставил java-plugin от некогда славной фирмы SUN (пакет sun-java6-plugin).
И ничего не заработало. Честно сказать, я это заметил еще месяца полтора назад, что не работают у меня java-апплеты, но списал это на то, что где-то прописалась какая альтернативная джава из gcj или еще какого проекта, и забил. А тут занялся вопросом серьезно – сносил, переставлял… Ничего не помогает. Вместо апплета выдает окошко с надписью “Error. Click for detail”, по клику на которое вызывается java-console с текстом о Class not found и прочих эксепшнах, но главное с ключевой строчкой: “Caused by: java.net.ConnectException: Network is unreachable”
Небольшое расследование вывело на следующую проблему: #560238. Если коротко, то суть ее состоит в том, что Marco d’Itri добавил в пакет netbase установку sysctl’я ломающего некоторый “кривой” софт. Не будем сейчас обсуждать Марко и его маму, равно как кривость сановской джавы и информационность RFC 3493. Просто факт остается фактом. Сейчас сановская джава не сможет подключиться к сети при установленном net.ipv6.bindv6only=1
Так что первым нашим шагом будет открытие /etc/sysctl.d/bindv6only.conf и установку там net.ipv6.bindv6only в значение 0. После чего стоит сказать “/etc/init.d/procps start” Ну это всё пока что актуально только на Debian Squeeze, остальным повезло. (Пока?)
Теперь апплет-таки запускается и, если тебе особенно повезло, радостно сообщает: “Обнаружение программы… Err” с очень содержательным пояснением: “Ошибка обнаружения/скачивания программы шифрования: invalid stream header: 0D0A0D0A”
Тут всё просто и очевидно (да, это сарказм): открываешь настройки IceWeasel/FireFox и разрешаешь там “Third-party cookies”. Они там в разных версиях в по разному называются/находятся, так что проще всего открыть “about:config” и там поставить значение переменной network.cookie.cookieBehavior в 0. Кстати эта проблема, наверняка должна проявляться и под виндой.
Едем дальше: аппет сообщает “Ошибка выполнения программы подписи  : Cannot run program “c:\avn_ib/avn_cc.exe”: java.io.IOException: error=13, Permission denied”. Если посмотреть в домашний каталог пользователя (а именно он является текущим для java-приложений, запускаемых из браузера), то мы радостно обнаружим там каталог “c:\avn_ib” внутри которого действительно есть неисполняемый файл avn_cc.exe
Как ты уже догадался, гений русских программистов бесконечен. Java-апплет всего-лишь является троян-дропперомзагрузчиком для настоящей боевой криптографии. Которая написана, естественно под винду. Ну тут всё просто. Он хочет запускать этот бинарник? Нет проблем! Чтобы работали виндовые программы, ставим wine. Чтобы бинарник можно было запускать напрямую, ставим binfmt-support. (Вообще он рекомендуется вайном, но мало ли, у тебя он не стоит. Ну и в других дистрибутивах пакет может называться иначе, ты уж сам разберись, главное чтобы работал прямой запуск виндовых прог: не только “wine prog.exe”, но и просто “./prog.exe”) Дальше, понятно, надо сделать бинарник avn_cc.exe исполняемым.
Нет, это еще не всё. Теперь апплет выдает нам не менее экзистенциальное “Ошибка выполнения программы подписи: ret 2 команда <c:\avn_ib/avn_cc.exe c:\avn_ib/avn_clb_sign.in>” Надо немного подумать: чтобы бинарник можно было запустить из вайна, он должен быть доступен внутри виндового окружения. А какой путь сейчас у этого бинарника? Правильно Z:\home\user\c:\avn_ib\avn_cc.exe В общем не бывает таких путей в виндовсе. Решаем всё просто:

mv ~/c:\\avn_ib ~/.wine/drive_c/avn_ib&&ln -s ~/.wine/drive_c/avn_ib ~/c:\\avn_ib

Пробуем еще раз… О чудо! Крипто-хрень спрашивает нас где лежит приватный ключик. Ну теперь достаточно воткнуть флэшку с ключом, примонтировать и оно всё само подпишет.
Велик русский Левша. Умеет подковать англицкую джаву.
PS А Авангард и его интернет-банкинг действительно хорош. Ну и MasterCard.Metro у него по самым адекватным тарифам. В общем рекомендую. Кстати, обещают подружиться до конца года(?) с московским наземным транспортом и питерской подземкой.