Skip to content

Shop: портал для клиентов ​

Nexora Shop даёт вашим клиентам одно веб-приложение по адресу https://<shop>/app/. Эта страница описывает, что это такое, как дать ему HTTPS и три способа, которыми клиент входит вне Telegram.

Одно приложение, два места ​

  • Портал в любом браузере. Он позволяет магазину продавать, даже когда Telegram заблокирован или бот потерян. Клиент входит по коду, отправленному на его Электронная почта или Номер телефона, либо по коду, который подтверждает бот, и покупает, платит, продлевает и смотрит свои подписки и расход так же, как в боте. Портал можно установить на главный экран телефона.
  • Мини-приложение внутри Telegram. Меню бота показывает Открыть магазин, как только публичный адрес Shop начинается с https://, и Telegram сам выполняет вход клиента. Клиент, покупавший на сайте, один раз привязывает свою почту или номер (их подтверждает код) и затем видит одни и те же подписки, кошелёк и заказы в обоих местах.

Что может клиент ​

  • Мои подписки: ссылка подписки с кнопкой копирования и QR-кодом, расход, дата окончания, продление, докупка трафика и автопродление с оплатой из кошелька.
  • Покупка и оплата: картой с фото, PDF или номером отслеживания квитанции либо через ваш шлюз (Shop: платежи).
  • Кошелёк: баланс и пополнение, подарочные коды и реферальная ссылка клиента (Shop: акции).
  • Бесплатный пробный период, если вы его предлагаете.

Приложение говорит на включённых вами языках, с каждым клиентом — на его собственном, с переключателем вверху. Оно сообщает, когда новые подписки приостановлены или когда заказ вернулся в кошелёк, потому что в панели не было места.

Публичный адрес и HTTPS ​

Установка спрашивает публичный адрес Shop, как Shop получает HTTPS-сертификат, и токен бота. Токен может подождать и задаётся в Shop. Адрес можно позже изменить в разделе Настройка, на том же порту; режим сертификата меняется повторным запуском установки с новым ответом.

С включённым HTTPS Shop отдаёт его только на своём порту установки, без простого HTTP рядом, и публичный адрес называет этот порт (443, если порт не указан). Панель тоже обращается к Shop по этому адресу.

httpsКогда использовать
panel (по умолчанию)Shop отдаёт сертификат, выбранный при установке из раздела Сертификаты панели. Панель выпускает и продлевает его; Shop забирает его каждые несколько минут и хранит копию. Shop не нужен порт 443, поэтому он может делить сервер с панелью: дайте ему свой порт, например 8443, и адрес https://shop.example.com:8443.
acmeДомен публичного адреса указывает на сервер Shop, и порт 443 там свободен. Shop сам получает и продлевает сертификат на 443, а на 80 ничего не слушает.
acme-httpТо же на любом порту, для сервера, где 443 занят. Удостоверяющий центр проверяет через порт 80.
self-signedАдрес по IP, например https://203.0.113.9:8443. Браузеры один раз предупреждают; трафик шифруется. Настройка показывает отпечаток, чтобы сравнить его с отпечатком в браузере и с тем, что показала панель при одобрении Shop.
offПростой HTTP на порту, для вашего собственного обратного прокси.

На самоподписанном адресе мини-приложения нет

Telegram не открывает мини-приложение на самоподписанном адресе, поэтому бот его не предлагает. Клиенты пользуются ботом и веб-приложением в браузере. Самоподписанный сертификат Shop продлевает примерно раз в год; доверьтесь новому в панели кнопкой Сертификат в строке Shop.

Вход по почте ​

Задайте свой SMTP-сервер в разделе Настройки Shop: хост, порт, имя пользователя, пароль, адрес отправителя и защиту: starttls (порт 587), tls (порт 465) или none (только для релея на том же сервере).

Код — шесть цифр, действует десять минут и даёт пять попыток. На один адрес приходит не больше трёх кодов за пятнадцать минут, на один IP-адрес — десяти в час.

Вход по SMS ​

Shop не называет никакого SMS-сервиса. Направьте его на свой через небольшой собственный посредник, указав его URL в Настройки. Если общий секрет не указан, Shop создаёт его сам. Каждый код отправляется так:

http
POST <your relay URL>
X-Nexora-Timestamp: 1790000000
X-Nexora-Signature: <hex HMAC-SHA256 of "1790000000.<body>" under the secret>
Content-Type: application/json

{"to": "+15550100", "text": "Your shop sign-in code: 123456"}

Ответьте любым статусом 2xx, как только сообщение отправлено. Подпись та же, что и в любом вызове Shop к вашему сервису (Shop: платежи); проверяйте её в посреднике. Номера приходят в международном формате; иранские номера, введённые как 0912…, становятся +98912….

Вход через бота ​

Когда бот задан, портал предлагает Войти через Telegram-бота. Это открывает бота с одноразовым кодом; клиент нажимает Start, и бот просит подтвердить вход, называя адрес, устройство и время браузера. Страница входит сама после Подтвердить; Отклонить расходует код.

Код действует пять минут, и вход выполняет только тот браузер, который его запросил: тот, кто пришлёт клиенту свою ссылку, ничего не получит. Для этого Telegram должен быть доступен; почта и SMS — на случай, когда он недоступен.

За обратным прокси ​

Коды, входы и проверки платежей ограничиваются по адресу клиента. Когда Shop работает за обратным прокси, который завершает TLS, задайте в .env установки NEXORA_OPT_TRUSTED_PROXIES — адреса или диапазоны прокси, например 127.0.0.1, 10.0.0.0/8. Тогда Shop берёт адрес клиента из X-Forwarded-For прокси. Если оставить пустым (по умолчанию), никакому пересланному заголовку не доверяют.

Текст и изображения — CC BY 4.0.