Как отгружать купленные электронные товары?

Добрый день!

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

Вот как должно быть в идеале:
1) Покупатель выбирает товар и оплачивает его.
2) После оплаты клиенту приходит уникальная ссылка на скачивание купленных материалов, действующая для него в течение ограниченного времени.
3) Profit =)

Но тогда есть ряд вопросов:
1) Где лучше хранить сами материалы? FTP-сервер, файловый хостинг?
2) Каким образом формировать уникальную для каждого покупателя, но постоянную относительно ресурса ссылку?
3) Какие использовать защитные механизмы для предотвращения расшаривания этой ссылки? Срок жизни, привязка к IP, SMS-подтверждения?
4) Как обезопасить продаваемые материалы в хранилище? Использовать права доступа?

К сожалению, конструктивное решение пока в голове не сформировалось.

Сам скрипт магазина менять на более функциональный точно не будем. Придётся дописывать существующий.

Опыта в разработке пока не очень много, поэтому прошу совета и ваших мыслей по этому поводу.
  • Вопрос задан
  • 3262 просмотра
Пригласить эксперта
Ответы на вопрос 6
DedalX
@DedalX
Web разработчик, IT бизнесмен
Смотрите как сделано в одном из самых крупных и старых магазинов цифровых товаров — plati.ru. Там при покупке файла дается ссылка, которую видит человек в своем личном кабинете, после залогинивания. Ссылка работает только для текущего пользователя и при передачи ее третьему лицу она работать не будет. Главное чтобы ваша ссылка на товар работала только для текущего, вошедшего пользователя. И совсем не обязательно ей быть временной при этом.
Ответ написан
Комментировать
LeoCcoder
@LeoCcoder
Мне больше нравится идея с личным кабинетом (ЛК). Все купленные пользователем ресурсы всегда должны быть ему доступны через ЛК. Пользователь заходит в ЛК, там проверяется какие ресурсы у него куплены и при нажатии на кнопку Скачать, соответствующие файлы отдаются пользователю.

Если хочется действительно разадавать именно ссылки, а ЛК нету (например пользователь отправляет платное смс, а обратно ему высылается ссылка), то внутрь каждой ссылки нужно вставлять ключ. Данный ключ создается для определенного ресурса и действует скажем неделю или 2 дня (тут уже вам надо подумать).

Хочу сказать, что пользователю ничего не мешает залить скачанный у вас файл на любой файлообменник и раздать всем публичную ссылку, поэтому сильно заморачиваться тут не стоит (делать ссылки, которые действуют только 10 минут или разрешают только одно скачивание).
Ответ написан
@Vampiro
Затискайте в zip-архив и вышлите на почту =))))
Ответ написан
nazarpc
@nazarpc
Open Source enthusiast
Можете записывать ключи, которые передаются в ссылке, хранить их в БД, при переходе по ссылке проверяется, если ли доступ ко этому ключу, если есть — то для какого товара.
Если всё ОК — скриптом отдаете файл клиенту, а сам файл может лежать где угодно, вы скриптом можете его хоть с ftp переправлять. Только в таком случае нужно использовать легковесный веб-сервер, иначе при большом количестве одновременных скачиваний ему будет туго.

Если развить указанный yaksa вариант — файл можно не копировать, а делать каждому пользователю симлинки на оригинальный файл с уникальным адресом, по истечению годности симлинк удалять.
Ответ написан
Комментировать
@egorinsk
> 1) Где лучше хранить сами материалы? FTP-сервер, файловый хостинг?

На любом сервере с nginx с широким каналом. Ограничений типа качать только в 1 поток или ограничений на скорость скачивания ставить не надо — у вас же магазин, а не бесплатный рапидшеар. Думайте не как сделать проще вам, а как удобнее клиенту.

> 2) Каким образом формировать уникальную для каждого покупателя, но постоянную относительно ресурса ссылку?

Добавлять что-нибудь вроде key/session_id в ссылку, а в нгинксе использовать вызов внешнего скрипта для проверки ключа и учета. Например, storage.example.org/key-123456789/История римского права в 3 томах, т.1, Иванов А.А.pdf

Key может быть привязан к логину, первым 3 цифрам IP и времени.

Если key неправильный — не выводить непонятных ошибок HTTP 403, а возвращать в личный кабинет на страницу ошибки и выводить телефон, на который можно позвонить в случае проблем со скачиванием.

У файла должно быть нормальное человекочитаемое имя, а не хеш md5.

> 3) Какие использовать защитные механизмы для предотвращения расшаривания этой ссылки? Срок жизни, привязка к IP, SMS-подтверждения?

См. ответ 2

> 4) Как обезопасить продаваемые материалы в хранилище? Использовать права доступа?

См. ответ 2
Ответ написан
Комментировать
yaksa
@yaksa
Клиент получает временную ссылку на сайт в своем аккаунте магазина. Допустим товар «весит» 5 мегабайт. Следовательно скачать его можно быстро. Даем время жизни ссылки — 60 минут(а вдруг у него диалап?). Можно поставить пользователю куку когда он запрашивает ссылку. Проверять ее при обращении к файлу по ссылке, чтобы никто кроме этого человека не мог скачать файл. Хранить у себя на сервере. При генерации ссылки, копируем файл во временную директорию. Псое истечения времени жизни ссылки файл убивается.

Это вариант ходу. Если подумать, то можно и еще что-нибудь изобрести.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы