Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Идея: Система прямого финансирования закупок фондов и штабов Pokupay #21

Open
dmikushin opened this issue Dec 2, 2019 · 22 comments
Labels

Comments

@dmikushin
Copy link

dmikushin commented Dec 2, 2019

Система прямого финансирования закупок фондов и штабов Pokupay

Проблема

Сейчас фонды, действующие в интересах общества, собирают финансовые пожертвования в виде денег на личные счета. В последнее время мы увидели, что даже наиболее "модные" (чуть было не написал "приличные") финансовые институты склонны чинить этому препятствия (блокировка карты Волкова в рокете).

Таким образом, любой банковский счёт для фонда является риском. Более того, в финансовые риски оказываются незаконно вовлечены сотрудники фондов (штабы, ФБК и т.д.) и просто совершенно случайные люди.

Задача

Сделать финансовые потоки максимально распределёнными, чтобы обыски у 2 миллионов человек из-за 300 рублей стали невозможны.

Как?

Допустим, фонд сформировал бюджет на оргтехнику или какие-то услуги подрядчиков. Вместо того, чтобы собирать донейты на свой счёт, можно запустить инфо-сервис, который будет просить донатеров напрямую оплатить ту или иную покупку со своей банковской карты. Для донатера это - то же самое, что переводить деньги. А для фондов - отличная защита от финансового беспредела.

Возможная реализация

Сотрудник или оператор фонда со своего десктопа заходит на облачный сервер. В этом сервере висит много изолированных контейнеров-киосков с Google Chromium или Firefox. Оператор вводит адрес магазина и переходит к оплате готовой корзины. Браузеры умеют автоподставлять номера банковских карт сразу в виде звёздочек. Мы форкнем эту функцию так, чтобы она брала данные с сервера жертвователей, но полностью скрывала от оператора всё: и номер, и ФИО, и дату, и CVV. Оператору остаётся только нажать на оплату и убедиться, что она прошла. Если не прошла - новая попытка, и автоподстановка введёт звёздочками данные другого жертвователя. Для обслуживания смс-ок потребуется мобильное приложение на стороне жертвователя, авторизованное на получение смс от наших номеров.

@KlonD90 KlonD90 added the idea label Dec 2, 2019
@KlonD90
Copy link
Contributor

KlonD90 commented Dec 2, 2019

А фонд оплаты труда?

@dmikushin
Copy link
Author

Из фонда оплаты труда можно охватить регулярные безналичные платежи. Так, сотрудник может занести в сервис свои платёжки за коммуналку, интернет, мобильную связь, спорт или кружок для ребёнка. Получается как "соцпакет" у офисного работника, только краудфандинговый.

@KlonD90

@dmikushin dmikushin changed the title Идея: Система прямого финансирования закупок фондов и штабов Occupay Идея: Система прямого финансирования закупок фондов и штабов Pokupay Dec 2, 2019
@KlonD90
Copy link
Contributor

KlonD90 commented Dec 2, 2019

Да но какой-то суперконтроль людей и суперпрозрачность. Не проще ли криптой?

@dmikushin
Copy link
Author

dmikushin commented Dec 2, 2019

Когда донейтер желает отправить донейт, севис подбирает ему похожий по сумме платёж, и донейтер должен подтвердить его в разумно обезличенном виде, например "3180 руб., ПАО ТомскОблЭнерго, компенсация волонтёру". Сам сервис конечно знает больше подробностей о платежах, но и значительно меньше, чем обычный банк знает о вас, если вы оплачиваете покупки картой.

Представьте себе что вы стоите в очереди на кассу, а покупатель магазина перед вами забыл кошелёк (его заблокировали по делу о 80 миллиардах ФБК). Вы знаете, что он работает на компанию, которую вы поддерживаете. Поэтому вы подойдёте и оплатите его покупку своей картой. Может вы увидите краем глаза, что из его пакетов торчат лук и сосиски - ну и что, кому от этого должно стыдно стать? Наш сервис позволит оказывать такую поддержку в большом масштабе.

Крипта - небезупречное решение во многих отношениях. Главное, с точки зрения репутации это будет примерно как раздать сотрудникам фондов банковские карты иностранных банков. Но борьба с коррупцией и волонтёрство в России сейчас трактуются как сугубо суверенные вопросы, как по закону, так и по духу. Чтобы это изменилось, страна должна стать более открытой, но пока такие решения очень многим покажутся неприемлемыми.

@valericus
Copy link

valericus commented Dec 3, 2019

Классная идея, мне прям очень нравится.

Но механизм работы не очень понятен. Сотрудник организации хочет купить пачку бумаги. Находит его в интернет-магазине, кладёт в корзину, жмёт «оплатить», и...?

Ссылки на страницу для реквизитов карты живут очень недолго, шарить их с жертвователем неудобно.

Как вариант — выставлять реквизиты для безналичной оплаты: БИК, корсчёт, номер счёта, номер заказа. Это достаточно распределённо, но у магазина могут быть непонятки с оплатой счёта третьим лицом. Плюс перевод по реквизитам — не самый дружелюбный интерфейс.

Можно запилить шлюз, принимающий деньги с карты и высылающий их по реквизитам, но это единая точка отказа, потому что российское юрлицо и счёт в российском банке.

Плюс в такой системе будут «зависать» любые покупки дороже 500 рублей (медианное пожертвование по данным ФБК). То есть, нужна опция по агрегации нескольких пожертвований. И это снова точка отказа, потому что деньги нужно где-то (на счету в российском банке) хранить до накопления полной суммы.

@dmikushin
Copy link
Author

Как вариант — выставлять реквизиты для безналичной оплаты: БИК, корсчёт, номер счёта, номер заказа. Это достаточно распределённо, но у магазина могут быть непонятки с оплатой счёта третьим лицом. Плюс перевод по реквизитам — не самый дружелюбный интерфейс.

Да, мой расчёт именно на процессинг платёжек, в первую очередь. У крупных получателей это точно не вызовет вопросов - так вы можете оплатить чьи-угодно коммунальные услуги, например. И оплатить можно произвольную сумму, хоть 4 раза по 500 рублей. Вообще, идентификация идёт по строке "назначение платежа" - в ней пишется в чью пользу перевод. И перевод всегда проще принять и разобраться в нём, потому что ошибочный перевод по-хорошему нужно возвращать, а это никому не удобно.

Можно просить жертвователя предоставить данные банковской карты и разрешённый лимит снятия. Тогда для подтверждения платежа будет достаточно смс-кода.

@valericus

@valericus
Copy link

В голову пришёл, пожалуй, главный минус с процессингом платёжек — невозможность (или крайне высокая сложность) автоматизации. Не существует единого API для отслеживания простых банковских переводов. То есть, мы не можем автоматически проверять, что а) платёж прошёл, б) он на правильную сумму. Максимум, что мы можем — надеяться на магазин и на сотрудника организации реципиента: магазин сообщит об оплате, сотрудник отметит это в системе. Но в этой схеме слишком много человеческого фактора.

Вторая проблема — синхронизация нескольких доноров. Несколько человек может оплатить одну покупку, или на большую покупку придёт слишком много маленьких частей. С этим можно бороться «блокировками» на манер блокировок в базах данных (только один донор может жертвовать на одну покупку), но в связи с первой проблемой мы не сможем достаточно оперативно снимать блокировки. В итоге сбор больших сумм очень затягивается, плюс злоумышленники могут злоупотреблять этим механизмом и бесконечно долго держать блокировку на важных закупках.

Хранить на стороне сервиса полные реквизиты карты (и, видимо, отдавать их целиком сотруднику организации) — совсем плохая идея. Это со всех сторон небезопасно: от взлома базы с реквизитами (а такая база станет очень лакомым куском для хакеров всех мастей) до всё того же человеческого фактора. Одноразовый пароль — не панацея, потому что он нужен не для каждой оплаты.

Можно попробовать пойти по тому же пути, по которому ходят Google Pay, Apple Pay, Samsung Pay и иже с ними: взять один раз реквизиты у пользователя, соорудить на их основе некую виртуальную карту и уже эту виртуальную карту выдать реципиенту. Реципиент оплачивает покупку привычным способом реквизитами карты, а сервис инкапсулирует в себе списание с нескольких карт, проверку лимитов списания и разрешённые статьи бюджета. Насколько я понимаю, это потребует интеграции с платёжными сервисами вроде Visa и Master Card. Хз, насколько это сложно.

При этом нужно учесть проблему баланса: деньги должны быть на карте не только на момент привязки карты, но и на момент оплаты. Это можно решить через механизм заморозки денег на счету: в момент донации деньги блокируем, в момент оплаты в магазине подтверждаем блокировку и списываем деньги. Если что-то пошло не так, снимаем блокировку.

@valericus
Copy link

Ну и да, нельзя забывать про вопрос удобства. Если жертвовать неудобно, большая часть жертвователей уходит.

@dmikushin
Copy link
Author

dmikushin commented Dec 4, 2019

Виртуальная карта - это отличная мысль! Более того, многие будут рады получить брендированную кредитную карту с символикой фонда. Но нам следует при этом воздержаться от любых признаков банковской деятельности: заморозка средств - это эквайринг, а наши "взаимоотношения" с VISA/MasterCard погонят расследовать вообще всех следователей каких только найдут в стране.

@dmikushin
Copy link
Author

dmikushin commented Dec 4, 2019

Нехватку средств у жертвователя на момент оплаты нужно обрабатывать как обычную ситуацию. С этим сталкиваются любые сервисы с продляемой подпиской, тот же GitHub. Не прошёл платёж - отправляем жертвователю грустный смайлик и переходим к следующему жертвователю в цикле.

То же самое касается хранения данных банковских карт. Если бы миллионы сервсисов их не хранили, мы бы сейчас тёрли монеткой полоски как 20 лет назад. Серьёзные сервисы существуют благодаря автопродлению, для которого как ни крути необходимо хранить данные. Мы можем подумать как хранить их в не очень глупом виде, например разделить шифрование на несколько верифицирующих серверов, каждый из которых пришлось бы взламывать отдельно.

@dmikushin
Copy link
Author

dmikushin commented Dec 4, 2019

Допустим, мы пришли к тому, что храним номера банковских карт. Система могла бы выглядеть так. Сотрудник или оператор фонда со своего десктопа заходит на облачный сервер. В этом сервере висит много изолированных контейнеров-киосков с Google Chromium или Firefox. Оператор вводит адрес магазина и переходит к оплате готовой корзины. Браузеры умеют автоподставлять номера банковских карт сразу в виде звёздочек. Мы форкнем эту функцию так, чтобы она брала данные с сервера жертвователей, но полностью скрывала от оператора всё: и номер, и ФИО, и дату, и CVV. Оператору остаётся только нажать на оплату и убедиться, что она прошла. Если не прошла - новая попытка, и автоподстановка введёт звёздочками данные другого жертвователя. Для обслуживания смс-ок потребуется мобильное приложение на стороне жертвователя, авторизованное на получение смс.

@valericus
Copy link

Чтобы прям брать и хранить данные карт, нужно пройти сертификацию PCI DSS или пользоваться услугами компании, которая такую сертификацию прошла. Крупные магазины типа Amazon (может, даже Ozon) могут себе позволить сами проходить такую сертификацию, мелкие пользуются чужим хранением.

Вариант с форком браузера и запуском на удалённом рабочем столе выглядит, мягко говоря, костыльно, тем более, что есть промышленные решения. Плюс это не решает проблему крупных покупок, всё ещё непонятно, где аккумулировать средства на покупку очередного украденного изъятого ноутбука.

@dmikushin
Copy link
Author

dmikushin commented Dec 13, 2019

@valericus Вы слишком усложняете. Люди в нужде нередко выкладывают номер карты для пожертвований открыто в соцсетях - какие там PCI DSS?? Единственное, что формально может потребоваться - это согласие на обработку персональных данных. Но юрлица-оператора, проверка которого может потребовать предъявить это согласие, не существует. Поэтому и этой проблемы де-юре не существует.

На этапе MVP я вижу виртуалку с браузером как минимальную меру защиты. Таким образом мы на всякий случай не даём никакие данные на личный компьютер волонтёра. Это предотвратит утечки в случае изъятия и недобросовестное использование провокаторами.

Приведите, пожалуйста, подходящие на Ваш взгляд бесплатные промышленные решения?

Аккумулирование средств на более крупную покупку может происходить внутри небольших групп жертвователей, знакомых между собой. Но эту функцию (как и многие другие) следует пока вынести на рамки MVP.

@dmikushin
Copy link
Author

dmikushin commented Dec 13, 2019

Создал проект https://github.com/stouza и добавил всех тех, кто лайкнул идею. Если кто-то ещё хотел бы присоединиться, пожалуйста, отправьте запрос.

@valericus
Copy link

16-значный номер карты — это публичная информация, его можно использовать для пополнения счёта, но (насколько знаю) нельзя использовать для снятия или оплаты. То есть, это совсем не то же самое, что хранить полные реквизиты карты.

Плюс «люди в нужде» — это очень плохой аргумент. Я не усложняю, а хочу построить надёжную и безопасную систему, заслуживающую доверия. То, что люди в состоянии стресса делают глупости — не повод самим делать заведомо небезопасное решение. Ещё и в совокупности с разговором о формальном исполнении обязательств. Такой подход подрывает доверие к проекту в частности и к фандрайзингу вообще.

Боюсь, бесплатных решений в сфере финансов нет, любой посредник в пересылке денег из точки А в точку Б берёт комиссию. Из промышленных решений могу предложить таки воспользоваться услугами посредника, который возьмёт на себя хранение данных банковских карт. Возможно, с кем-то удастся договориться на приемлемые условия.

Виртуалка с браузером, повторюсь, плохая идея. Ни мне, ни, полагаю, вам не достаёт знаний, чтобы сделать такое решение безопасным и устойчивым ко взлому. То есть, нужно делать решение, которое хранит минимум чувствительной информации. Вариант с посредником выглядит адекватно, потому что требует хранения только короткоживущих и отзываемых токенов.

В общем, надо определиться с целями и задачами. Сейчас попробую набросать что-то в рамках созданного проекта.

@dmikushin
Copy link
Author

dmikushin commented Dec 14, 2019

@valericus Спасибо. Мы не найдём посредника, который а) чисто Российский б) не поддастся политическому давлению. Так что ни о какой реальной защите данных через посредника говорить не приходится. Поэтому я говорю об этом как о формальности, имея в виду что защита теоретически должна быть и со стороны Закона, и со стороны посредника. Но на деле её нет, и обеспечить что-то можем только мы сами, своими средствами.

@dmikushin
Copy link
Author

dmikushin commented Dec 23, 2019 via email

@jerrygreen
Copy link

@dmikushin, я поторопился публиковать свое сообщение, и сразу его удалил, потому что хотя можно будет списывать деньги со счетов жертвователей, но с точки зрения сотрудников фондов, - все равно не получится сделать транзакцию напрямую в магазин. Нужно как-то считать реквизиты карт обратно из Stripe, чтобы использовать их для форм оплаты, - но Stripe не позволяет этого сделать, реквизиты он защищает ото всех. Он позволит только вывести к себе на карту, на свой банковский счет. Не раскрывая при этом данных карты. Так что даже технически, это не совсем то, что нужно. Нужно, чтобы была возможность сделать транзакцию напрямую. Нужен другой способ.

А еще, я не понимаю такого жесткого смещения в "суверенность". ФБК у себя использует ту же гугл аналитику. И да, им уже жаловались на то, что у них там "иностранное ПО", и что они иностранные агенты, - но ничего это не дало. Как вы думаете, где у них находятся сервера? Да если бы у какого-нибудь российского провайдера, - уже давно бы снесли все к чертям. По крайней мере, какой-то кусочек инфраструктуры у них физически находится во Франции. Домен они тоже зарегистрировали через иностранного регистратора.

Это я к тому, что везде нужна своя мера, и не нужно уж слишком сильно идти на поводу у идиотов (достаточно просто соблюдать законодательство).

Потому что если идти на поводу у идиотов, делать прям как они желают, то можно и вовсе сказать, что интернет - это иностранная разработка. Так давайте её теперь тоже не использовать?

Возьмите себя, пожалуйста, в руки.

@dmikushin
Copy link
Author

dmikushin commented Dec 24, 2019

@jerrygreen Вы правы, что любую предосторожность можно проигнорировать, намеренно придав ей абсурдности. Допустим, Вас просят ждать зелёного сигнала светофора, а вы возмущённо летите через перекрёсток, приговаривая, что так можно и машины запретить, и вообще из дома не выходить.

Я исхожу из модели клиента - того человека, гражданина и жителя РФ, который будет пользоваться сервисом. Попробуйте себя поставить на место жителя среднего российского города (не Москвы), которому в уши льёт ТВ: станет ли он сотрудничать с Вашей системой? Было бы хорошо собрать хотя бы несколько мнений на этот счёт. Если условный рабочий Уралвагонзавода скажет, что "давайте, мне хоть страйп, хоть госдеп, лишь бы за Россиюшку", значит Ваш подход верный, а я зря всё усложняю.

@dmikushin
Copy link
Author

Популярность платформы - важный фактор живучести. Я бы хотел сделать такую архитектуру, которая бы была востребована во множестве сообществ. Допустим, микрокредиты или касса взаимопомощи или бартерные взаиморасчёты. Применений огромное число, в этом сила нашей идеи. И любой сможет её форкнуть и использовать как ему нужно. Поэтому важно не создавать лишних жёстких внешних привязок. Кому понадобится - отрежет нашу собственную систему обработки платежа и прикрутит свою.

@jerrygreen
Copy link

jerrygreen commented Dec 24, 2019

@valericus

Можно попробовать пойти по тому же пути, по которому ходят Google Pay, Apple Pay, Samsung Pay и иже с ними: взять один раз реквизиты у пользователя, соорудить на их основе некую виртуальную карту и уже эту виртуальную карту выдать реципиенту. Реципиент оплачивает покупку привычным способом реквизитами карты, а сервис инкапсулирует в себе списание с нескольких карт, проверку лимитов списания и разрешённые статьи бюджета. Насколько я понимаю, это потребует интеграции с платёжными сервисами вроде Visa и Master Card. Хз, насколько это сложно.

Это как обычная карта, но с динамическим номером. Вот это звучит максимально круто, на самом деле.

Только непонятно насколько это реализуемо.

В самой концепции/теории, кажется, косяков нет. Должно работать. Это даже не совсем онлайн сервис получается. Вся логика будет зашита в самом девайсе (в локальном приложении). Хотя сервис может тут присутствовать как вспомогательный элемент, чтобы автоматически пополнять базу доступных карт для пользователя, когда появляются новые жертвователи. Возможно как-то еще будет помогать считать общий баланс (с этим могут быть проблемы).

Это получается какое-то свое приложение ApplePay (приложение Wallet), которое по NFC будет передавать данные подходящей карты, но динамически. А если есть возможность увидеть оплачиваемую сумму до того, как были выданы реквизиты (не уверен, что так можно), то можно 1 в 1 повторить текущий опыт людей с их собственными картами: просто прикладываешь телефон, и всё. Только здесь будут такие "краундфандинговые карты", за которыми будет стоять множество разных пожертвованных карт, и приложение будет автоматически выдавать более подходящую.

Возможно можно использовать стандарт ApplePay, чтобы это все работало с текущими безналичными платежными терминалами, - как бы имитировать ApplePay приложение. Потому что, по большому счету, приложение ApplePay "Wallet" не делает никакой магии, - оно просто хранит данные карты, и передает эти данные в платежный терминал по какому-то стандарту. Уж не знаю, есть ли этот стандарт в публичном доступе, чтобы его можно было повторить.

Правда кнопочки "Pay with ApplePay" на сайтах работать не будут в любом случае.

Да и вообще, возможно идея с NFC тоже не очень, - там банки могут легко счесть такие транзакции подозрительными из-за странной геолокации. Если пользователь и жертвователь в разных городах, то это может быть проблемой. Причем, банк может разбираться с такими транзакциями как "по указу сверху", так и по своей инициативе, дабы обезопасить своего клиента.

Но какой-то более кустарный вариант, с прямым вводом данных карты, - вполне может работать. Забиваешь в приложение нужную сумму, - и оно динамически выдает тебе данные одной из карт. И эти данные уже используешь в любом онлайн магазине, приложении, или для тех же коммунальных услуг.

Ох, не знаю, не знаю... Тут много что строится просто от гипотез, нужно проверять кучу моментов, очень много ресерчить... Работы просто выше крыши 😄 Но идея прикольная.

@dmikushin
Copy link
Author

Для подстановки карты в NFC-чип (это называется NFC Host-Emulation), интеграция с Visa/Mastercard не нужна. Но есть проблемы: во-первых, на терминале может быть запрошен пин-код, это неудобно. Во-вторых, NFC считается опасной, поэтому - да - её лимитируют и по гео и по сумме. В конечном итоге, это только для магазина и хорошего телефона (ни в одном из моих NFC-чипа нет). Ещё есть планы запустить на кассах магазинов выдачу наличных денег - это значит может появиться риск обналички.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants