텔레그램 스타즈로 결제봇 만들기 — IP나 신분증 없이도 가능
개발자들은 개인사업자(IP) 등록이나 여권 정보 제공 없이도 텔레그램에서 기부금을 받거나 디지털 상품을 판매할 수 있습니다. 텔레그램 스타즈를 통화로 활용하면 봇이 자동으로 송장 생성 및 결제 처리를 수행합니다. 시스템은 Python과 aiogram 3, 데이터 저장용 SQLite, 미니앱 API용 aiohttp를 사용하며, 누구나 텔레그램 사용자로서 즉시 제품을 만들고 결제 링크를 생성할 수 있습니다.
시스템 아키텍처
aiogram 3 봇은 제품, 판매자, 결제 링크를 저장하는 SQLite 데이터베이스와 상호작용합니다. 별도의 aiohttp API는 다음과 같은 엔드포인트를 통해 미니앱을 제공합니다:
/api/products— 제품 카탈로그/api/donate— 기부 버튼 데이터/api/create_invoice— 송장 생성
결제 로직은 봇 내부에서 완전히 처리됩니다: 미니앱은 API를 통해 데이터를 가져오고, 봇은 송장을 생성하며, successful_payment 이벤트를 통해 결제 성공 여부를 확인합니다.
고유 결제 링크 생성
보안을 위해 링크는 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 메서드는 대부분의 텔레그램 파일 형식에서 안정적으로 작동합니다.
스타즈 결제 처리
송장은 다음 매개변수를 사용해 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}]
)
텔레그램이 결제를 처리하고, payload를 포함한 successful_payment 업데이트를 보내어 제품을 식별하고 사용자에게 전달합니다.
관리자 기능 및 분석
운영자는 다음 명령어에 접근할 수 있습니다:
/admin_stats— 전반적인 통계/admin_users— 최근 사용자 목록/admin_broadcast— 대량 메시지 발송/admin_ban//admin_unban— 접근 제어
판매자는 /stats 명령어로 개인 분석 데이터를 확인할 수 있습니다.
배포 문제 해결
스타즈 제한 사항
스타즈는 봇 소유자에게 직접 지급되며 다른 사람에게 이체할 수 없습니다. 해결책: 오픈소스 코드를 활용해 누구나 자신의 봇을 배포할 수 있습니다.
미니앱용 HTTPS
미니앱은 HTTPS가 필요합니다. 포트 443이 이미 사용 중일 경우(예: Xray VPN), Nginx를 포트 8443에 설정하고 하위 도메인을 사용하세요:
- 하위 도메인:
shop.system-dev.ru - SSL 인증서용 Certbot
- iptables에서 포트 8443 열기
- BotFather URL:
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
최종 기능 요약
봇은 다음을 지원합니다:
- 모든 종류의 파일 업로드 또는 링크 공유
- 원하는 금액의 기부 가능
- 제품 카탈로그와 반응형 UI를 갖춘 미니앱
- 개인 분석 대시보드
- 관리자 패널
즉시 사용 가능하며, 텔레그램에서 판매를 자동화할 수 있습니다.
핵심 포인트
- 고유 링크 코드는 ID 추측 없이 보안과 트래픽 분석을 보장합니다.
sendDocument와 후속 시도를 통한 유니버설 파일 전송은 모든 텔레그램 형식에서 작동합니다.- 스타즈 통합은 간단하지만 자금은 봇 소유자에게 집중됩니다. 오픈소스로 자체 호스팅이 가능합니다.
- 비표준 포트에서 HTTPS는 Nginx + Certbot를 활용해 VPN과 충돌 없이 해결됩니다.
- aiohttp의 CORS 미들웨어로 미니앱의 크로스오리진 문제를 해결할 수 있습니다.
— Editorial Team
아직 댓글이 없습니다.