
Всем привет! Сегодня с вами Владислав Козуля, тимлид команды Розница, и я расскажу, как начать платить по QR и ни в чём себе не отказывать. Моя команда делает продукт Касса МойСклад, которым часто пользуются наши клиенты, у которых есть точки продаж. Речь пойдёт о том, как разработка инструментов для повседневной работы выглядит изнутри.
Что это вообще такое
Для начала немного контекста. Обычно, когда вы оплачиваете покупки на кассе, у вас есть выбор: платить наликом или картой. Технически между ними есть ещё один вариант — и тем, и тем, но он встречается гораздо реже. Или бонусной картой, а это вообще отдельная система. Короче, налик или карта.
Теперь к ним добавляется новый способ — оплата по QR. Вместо того, чтобы насыпать монет или пикнуть эпплпеем об терминал, можно отсканировать QR-код и оплатить покупку через приложение банка.
Тут возникает резонный вопрос: к чему заморачиваться с камерой на телефоне, если картой проще? Это выгодно магазину. Прикол в том, что для него комиссия с платежа (а магазин с каждой покупки платит комиссию банку) будет ниже. К тому же оплачивать по QR можно без терминала, то есть ещё и экономить на закупке оборудования. Поэтому продавец будет предлагать вам оплатить именно по QR.
Коды бывают двух видов: статические и динамические. Статический код можно распечатать один раз и забыть. Отсканировав код, покупатель должен сам выбрать сумму перевода, поэтому такая схема больше подходит для чаевых или донатов. Чтобы оплачивать покупки, гораздо удобнее использовать динамические коды, которые генерируются на стороне банка. Этот процесс можно автоматизировать через кассовое ПО, что мы и сделали.

У Сбербанка для этого есть своя система — Плати по QR, Тинькофф работает по Системе Быстрых Платежей (СБП). При этом они интегрированы друг другом, то есть покупатель разницы не заметит. Обе системы с нашей стороны завёрнуты в единый API, поэтому для клиента тоже нет разницы.
Разберём, как оплата по QR выглядит под капотом с точки зрения Кассы МойСклад.

Пользователь МоегоСклада выбирает в настройках банк, с которым у него есть договор оплаты по QR. Теперь на его кассе появится новый способ оплаты.
Кассир создаёт продажу — касса запрашивает у бэкэнда QR-код.
Бэкэнд идёт в API банка, который выбрал пользователь из первого пункта. Получает строку, в которой зашиты данные для формирования платежа.
Полученная строка прилетает на кассу и зашивается в QR-код, который можно отрисовать на UI или распечатать на чеке — очень удобно.
Дальше мы опрашиваем банк до тех пор, пока он не скажет, что платеж дошел или был отменён.
Можно печатать фискальный чек, ура!
Вроде, звучит просто, а значит — пора ожидать подводных камней.
Подводные камни
Помните, я упоминал, что обычно платят наличными или по карте? Когда проектировали базу, тоже так думали. Добавление нового типа оплаты означает добавление новых полей в базу (у нас PostgreSQL), причём в историю операций, одну из самых больших и популярных таблиц. На её основе формируются отчёты, одна из ключевых функций МоегоСклада. Это раз.
Второй важный момент — остановка сервиса для обновления производится только в том случае, когда по-другому просто нельзя. А значит, наше решение должно заехать наживую. Эта часть заслуживает отдельной статьи.
Кроме обычной оплаты также возможны такие экзотические операции, как: предоплата, возврат оплаты и возврат предоплаты. Все они должны корректно учитываться при работе с QR. Смешанную оплату QR + наличными или картой мы просто не стали делать, иначе бы окончательно запутались в стремительно усложняющейся логике.
МойСклад не занимается процессингом платежей, только их учётом. Кассир возвращает вам деньги в руки или на карту своими силами, без участия кассового ПО. С оплатой по QR становится немного сложнее: теперь за отмену транзакции и возврат платежа отвечает бэкэнд. Для этого мы сохраняем её айдишник после инициализации.
В API обе операции сидят на одном эндпоинте (скопировали у Тинькова). До проведения платежа транзакцию можно отменить, и при попытке оплаты покупатель увидит ошибку в приложении банка. Если оплата уже прошла, будет произведён возврат. В случае, когда на кассе что-то пошло не так, возврат всегда может сделать владелец магазина из своего личного кабинета в банке.
Касса МойСклад — это не веб-сайт, а десктопное приложение и пара мобильных клиентов под iOS и Android. Они легко могут работать и при отсутствии связи месяцами: для этого там поднимается локальная база, то есть по сути, свой маленький бэкенд. Соответственно, миграцию надо проводить и на сервере, и на клиенте. Сломать локальную базу — означает превратить кассу в кирпич или ещё хуже: потерять все данные. Поистине апокалиптический сценарий для техподдержки.

Про десктопное приложение можно ещё много рассказать, поэтому остановимся на проблемах, которые актуальны конкретно для этой задачи.
Фух.
Мы запустили СБП с Тиньковым 1 октября, а 1 декабря — интеграцию со Сбером, Плати по QR. Уже почти февраль, и мы видим с десяток ежедневных платежей. Клиенты пользуются, люди оплачивают свои покупки по QR. А значит, всё было не зря!
В следующем выпуске я подробно расскажу о том, как релиз с оплатой по QR заезжал на бэкенде. Следите за обновлениями!
igrblkv
, если ?Но зачем?Даже VISA отказалась от QR-оплаты в России, оценив это направление как бесперспективное…Там реально настолько существенная разница между картой/смартфоном и QR-кодом?
Потому что я, как плательщик, не вижу особого выигрыша от возни с телефоном, если можно пикнуть картой (или смартфоном).
Если банки начнут принуждать всякими «Мегакешбеками» (ХКФ Банк), когда смартфоном дают 15%, а картой только 1% — тогда да, я буду расплачиваться смартфоном. Или QR-кодом. Да хоть платёжкой по реквизитам!..
Но тут-то как это будет? Продавец сделает скидку, если оплачивать QR, а не картой? Мне кажется он больше потеряет…
Нельзя-ли эту сторону осветить, хотя-бы в комментариях?
PS: Ну и я не совсем понял, как вы узнаете, что платёж прошел
Кто от кого будет ждать подтверждения платежа? Или «приходите через месяц, когда связь появится»?
vmkazakoff
Райффайзенбанк тоже запускает такие платежи. Само в том, что их очень хотят сами продавцы — тети на рынке не могут поставить себе терминал ибо: дорого (терминал не бесплатный + за стмку + обслуживание), не всегда понятно как заряжать (ну допустим решит вопрос повербанком, если осилит), не всегда связь ловит хорошо (у этих терминалов часто ужас, а не антенны).
QR решает эти проблемы. Приложения для генерации этих кодов такими темпами появятся в изобилии, с интеграция и со складом или 1с или что там ещё или без. А мне как клиенту это явно лучше чем написанный на картинке номер телефона, который надо перенабрать.
Одно но, где я не согласен со статьей, что это выводится как отдельный формат оплаты, хотя на самом деле это просто "апгрейд" перевода с карты — мне как клиенту все ещё нужен мой телефон, приложение моего банка и мобильная связь.
opaopa
Простите, вот на углу стоит бабка с семечками, бумажкой с QR и без терминала т.к. на углу сеть не ловит. Тут подхожу весь в белом я и начинаю лезть в приложение. А сеть по условиям не ловит… Вот спасибо, тефаль!
vmkazakoff
Если связи прям вообще нет (вы покупаете семечки в тайге, до города 500км на оленях) то да, ваш кейс верный — эпик фэйл.
В вашем конкретном кейсе у бабки скорее проблемы с подключением к питанию или гимор с зарядкой. QR можно один раз напечатать для такого случая, один фиг стакан семок стоит одинаково.
Если вернуться к моей логике: кассовые аппараты с встроенной симкой стоят сильно дороже. Кроме того антенны в них ужасные и они люто тормозят, а к вайфаю умеют цепляться вообще единицы. Так что если вы не достаточно продвинутый юзер, понимающий где лучше ловит и почему может тормозить — вы реально предпочтете не связываться с этим гимороем. Проверено на десятках курьеров с пиццей — каждый раз легче самому им перевести, чем смотреть как они белкой носятся по подъезду в попытках поймать сигнал, при том что у меня все отлично.
gecube
Никаких переводов на сбер. Как минимум — меня запарила жадность сбера при переводах СБП и c2c, как максимум — бОльшая часть рестораций снимает безналом оплату за заказ в момент его брони/создания. Да, при этом я как потребитель несу риски, что мне пиццу/бургер/etc могут не довезти, но это приемлемо.
vmkazakoff
Тоже бесит сбер. Особенно тем, что не включил переводы с других банков и из-за него приходится держать карту дополнительно (
Но нет, я не про перевод говорил, а оплату онлайн. Соседние пиццерии которые мне нравятся, позволяют сделать заказ и оплатить его уже вдогонку через сайт когда привезли.
Про переводы через СБП — я просто учу любой включать прием платежей с других банков, тем самым стаскивая с иглы Сбера. Соседний рыночные с бабушками с семенами уже почти пересадил. Недавно переводил на тинькоф, чему был очень рад (не тому что именно тинькоф, а тому что не сбер).
gecube
Если сети нет, то онлайн касса по условиям задачи работать тоже не будет. Остаётся только оффлайн-касса. И оплата наличными, не так ли?
vkozulya Автор
Когда сети нет совсем, тут уже без вариантов. У курьеров иногда сама онлайн-касса теряет сеть, в таком случае при помощи СБП ещё можно перекрутиться.
EnotP
Мелкие лавочники не обязаны принимать карты к оплате и они не заинтересованы в картах в принципе. При условной наценке на товар 5% и комиссии банка 3% большую часть дохода от продажи получит не продавец, а банк. QR же намного дешевле для продавца и потому вполне может подвинуть переводы на карту сбера как способ приёма безнала.
Klenov_s
Но у оплаты через платежные системы есть куча плюсов для клиентов. Как минимум система возврата и оспаривания платежей и пр. У визы и мастера репутация будет все же посильнее наших тиньковых и сберов в этом плане.
EnotP
Карта у меня есть с 1998 года. Возвратом средств через визу/мастеркард за это время я не пользовался ни разу. Если я предполагаю проблемный платёж, я просто пользуюсь PayPal — там возврат легче и быстрее. А qr код интересен в первую очередь, как я и писал выше, продавцам беляшей и прочему подобному бизнесу. Учитывая размеры транзакций в таких местах, я просто не буду заниматься волокитой по их оспариванию через банк.
igrblkv
Где посмотреть разницу?
Все говорят, что она велика, но никто не называет конкретных цифр…
Спасибо!
vmkazakoff
Комиссия от 0,4% для QR и 2,29% минимум в других случаях.
(https://www.raiffeisen.ru/business/product/acquiring/) Не реклама, простите.
Alexufo
Скажите, а какой к черту договор на qrcode если ты его сам генеришь, и в любом приложении банков «оплата по QR» пользуешь?
vmkazakoff
Ну речь всё-таки про банковское обслуживание счета и терминала (а это не дёшево), а не налог на черно-белые квадратики )))
Если в больших масштабах получать деньги на личную карту, то можно попасть на блокировку карты и штрафы.
Alexufo
ну так счет так или иначе уже есть, если это бизнес. В куркоде просто реквизиты же, сумму тоже можно прописать. По факту это же просто банковский перевод по реквизитам, просто руками их вводить не вариант, какие могут быть еще договора на уже существующий сервис?
Не понимаю я, как они изымают свои 0.4% что сбер что у вас по ссылке предлагается. Смотрел смотрел, так и не понял зачем это как-то еще регулировать с банком если оно уже работает.
vmkazakoff
Честно скажу, что таких деталей я уже не знаю (
Попросили тариф, я нашел пример который знал.
Alexufo
Я добавлял в договора куркод для оплаты с телефона и не понял когда и кто узнает, что перевод происходит по куркоду, если приложение само не сливает как-то. Без каких-либо договоров. Сгенерил куркод, с трех банковских приложений протестировал — реквизиты везде заполняются. Ну я фиг знает, воздух что-ли продают.
vmkazakoff
А вот подумал тут — может банки не берут обслуживание за счёт в виде фикс оплаты, а привязывают к объему оборота, как операторы связи к минутам звонка (раньше)?
Alexufo
Я не понимаю, как банк узнает, что оплата была по куркоду. Если только не поставить событие на кнопке «оптата по QR» в мобильном приложении и каким-то образом связывать Id транзакции с фактом оплаты через эту кнопку. Они же не могут писать тайную строчку в банковском платеже «ахтунг, оплата по куркоду, бери процент!!»
gecube
Тем, что это СБП. На сайте банка написано. Если вы умудритесь руками распарсить реквизиты куар кода и вбить их в клиент банка — велкам, банку будет без разницы. Просто qr идёт отдельно от интернет эквайринга, т.к. это другая услуга (но, наверное, назвать надо было по-другому, но тогда клиентам это не было казаться так «стильно-модно-молодёжно»)
Alexufo
так это уже делают все три банковских клиента — сбер, альфа, и тин. Парсят мой штрих самостоятельно без регистрации и смс. Стандарт штриха открыт и описан в сети с демками. Закодировал раз строчку с реквизитами компании, генерирую нужный комментарий с id сделки, чтобы распарсить когда платеж будет получен банком, для бухгалтера, чтобы с ума не сходил сопоставлять анонимные платежи.
Все работает как и должно. Но какое-то подозрение, что я чего то не понимаю, потому что это работает.
gecube
Ещё раз — признаком является — оплата через СБП. QR вторичен. Точно так же для физиков нельзя сделать перевод по СБП, если у физика счёт в банке, который это не поддерживает, но я точно так же могу и сделать обычный c2c без СБП, или обычный банковский перевод.
Alexufo
А где эта тогда кнопка СБП? У меня в приложении только одна «Оплата по QR». Ааа… может быть они подключают к счету протокол СБП чтобы были моментальные уведомления? Тогда логично. Но они только в рознице нужны. А для оплаты договоров, например, скорость не сильно важна. Подождать 2 дня и сэкономить 0.4 — 0.7% это выгодно.
vmkazakoff
Не, я думаю что это именно для розницы придумано. Не для b2b.
Melaen
Есть QR-код с реквизитами, стандартная форма, оплата по такому коду проводится как обычный банковский платеж. Есть QR-код от СБП, не заглядывал внутрь, но уверен что он отличается от QR-кода с реквизитами. QR-код от СБП как правило генерируется на стороне банка, через его сервис и через этот же сервис отслеживается факт оплаты. Это если кратко. У Сбера есть аналог QR-кода от СБП — Плати QR. Приложение банка при сканировании QR-кода понимает какого он «формата» и соответственно проводит оплату по разному.
vkozulya Автор
QR-код немного уводит от сути вопроса. Он тут нужен как способ получить реквизиты платежа. Можно распарсить скриншот в статье и посмотреть, что там ссылка на сайт СБП с указанием айдишника банка и суммы перевода.
Для Сбера ссылка, зашитая в QR, будет вести уже на сайт Сбера (что логично).
Alexufo
с зашитой ссылкой в куркод вы не оплатите через «Оплата по куркоду» в приложении. Там парсится
строка по стандарту.
Alexufo
qr.nspk.ru/AD10000LK0NDORLM80GQB07EGQHJT3RN?type=02&bank=100000000004&sum=100&cur=RUB&crc=0341

куркод не распознался приложенем альфы. Проприетарщина в стандарте.
Ах вот где секрет.
Сбер подгребает под себя как обычно.
Alexufo
Вот стандарт, форма принимающая его одна. Разве что идентификатор формата у СПБ другой, но блок обязательных реквизитов… остается. Может только что в доп поля пишется уникальный идентифкатор сделки, чтобы проводить их моментально.
docs.cntd.ru/document/1200110981
vmkazakoff
У меня есть подозрение, что вы уже платите за свой счёт комиссию. Судя по наличию бухгалтера — полноценную. И если у вас есть терминал, то QR для вас реально бесплатен полностью, ведь банк не за его генерацию берег денег (думаю это то как раз бесплатно вообще). Но вот если бабка у метро решит сделать себе счёт, то за обслуживание без терминала она сможет платить сильно меньше.
Alexufo
нет, ничего не платится. Оплата по куркоду работает на клиенте банков — заполняются реки и платеж уходит. Но это не быстрые платежи.
vmkazakoff
Тогда это не тот QR просто )))))
То что и там и там черно-белые квадратики это ничего не значит. С таким же успехом вы могли в свой QR зашить ссылку на гуглдок, где будут реквизиты в удобном для копирования виде. Или на страницу своего сайта с формой оплаты через *-пэй. Но это не та "оплата по QR".
Alexufo
не не, как раз наоборот. Стандарт описан, выше я кидал ссылку. Делаете штрих, и его принимает любое мобильное приложение и тетенька в кассе. Только это не быстрые платежи. Быстрые как раз делают невалидный для остальных приложений банков (кто под сбер не лег) мне по куркоду из статьи автора приложение альфабанка выдает «некорректный куркод», а мой прекрасно кушает, как и сбер как и другие. Но повторюсь, это не СБП.
vmkazakoff
Ну так вот не "не не" а это два разных методов оплаты. Один БСП с "вендорлок" пока (точнее вроде там несколько стандартов и пока бодаются), в статье про него и я ещё кидал ссылки. А вы про перевод со счета на счет по реквизитам, просто упростили ввод реквизитов.
Кстати у этих qr для перевода со счета на счет вообще с реализацией тоже беда — у меня через раз настолько мелкие точечки в платежках (очень много текста в код засунули) за квартиру, что приложения не считывают.
Alexufo
да, я разобрался наконец. Спасибо. Так эта реализация размера штриха, недостаточный его физический размер. Хорошо бы потестить на 2D сканерах, которые промышленные. Хотя если задача для населения, то должны тестироваться на телефонах
vmkazakoff
Ага. Не за что.
Про реализацию — то ли размер надо было увеличить физически, то ли стоило уменьшить обьем данных. Но то что не все такие коды реально прочитать — это вот прям факт (
Замечал что иногда код не читается в сбере, но справляется альфа, иногда только райф или тинькоф, а иногда никто вообще. Особенно за электричество. Там в назначении платежа целая поэма ?_(?)_/?
neenik
Оплата кодом удобна онлайн. Оплачиваю так около полугода у крупного интернет-магазина на букву "W". Жаль только, что кроме как у них такого способа оплаты больше не встречал (среди тех, что пользуюсь).
Карта неудобна тем, что нужно вводить данные.
Google Pay есть не у всех платёжных систем.
Код более удобен, чем Google Pay — меньше действий для оплаты.
gecube
Мне лично пофиг, что там думает контрагент, но для большинства задач для меня как для потребителя Apple Pay оказался наиболее удобным способом. Такая оплата точно есть в мобильных приложениях и вроде бы даже на интернет сайтах…
Ну, и несомненный плюс, что реквизиты моей реальной карты никуда не уходят…
Alexufo
Если сумма сделки большая, типа оплаты путевки в Турцию, то тебе или по банковским реквизитам платить или же один раз прочитать куркод приложением и ввести сумму. Это ооочень удобно. Эквайринг очень дорогой.
vkozulya Автор
Оплата по QR не может работать оффлайн, там же надо откуда-то получить код :D
Суть в том, чтобы оффлайн-продажи при этом не сломать.
Alexufo
QR с вашей стороны именно может, а с оплачивающей нет (но как работает СПБ я не знаю в этом случае)
gecube
а подтверждение транзакции откуда брать будете? С телефона покупателя? Просить его показать экран?
Alexufo
ну это уже вопрос договоренностей и особенностей бизнеса. Технически же это возможно. Очень много на доверии в бизнесе и чем его больше, тем бысрее все развивается, мошенничество нивелируется удобным для всех вариантом. Социальной инженирии седи мошенников мало, ну кинут вас 3 раза за ваши носки, но если у вас конкурентное преимущество из-за доверия к клиенту… это устроит. Если сделка должна совершиться сейчас же, то это не подходит. А если это услуга вызова сантехника, или ремонтника самовара, то есть вы платите за договор и если деньги не дошли — услуги не будет.
gecube
Мы же бабульку с семечками у метро и QR кодом обсуждали, так что "Если сделка должна совершиться сейчас же, то это не подходит."
Alexufo
В США довольно много мест в туристической зоне, где лежат просто так сникерсы, вода, чипсы — и нет кассира, а только надпись о самостоятельной оплате. То есть это зависит от самосознания общества, бабка в сша может и не ходить к метро, а продавать удаленно сразу в нескольких точках :-) Она же ведь ходит, чтобы не обманули, и сделка моментальная поэтому, нет доверия ни к товару ни к оплате. Так что моя бабка будущего продает офлайн по куркоду еле успевая рассыпать семки в семкоприемники у метро)) Но я понимаю конечно о чем вы. И ваш вариант более приземленный)
gecube
В Германии фермеры точно так же теми же яйцами торгуют ) Выкладывают на лоток, приходишь, берешь сколько нужно и оставляешь денег.
Alexufo
Да, как-то так. Тут это зайдет хорошо. Вся это херня с банковской безопасностью, криптозащитами только от того, что люди все еще считают что можно украсть у кого-то другого. Если власть ворует, или система устройства государства крайне запутана, естественно население требует максимальных гарантий для своих денег и пенсионных накоплений (последнее особенно смешно)