返回首页

Telegram Stars 机器人,用于无需 IP 的支付

本文描述了如何创建 Telegram 机器人,通过 Stars 进行无需注册的支付。使用 aiogram 3、SQLite、aiohttp 用于 Mini App。涵盖唯一链接、文件处理、HTTPS 和 CORS 部署。

Stars 机器人:Telegram 中无需注册的支付
Advertisement 728x90

用 Telegram 星币打造支付机器人——无需个人身份或护照信息

开发者可在 Telegram 中接收捐赠并销售数字商品,无需注册个体工商户(IP)或提供护照信息。通过使用 Telegram 星币作为支付货币,机器人可自动生成账单并处理付款。系统基于 Python、aiogram 3、SQLite 数据库存储以及 aiohttp 实现 Mini App API。任何 Telegram 用户均可即时创建商品并生成付款链接。

系统架构

aiogram 3 机器人与 SQLite 数据库交互,存储商品、卖家及付款链接信息。独立的 aiohttp API 通过以下端点为 Mini App 提供服务:

  • /api/products —— 商品目录
  • /api/donate —— 捐赠按钮数据
  • /api/create_invoice —— 账单生成

所有支付逻辑均在机器人内部完成:Mini App 通过 API 获取数据,机器人生成账单,并通过 successful_payment 事件确认支付成功。

Google AdInline article slot

生成唯一付款链接

为保障安全,链接采用唯一编码如 prod_fgU7d,存于 payment_links 表中。完整 URL 为:https://t.me/System_Paybot?start=prod_fgU7d。该机制防止 ID 暴力破解,同时支持流量来源追踪。

交付内容时,机器人根据 file_id 自动识别文件类型,并采用通用发送机制:

try:
    await message.answer_document(document=content, caption=thanks)
except:
    try:
        await message.answer_photo(photo=content, caption=thanks)
    except:
        # 进一步尝试视频、音频等类型

sendDocument 方法对大多数 Telegram 文件类型均稳定可靠。

Google AdInline article slot

处理星币支付

账单通过 create_invoice_link 方法创建,参数如下:

invoice_link = await bot.create_invoice_link(
    title=title,
    description=f"购买: {title}",
    payload=f"pay_{product_id}_{user_id}",
    provider_token="",
    currency="XTR",
    prices=[{"label": title, "amount": amount}]
)

Telegram 完成支付后,会推送 successful_payment 更新,并携带 payload 以识别商品,进而向用户交付内容。

管理员功能与数据分析

管理员可使用以下命令:

Google AdInline article slot
  • /admin_stats —— 总体统计数据
  • /admin_users —— 最近用户列表
  • /admin_broadcast —— 群发消息
  • /admin_ban / /admin_unban —— 权限控制

卖家可通过 /stats 查看个人分析数据。

部署常见问题排查

星币限制

星币直接归属机器人拥有者,无法转给他人。解决方案:代码开源,任何人都可部署自己的机器人。

Mini App 的 HTTPS 要求

Mini App 必须使用 HTTPS。当 443 端口被占用(如 Xray VPN 占用)时,可使用 Nginx 在 8443 端口搭建子域名:

  • 子域名:shop.system-dev.ru
  • 使用 Certbot 获取 SSL 证书
  • 在 iptables 中开放 8443 端口
  • BotFather 设置地址:https://shop.system-dev.ru:8443

/var/www/systempay 目录权限设为 chmod 755,并赋予 www-data 用户访问权限。

API 的 CORS 问题

在 aiohttp 中添加中间件:

@web.middleware
async def cors_middleware(request, handler):
    response = await handler(request)
    response.headers['Access-Control-Allow-Origin'] = '*'
    response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS'
    response.headers['Access-Control-Allow-Headers'] = 'Content-Type'
    return response

最终功能亮点

该机器人支持:

  • 上传任意类型文件或分享链接
  • 任意金额的捐赠
  • 带商品目录的响应式 Mini App 界面
  • 个人数据分析仪表盘
  • 管理员后台面板

即刻可用,轻松实现 Telegram 内自动销售。

核心要点

  • 唯一链接编码确保安全且支持流量分析,无需猜测 ID。
  • 通过 sendDocument 及备用方案实现跨格式通用文件分发,兼容所有 Telegram 类型。
  • 星币集成简单,但资金归机器人拥有者所有——开源设计支持自行托管。
  • 非标准端口 HTTPS 问题可通过 Nginx + Certbot 解决,不与 VPN 冲突。
  • aiohttp 中的 CORS 中间件有效解决 Mini App 的跨域请求问题。

— Editorial Team

Advertisement 728x90

继续阅读