EPC QR-код не содержит ссылку. В нём зашит SEPA-перевод, записанный коротким блоком обычного текста, и банковское приложение, распознающее формат, считывает его и заполняет форму перевода. Ни один сервер не задействован, ничего не запрашивается, и информация о сканировании до вас никак не доходит.
Именно этот факт определяет всё остальное в том, как используются такие коды. Такой код нельзя сократить, нельзя перенаправить и нельзя посчитать сканирования, потому что нигде в процессе нет ни одного запроса. Стандарт за этим - EPC069-12 Европейского платёжного совета, на немецкоязычных рынках такие коды обычно называют GiroCode, и в формате стоит разобраться досконально до того, как вы напечатаете тысячи таких кодов на счетах. Про то, что вообще может нести QR-код в общем случае, статья что такое QR-код рассказывает подробно.
Что на самом деле содержит полезная нагрузка
Полезная нагрузка - это последовательность строк в фиксированном порядке, каждая из которых отдельный элемент. Парсер читает строку 1, ожидает там BCD, читает строку 4, ожидает там SCT, и сдаётся, если хотя бы одно из этого отсутствует.
| Строка | Содержимое | Ограничение |
|---|---|---|
| Service tag | BCD | фиксировано, 3 символа |
| Version | 001 или 002 | 002 делает BIC необязательным |
| Character set | 1 для UTF-8, до 8 | одна цифра |
| Identification | SCT | фиксировано, 3 символа |
| BIC | идентификатор банка получателя | 11 символов, часто опускается |
| Beneficiary name | владелец счёта | 70 символов |
| IBAN | счёт получателя | 34 символа |
| Amount | EUR, за которым следует значение | от 0.01 до 999999999.99, в EUR |
| Purpose code | код назначения ISO, используется редко | 4 символа |
| Structured ref | референс кредитора, либо | 35 символов |
| Unstructured text | произвольный текст назначения платежа вместо этого | 140 символов |
| Beneficiary to originator | примечание, показываемое плательщику | 70 символов |
Есть два правила, которые сбивают с толку. Структурированный референс и произвольный текст исключают друг друга: заполните одно поле, оставьте другое пустым. А сумма необязательна, и это правильный выбор для кода на пожертвование, где сумму решает плательщик, но неправильный выбор для счёта, где нужна точная сумма, заполненная заранее.
Весь блок ограничен 331 байтом. Руководство EPC069-12 также фиксирует уровень коррекции ошибок M и ограничивает символ версией 13, так что у печатаемого кода есть известный потолок по количеству модулей. Если вы собираете это в коде, а не кликаете в генераторе, документация библиотеки Segno показывает порядок полей и правила кодирования в виде, которое можно проверить на практике.
Почему его нельзя сократить или отследить
Отслеживаемый QR-код работает за счёт того, что кодирует URL, которым владеете вы. Сканирование открывает этот URL, ваш редирект отвечает, вы считаете запрос, и посетитель попадает туда, куда сейчас указывает ссылка. Статья динамические против статических QR-кодов разбирает этот механизм целиком.
Здесь ничего из этого не работает. Банковское приложение - это не браузер. Оно разбирает текст, сопоставляет его с форматом и открывает форму платежа локально на устройстве. Перехватывать нечего, потому что нет никакого HTTP-запроса, так что:
- Счётчика сканирований не существует нигде. Ни в вашем инструменте, ни в банковском.
- Ничего нельзя перенаправить. Неверный IBAN означает перепечатку.
- Обёртывание полезной нагрузки в короткую ссылку полностью её ломает, потому что парсер видит
httpsтам, где ожидаетBCD.
Я видел, как команда потратила неделю, пытаясь получить атрибуцию для платёжного кода, прежде чем кто-то наконец прочитал спецификацию. Честный ответ таков: платёжная сторона и сторона измерения - это два разных кода, и если в макете есть место только для одного, побеждает платёжный.
Измерять можно всё, что вокруг него. Если в рассылке идёт счёт с платёжным кодом, разместите на письме отдельную отслеживаемую короткую ссылку - на клиентский портал, условия или страницу поддержки - и считывайте вовлечённость по ней. QR-функции Elido охватывают отслеживаемую половину листа, а платёжный код остаётся именно таким, каким его требует стандарт.
Где это работает, а где нет
Поддержка живёт в конкретных банковских приложениях, поэтому покрытие неравномерно - куда неравномернее, чем можно подумать по спискам стран. Австрийские и немецкие приложения читают эти коды уже много лет, финские и нидерландские в целом надёжны, бельгийская поддержка тоже хороша. За пределами этого списка тестируйте перед тем, как отправлять код в печать тиражом.
Есть два соседних формата, с которыми его часто путают. Швейцарский QR-bill - это отдельная спецификация со своим макетом и швейцарским крестом в центре символа; это не EPC-код, и приложения из еврозоны не распознают его как платёж. А платёжная ссылка от процессинга банковских карт - это вообще не то же самое: это обычный URL внутри QR-кода, ведущий на размещённую страницу оплаты, и он ведёт себя как любая другая веб-ссылка, включая всё, что можно отследить.
Про более широкий вопрос - что регулируемый платёжный или кредитный бизнес вообще может показывать клиентам - статья сокращатели URL для финтеха рассказывает о той части, где задействована ссылка.
Как сделать код без сожалений
Шесть проверок в том порядке, в котором они экономят вам деньги.
- Проверяйте IBAN до генерации, а не после печати. Проверка контрольной суммы ничего не стоит, а перепечатка тиража стоит денег.
- Осознанно решите вопрос с суммой. Фиксированная - для счетов, пустая - для плакатов с пожертвованиями, где должна быть возможна любая сумма.
- Предпочитайте структурированный референс произвольному тексту. Он короче, автоматически сверяется в вашей бухгалтерии и держит полезную нагрузку компактной.
- Тестируйте минимум в трёх банковских приложениях на обеих мобильных платформах. Парсеры по-разному строго относятся к необязательным полям.
- Подбирайте размер напечатанного кода под расстояние, с которого его будут сканировать - точно так же, как для любого другого кода. Арифметику для этого содержит статья каким должен быть размер QR-кода.
- Делайте поверхность матовой. Глянцевый лак поверх платёжного кода на счёте под офисным освещением - это гарантированное обращение в поддержку.
Проблема с наклейкой
Есть один реальный вектор мошенничества, и он физический, а не цифровой. Статический платёжный код, напечатанный на счёте, парковочном автомате, вывеске рыночного прилавка или благотворительном плакате, можно заклеить наклейкой с другим IBAN. Ничто в самом коде этому не противостоит, потому что полезная нагрузка - это и есть бумага.
Меры защиты тоже физические. Печатайте код прямо внутри макета счёта, там, где наклейка была бы заметна, а не на отдельном клейком стикере. Показывайте текстом рядом с кодом имя получателя и последние цифры IBAN, чтобы плательщик мог сверить. И в инструкции по подтверждению платежа просите людей читать имя, которое показывает их банковское приложение, прежде чем подтверждать перевод, потому что именно этот экран - единственное место, где подмена становится видимой. Статья безопасны ли QR-коды и что такое квишинг на самом деле разбирает более широкий паттерн атаки, большая часть которого применима и к кодам-ссылкам, напечатанным где-то ещё на той же странице.
Успокаивающая часть в том, что платёж всё равно требует подтверждения человеком в авторизованном банковском приложении. Код лишь заполняет форму, он никогда не переводит деньги сам.
Читайте цикл опорных статей
Эта статья входит в кластер функций. Про весь процесс печати вокруг любого кода, который вы генерируете, QR-кампания с нуля - опорная статья, а руководство по QR-кодам в документации рассказывает про генерацию отслеживаемого варианта через API.
Связанные статьи в блоге
Частые вопросы
Что такое EPC QR-код?
QR-код, который кодирует реквизиты SEPA-перевода в виде обычного текста, чтобы банковское приложение могло прочитать их и заполнить форму перевода. Он был стандартизирован Европейским платёжным советом в руководстве EPC069-12 и также известен как GiroCode. Полезная нагрузка - это фиксированная последовательность строк, начинающаяся со служебного тега BCD, и в ней нет вообще никакого веб-адреса.
В каких странах поддерживаются платежи GiroCode?
Поддержка зависит от банковского приложения, а не от страны, но на практике эти коды широко распознаются в Австрии, Германии, Финляндии, Нидерландах и Бельгии. В остальной части еврозоны покрытие неравномерное, а за её пределами код вообще не имеет смысла. В Швейцарии используется собственный стандарт QR-bill, который выглядит похоже, но несовместим.
Может ли EPC QR-код быть динамическим или отслеживаемым?
Нет. Платёжные данные зашиты прямо в напечатанный узор, и телефон декодирует их офлайн, не обращаясь ни к какому серверу, так что перенаправлять и считать попросту нечего. Если нужно изменить сумму или назначение платежа, придётся сгенерировать новый код. Всё, что вам продают как «динамический платёжный QR-код», на самом деле ссылка на страницу оплаты - это другой продукт.
Что произойдёт, если поместить короткую ссылку в EPC QR-код?
Банковское приложение не сможет его разобрать и либо покажет ошибку, либо просто откроет код как обычный URL. Парсер ожидает, что первая строка будет BCD, а четвёртая - SCT; URL не совпадает ни с тем, ни с другим. Платёжные QR-коды и QR-коды со ссылками - это два разных кода, которые случайно совпадают по внешней форме.
Насколько большой может быть полезная нагрузка?
331 байт - именно это по правилам EPC ограничивает QR-код версией 13 с уровнем коррекции ошибок M. На практике место в основном занимает текст назначения платежа, так что именно длинный произвольный текст чаще всего выталкивает код за лимит. Держите назначение платежа структурированным и коротким - тогда код останется достаточно разреженным, чтобы его можно было отсканировать с бумажного счёта.
Безопасны ли платёжные QR-коды на бумажных счетах?
Сам код не содержит исполняемого содержимого, а плательщик подтверждает перевод в своём банковском приложении, которое показывает имя получателя и IBAN до того, как деньги куда-либо уйдут. Реальный риск - физический: наклейка поверх напечатанного кода, перенаправляющая платёж на другой счёт. Печатайте код прямо в макете счёта, а не на отдельной этикетке, и говорите плательщикам проверять имя на экране подтверждения.
Попробуйте Elido
Вставьте URL - получите короткую ссылку
Без регистрации. Ссылка живёт 30 дней. Зарегистрируйтесь, чтобы оставить её навсегда.
Бесплатно, без регистрации · 2 в день