Простейшая платежная система на основе скретч карт.
В этой статье речь пойдет о так называемых скретч картах.
Типичным примером является карта пополнения оператора связи.В нашей стране мне доводилась сталкиваться с двумя видами компаний активно использующие такие системы-это операторы мобильно связи, и интернет провайдеры. Обычно подобные компании имеют достаточный бюджет для приобретения подобных систем "под ключ". Кроме крупных интернет провайдеров, существуют и мелкие. Можно даже обнаружить "провайдера"(для простоты понимания буду использовать именно этот термин) у которого количество клиентов не превышает десятка. Обычно такие организации рождаются в экономически не благополучных регионах, или сельской местности. В такой регион крупные компании предпочитают не соваться. Это приводит к появлению частных предпринимателей желающих заработать на перепродаже трафика. Обычно у таких людей нет средств на покупку дорогостоящего оборудования, а тем более программных продуктов.
Как то, ко мне обратился один из таких "провайдеров". Нужно было разработать саму дешевую и самую простейшую платежную систему на основе карт пополнения. Задача была выполнена. В этой статье хочу поделится идеей реализации этой задачи.
Единицей платежной системы является ваучер пополнения. Обычно это небольшой кусок картона с нанесенным на него защитным покрытием. Под покрытием находится код пополнения. Принцип работы платежной прос. Клиент покупает карту. Отправляет код пополнения компании предоставляющей услугу, происходит занесение денежный средств на счет. Обычно данные карты распространяются в магазинах находящимися неподалеку от большего количества пользователей. Фактически расчет происходит не между покупателем данной услуги и поставщиком, а между магазином и компанией. Это существенно упрощает процесс оплаты. Сокращает расходы на содержания дополнительного персонала.
Систему можно разделить на два компонента-средства создания карт, и средства работы с кодом пополнения. К средствам создания относится программное обеспечение для генерации кода, оборудование для печати карт. В качестве средства работы с кодом выступает сервер на стороне провайдера.
Структура системы.
Ваучеры пополнения.
Так как экономически не выгоден заказ картонных форм на предприятии, поэтому заказчик сам печатает карты на лазерном принтере на простой бумаге. Возникает необходимость защиты секретного когда. Она легко решается разделением формы на три части, код пополнения оказывается внутри.Форма склеивается скотчем. Правда заказчик не захотел так делать, и просто решил печатать с одной стороны логотип, а с другой код. А проблему открытости кода взялся решать самостоятельно.
Код пополнения.
Обмен данными между клиентом и системой происходит посредством 7ми значного массива состоящего из цифр 0-9. Элементы массива с индексами 0-3 содержат код карты. Элементы с индексами 4-6 содержит стоимость карты(сумму денег). Пример int[7] ={1,2,3,4,0,5,0} карта с номером 1234 суммой 50единиц.
Массив данных кодируется при помощи алгоритма Triple DES. В результате получается последовательность состоящая из 8байт. Каждый байт которой преобразуется в десятичное число. Таким образом формируется код состоящий из 8 чисел в диапазоне 0-255. Числовой код уменьшает количество ошибок при вводе, и увеличивает его читаемость.
Таким образом ваучер пополнения может содержать максимум 24 символа. Такой подход к формированию данных необходим при использование открытого кода, доступному любому желающему для чтения и прочих манипуляций. Для примера ваучер пополнения компании "MTS" содержит 14 символов, но он имеет защитное покрытие не доступное для чтения. Думаю можно уверенно сказать-что из большинства интернет серферов 90% не смогут написать элементарную программу, не говоря уже о попытках дешифрирования кода.
Код пополнения генерирует простейшая консольная программа написанная на C#. Он сохраняется в текстовый файл. Пример содержания текстового файла:
********************Запуск программы***********************************
*** 16.12.2065 15:49
***********************************************************************
------------------------------------------------------------------------
[1] 500руб
33 202 241 38
228 117 88 98
------------------------------------------------------------------------
------------------------------------------------------------------------
[2] 100руб
23 78 164 13
210 93 105 206
------------------------------------------------------------------------
Программа создает нужное количество карт определенного номинала. Допустим 5карт номинала 100 рублей. В квадратных скобках номер карты.
Серверная часть.
Аппаратная часть представляет собой программный роутер фирмы Mikrotik RB450G. Родная операционная система удалена, вместо нее установлен OpenWrt. В качестве web сервера используется lighthttpd.
Программно обеспечение написано на языке php.
Код генерируется путем шифрования данных по алгоритму TripleDES . Это увеличивает безопасность системы в разы.