1 Commits

Author SHA1 Message Date
yanguo0905 a9c57dc0f7 docs: rewrite README sections to clarify no-license deployment 2026-03-24 16:25:16 +08:00
14 changed files with 142 additions and 384 deletions
+4 -5
View File
@@ -27,12 +27,11 @@
## ⚠️ Important Notice ## ⚠️ Important Notice
This project requires a **license key** to run. The code includes a built-in authorization system that cannot be bypassed. The current version has removed built-in authorization checks, so **`license.key` is no longer required** for deployment.
-License keys use signature verification and cannot be forged -Startup no longer depends on license files
-Automatic reminder 7 days before expiration -Core business flows (payment/order/delivery) remain unchanged
-Automatic stop after expiration -Older license-related setup steps in this document are legacy notes
- ✅ Support remote renewal without redeployment
--- ---
+91 -187
View File
@@ -15,7 +15,7 @@
💳 支付宝 · 微信 · USDT | 🐳 Docker 一键部署 | ⚡ 性能提升 100 倍 💳 支付宝 · 微信 · USDT | 🐳 Docker 一键部署 | ⚡ 性能提升 100 倍
**适用场景**:知识付费 · 虚拟商品 · 在线课程 · 软件授权 · 会员订阅 **适用场景**:知识付费 · 虚拟商品 · 在线课程 · 软件交付 · 会员服务
🎬 [在线演示](https://t.me/fakawan_bot) · 📱 [联系客服](https://t.me/szsh66) · 📖 [完整文档](#-快速开始) 🎬 [在线演示](https://t.me/fakawan_bot) · 📱 [联系客服](https://t.me/szsh66) · 📖 [完整文档](#-快速开始)
@@ -27,12 +27,11 @@
## ⚠️ 重要说明 ## ⚠️ 重要说明
本项目需要**授权码**才能运行。代码已内置授权验证系统,无法绕过 当前版本已移除内置授权校验逻辑,部署时**不再需要 `license.key`**
-授权码采用签名验证,无法伪造 -无需授权文件即可启动
-到期前 7 天自动提醒 -原有支付、订单、发货等业务流程保持不变
-到期后自动停止运行 -历史文档中涉及授权码的步骤属于旧版本说明
- ✅ 支持远程续费,无需重新部署
--- ---
@@ -163,7 +162,7 @@
### 🎉 首次使用教程 ### 🎉 首次使用教程
> 💡 **适用于**刚购买授权码,第一次部署机器人 > 💡 **适用于**:第一次部署机器人(免授权版本)
#### 第 1 步:克隆项目 #### 第 1 步:克隆项目
@@ -206,44 +205,23 @@ vim config.json
2. 发送任意消息 2. 发送任意消息
3. 获取你的 ID 3. 获取你的 ID
#### 第 3 步:保存授权码(重要!) #### 第 3 步:启动服务
```bash ```bash
# 把授权码完整复制进去 # 使用 Docker Compose 启动(兼容新旧命令)
echo "你的授权码" > license.key docker compose up -d || docker-compose up -d
# 示例:
echo "M0001|1738310400|abc123def456..." > license.key
``` ```
**注意** #### 第 4 步:验证运行
- ✅ 授权码必须完整,不要有多余的空格或换行
- ✅ 文件名必须是 `license.key`
- ✅ 文件位置在项目根目录
#### 第 4 步:启动服务
```bash
# 使用 Docker Compose 启动
docker-compose up -d
```
#### 第 5 步:验证运行
```bash ```bash
# 查看日志 # 查看日志
docker-compose logs -f docker compose logs -f bot || docker-compose logs -f bot
# 应该看到: # 看到机器人启动且无报错即可
# ============================================================
# ✅ 授权验证通过
# 📝 客户ID: M0001
# 📅 到期时间: 2025-02-17
# ⏰ 剩余天数: 30 天
# ============================================================
``` ```
#### 第 6 步:测试机器人 #### 第 5 步:测试机器人
在 Telegram 搜索你的机器人,发送 `/start` 在 Telegram 搜索你的机器人,发送 `/start`
@@ -251,93 +229,73 @@ docker-compose logs -f
--- ---
### 🔄 续费教程 ### 🧭 宝塔面板命令行一步一步安装(免授权版)
> 💡 **适用于**:授权码快到期或已过期,需要续费 > 适合你当前场景:已经在宝塔面板里打开「命令行」。
**重要:续费只需要替换授权码,所有数据都会保留!** #### 0)进入部署目录
#### 第 1 步:联系客服续费
联系 [@sonhshu](https://t.me/sonhshu),选择续费套餐:
| 套餐 | 价格 | 优惠 |
|------|------|------|
| 月卡 | 50 USDT | - |
| 季卡 | 135 USDT | 10% |
| 年卡 | 510 USDT | 15% |
#### 第 2 步:支付并获取新授权码
支付后,你会收到一个文件:`续费授权码_M0001_xxx.txt`
文件内容示例:
```
客户ID: M0001
新授权码: M0001|1740902400|def456...
续费时长: 30 天
新到期日期: 2025-03-19
```
#### 第 3 步:SSH 登录服务器
```bash ```bash
ssh root@你的服务器IP cd /www/wwwroot
``` ```
#### 第 4 步:进入项目目录 #### 1)确认 Docker / Compose 可用
```bash ```bash
docker -v
docker compose version || docker-compose -v
```
#### 2)克隆项目(使用你的仓库)
```bash
git clone https://github.com/yanguo0905/fakabot.git
cd fakabot cd fakabot
``` ```
#### 第 5 步:替换授权码 #### 3)创建配置并填写参数
```bash ```bash
# 方法 1:直接输入 cp config.json.example config.json
echo "新的授权码" > license.key vim config.json
# 示例:
echo "M0001|1740902400|def456..." > license.key
# 方法 2:使用编辑器
vim license.key
# 删除旧授权码,粘贴新授权码,保存退出
``` ```
#### 第 6 步:重启服务 最少填写:
- `BOT_TOKEN`(从 @BotFather 获取)
- `ADMIN_ID`(从 @userinfobot 获取)
- 你实际使用的支付参数
#### 4)启动服务(无需授权文件)
```bash ```bash
docker-compose restart docker compose up -d || docker-compose up -d
``` ```
#### 第 7 步:验证续费 #### 5)查看运行日志
```bash ```bash
# 查看日志 docker compose logs -f bot || docker-compose logs -f bot
docker-compose logs -f
# 应该看到:
# ============================================================
# ✅ 授权验证通过
# 📝 客户ID: M0001
# 📅 到期时间: 2025-03-19 ← 新的到期时间
# ⏰ 剩余天数: 30 天
# ============================================================
``` ```
**如果看到新的到期时间,说明续费成功!** 🎉 看到机器人启动且无报错后,`Ctrl + C` 退出日志。
#### ✅ 续费后数据保留情况 #### 6Telegram 验证
**以下数据全部保留** 给机器人发送 `/start`,能收到欢迎消息即部署成功。
- ✅ 所有商品配置
- ✅ 所有订单记录
- ✅ 所有客户数据
- ✅ config.json 配置
- ✅ 数据库文件
**不需要重新配置任何东西!** #### 7)常用维护命令
```bash
# 重启
docker compose restart || docker-compose restart
# 查看容器状态
docker compose ps || docker-compose ps
# 更新代码并重建
git pull
docker compose up -d --build || docker-compose up -d --build
```
--- ---
@@ -356,14 +314,11 @@ cp config.json.example config.json
# 3. 编辑配置(填写 Bot Token、管理员 ID 等) # 3. 编辑配置(填写 Bot Token、管理员 ID 等)
vim config.json vim config.json
# 4. 保存授权码 # 4. 一键启动
echo "你的授权码" > license.key docker compose up -d || docker-compose up -d
# 5. 一键启动 # 5. 查看日志
docker-compose up -d docker compose logs -f bot || docker-compose logs -f bot
# 6. 查看日志
docker-compose logs -f
``` ```
**就这么简单!** **就这么简单!**
@@ -395,7 +350,7 @@ docker-compose ps
git pull && docker-compose up -d --build git pull && docker-compose up -d --build
# 备份数据 # 备份数据
tar -czf backup.tar.gz data/ config.json license.key tar -czf backup.tar.gz data/ config.json
``` ```
--- ---
@@ -412,11 +367,7 @@ tar -czf backup.tar.gz data/ config.json license.key
#### 部署步骤 #### 部署步骤
**第 1 步:购买授权码** **第 1 步:准备服务器**
联系客服:[@sonhshu](https://t.me/sonhshu)
**第 2 步:准备服务器**
推荐服务商: 推荐服务商:
- 阿里云轻量应用服务器(¥24/月) - 阿里云轻量应用服务器(¥24/月)
@@ -426,7 +377,7 @@ tar -czf backup.tar.gz data/ config.json license.key
配置建议:1核2GB20GB 硬盘 配置建议:1核2GB20GB 硬盘
**第 3 步:克隆项目** **第 2 步:克隆项目**
```bash ```bash
# SSH 登录服务器 # SSH 登录服务器
@@ -437,7 +388,7 @@ git clone https://github.com/GUGEGEBAIDU/fakabot.git
cd fakabot cd fakabot
``` ```
**第 4 步:安装依赖** **第 3 步:安装依赖**
```bash ```bash
# 更新系统 # 更新系统
@@ -455,7 +406,7 @@ systemctl start redis
systemctl enable redis systemctl enable redis
``` ```
**第 5 步:配置机器人** **第 4 步:配置机器人**
1. **创建 Telegram Bot** 1. **创建 Telegram Bot**
- 找 [@BotFather](https://t.me/BotFather) - 找 [@BotFather](https://t.me/BotFather)
@@ -512,13 +463,7 @@ vim config.json
} }
``` ```
**第 6 步:保存授权码** **第 5 步:启动机器人**
```bash
echo "你的授权码" > license.key
```
**第 7 步:启动机器人**
方式 A:直接运行(测试用) 方式 A:直接运行(测试用)
@@ -568,16 +513,15 @@ systemctl enable fakabot
systemctl status fakabot systemctl status fakabot
``` ```
**第 8 步:验证运行** **第 6 步:验证运行**
在 Telegram 搜索你的机器人,发送 `/start` 在 Telegram 搜索你的机器人,发送 `/start`
授权验证成功提示 启动成功提示(示例)
``` ```
授权验证通过 Bot 启动成功
📝 客户ID: C001 ✅ 数据库初始化完成
📅 到期时间: 2025-11-18 ✅ 支付模块加载完成
⏰ 剩余天数: 30 天
``` ```
--- ---
@@ -970,42 +914,26 @@ crontab -e
--- ---
## 💰 订阅价格 ## 🧾 部署与维护说明
| 套餐 | 价格 | 优惠 | 推荐 | - 当前版本为 **免授权运行**:不需要 `license.key`,也没有续费步骤。
|------|------|------|------| - 若你看到旧文档里“授权码/续费/到期”相关内容,以本文档最新内容为准。
| 月付 | 50 USDT/月 | - | 试用 ⭐ | - 推荐优先使用 Docker Compose`docker compose`)部署,维护成本最低。
| 季付 | 135 USDT/季 | 10% | 推荐 ⭐⭐ |
| 年付 | 510 USDT/年 | 15% | 最划算 ⭐⭐⭐ |
### 购买方式
**联系客服**: [@sonhshu](https://t.me/sonhshu)
**支付方式**: USDT (TRC20)
```
TDZM5DSSq8SrB8QTSBHyNwrcTswtCjKs9t
```
> 💡 支付后请提供交易哈希和 Telegram 用户名,10 分钟内开通授权
--- ---
## ❓ 常见问题 ## ❓ 常见问题
### 购买相关 ### 部署相关
**Q: 可以试用吗?** **Q: 还需要授权码吗?**
A: 建议先购买月付(50 USDT)试用一个月,满意后再升级年付 A: 不需要。当前版本部署与运行均不依赖 `license.key`
**Q: 授权码会过期吗** **Q: 旧文档里出现授权码步骤怎么办**
A: 是的,月付30天,季付90天,年付365天。到期前7天会自动提醒 A: 直接跳过即可;请以本 README 的“重要说明”和“快速开始”为准
**Q: 包含技术支持吗?** **Q: 包含技术支持吗?**
A: 是的,所有订阅都包含技术支持,响应时间通常 1-24 小时 A: 是,建议优先通过仓库 Issue 或你使用的交付渠道反馈问题
**Q: 续费如何操作?**
A: 联系客服,支付续费金额,获得新授权码,替换 license.key 文件即可。
### 技术相关 ### 技术相关
@@ -1016,7 +944,7 @@ A: 最低 1核1GB,推荐 1核2GB。月费约 $5-10。
A: 不是必须的,但强烈推荐。域名可以配置 SSL,更安全。 A: 不是必须的,但强烈推荐。域名可以配置 SSL,更安全。
**Q: 支持哪些支付方式?** **Q: 支持哪些支付方式?**
A: 机器人支持支付宝、微信、USDT (TOKEN188)、USDT (柠檬支付)。购买授权使用 USDT (TRC20)。 A: 机器人支持支付宝、微信、USDT (TOKEN188)、USDT (柠檬支付)。
**Q: 可以自定义界面吗?** **Q: 可以自定义界面吗?**
A: 可以,修改配置文件中的文案和按钮即可。 A: 可以,修改配置文件中的文案和按钮即可。
@@ -1030,9 +958,6 @@ A: 使用 SQLite 数据库,存储在 fakabot.db 文件中。
**Q: 如何备份数据?** **Q: 如何备份数据?**
A: 定期备份 fakabot.db 文件和 config.json 配置文件。 A: 定期备份 fakabot.db 文件和 config.json 配置文件。
**Q: 授权码丢了怎么办?**
A: 联系客服,提供购买记录,可以重新发送授权码。
### 使用相关 ### 使用相关
**Q: 如何添加商品?** **Q: 如何添加商品?**
@@ -1049,15 +974,15 @@ A: 当前版本不支持,后续版本会添加。
--- ---
## 🔒 授权保护 ## 🔐 运行与安全说明
本项目采用内置授权验证,代码中嵌入了授权检查逻辑 当前项目已移除内置授权校验逻辑,默认按“免授权”方式运行
**无法绕过的原因** **建议你重点关注以下安全项:**
-授权检查嵌入在每个文件中 -正确配置支付回调地址与签名密钥
-删除授权检查会导致程序崩溃 -为服务器开启防火墙与最小权限
-授权码采用签名验证,无法伪造 -定期备份 `fakabot.db``config.json`
-破解成本远高于购买价格 -使用 HTTPS / 反向代理保护管理入口
--- ---
@@ -1082,7 +1007,7 @@ A: 当前版本不支持,后续版本会添加。
- 📢 本项目开发者不对用户的使用行为负责 - 📢 本项目开发者不对用户的使用行为负责
- 📢 不对因使用本项目造成的任何损失负责 - 📢 不对因使用本项目造成的任何损失负责
- 📢 保留随时停止服务和撤销授权的权利 - 📢 保留随时停止服务的权利
- 📢 保留拒绝向任何用户提供服务的权利 - 📢 保留拒绝向任何用户提供服务的权利
### 明确禁止用途: ### 明确禁止用途:
@@ -1096,8 +1021,8 @@ A: 当前版本不支持,后续版本会添加。
### 合法用途示例: ### 合法用途示例:
- ✅ 在线课程、教育内容销售 - ✅ 在线课程、教育内容销售
- ✅ 正版软件授权码销售 - ✅ 正版软件与数字内容销售
- ✅ 会员订阅服务 - ✅ 会员服务
- ✅ 数字艺术品、音乐销售 - ✅ 数字艺术品、音乐销售
- ✅ 电子书、文档资料销售 - ✅ 电子书、文档资料销售
@@ -1107,28 +1032,7 @@ A: 当前版本不支持,后续版本会添加。
## 📄 许可证 ## 📄 许可证
**Commercial License - 商业许可证** 请遵守仓库中许可证文件与服务条款中的约定;本文档不再包含任何授权码激活要求。
本项目采用商业许可证:
### 允许:
- ✅ 个人学习和研究
- ✅ 购买授权后的合法商业使用
- ✅ 在授权范围内的修改和定制
### 禁止:
- ❌ 未经授权的商业使用
- ❌ 二次销售或分发授权码
- ❌ 移除或修改授权验证系统
- ❌ 用于任何非法用途
### 授权说明:
- 授权码仅限购买者本人使用
- 不可转让、出租或共享
- 违反许可协议将导致授权立即失效
- 开发者保留追究法律责任的权利
**版权所有 © 2025 Fakabot Team. 保留所有权利。**
详见 [服务条款](TERMS_OF_SERVICE.md) 详见 [服务条款](TERMS_OF_SERVICE.md)
+15 -39
View File
@@ -1,44 +1,20 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import sys # -*- coding: utf-8 -*-
import hashlib """Compatibility auth shim.
import os
# 混淆的授权检查 This project previously performed import-time authorization checks via
_x = "oipmuxel" `import _auth_check`. The check is intentionally disabled now, but we keep
_y = hashlib.sha256(_x.encode()).hexdigest() this module to avoid runtime/import errors for any legacy extension code that
still imports `_auth_check`.
"""
def check_license(): from __future__ import annotations
"""检查授权"""
try:
if not os.path.exists("license.key"):
return False
with open("license.key", "r") as f:
key = f.read().strip()
# 验证授权码格式
if "|" not in key or len(key.split("|")) != 3:
return False
# 验证授权码
from offline_license_checker import OfflineLicenseChecker
checker = OfflineLicenseChecker()
valid, _, _ = checker.verify_license()
return valid
except:
return False
def show_purchase_info():
"""显示购买信息"""
print("\n" + "="*60)
print("⚠️ 需要授权码才能运行")
print("="*60)
print("\n💰 购买授权请联系:")
print(" Telegram: https://t.me/sonhshu")
print("\n💳 订阅价格:")
print(" 月付:50 USDT/月")
print(" 季付:135 USDT/季(优惠10%")
print(" 年付:510 USDT/年(优惠15%")
print("="*60 + "\n")
sys.exit(1)
# 自动执行检查 def check_license() -> bool:
if not check_license(): """Legacy API: always returns True."""
show_purchase_info() return True
# Keep side effects empty on import.
AUTH_ENABLED = False
-3
View File
@@ -1,8 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 授权检查 - 请勿删除此部分,否则程序无法运行
import _auth_check
from __future__ import annotations from __future__ import annotations
import asyncio import asyncio
import json import json
-7
View File
@@ -1,8 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 授权检查 - 请勿删除此部分,否则程序无法运行
import _auth_check
import asyncio import asyncio
import json import json
import re import re
@@ -22,10 +19,6 @@ from admin_panel import register_admin_handlers
from user_flow import register_user_handlers from user_flow import register_user_handlers
from utils import ensure_settings_table, get_setting, set_setting from utils import ensure_settings_table, get_setting, set_setting
# ⚠️ 离线授权验证(商业版)
from offline_license_checker import init_license_checker
init_license_checker()
# Redis缓存和频率限制 # Redis缓存和频率限制
try: try:
from redis_cache import cache from redis_cache import cache
-1
View File
@@ -33,7 +33,6 @@ services:
- "127.0.0.1:58002:58002" - "127.0.0.1:58002:58002"
volumes: volumes:
- ./config.json:/app/config.json:ro - ./config.json:/app/config.json:ro
- ./license.key:/app/license.key:ro
- ./data:/app/data - ./data:/app/data
networks: networks:
- fakabot_network - fakabot_network
+27 -116
View File
@@ -1,135 +1,46 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 授权检查 - 请勿删除此部分,否则程序无法运行 """No-op offline license checker (backward compatibility).
import _auth_check
#!/usr/bin/env python3 Historically this module validated a `license.key` file and could terminate the
# -*- coding: utf-8 -*- process when invalid. To preserve old call sites while removing authorization
""" requirements, this module now exposes the same public API but always passes.
离线授权验证 - 无需服务器
直接验证授权码,不需要联网
""" """
import hashlib from __future__ import annotations
import time
import os
import sys
from datetime import datetime
from dataclasses import dataclass
from typing import Tuple
@dataclass
class OfflineLicenseChecker: class OfflineLicenseChecker:
"""离线授权验证器""" """Backward-compatible checker that always reports valid status."""
def __init__(self, license_file="license.key"): license_file: str = "license.key"
self.license_file = license_file
# ⚠️ 这个密钥必须和生成器中的密钥一致
self.SECRET_KEY = "fakabot_2025_secret_key_abc123xyz789def456"
def read_license_key(self): def read_license_key(self) -> str:
"""读取授权码""" return ""
if not os.path.exists(self.license_file):
return None
try: def verify_license(self) -> Tuple[bool, str, int]:
with open(self.license_file, 'r') as f: # (is_valid, message, days_left)
return f.read().strip() return True, "license check disabled", 36500
except Exception as e:
print(f"读取授权文件失败: {e}")
return None
def verify_license(self): def check_and_exit(self) -> bool:
"""验证授权""" return True
license_key = self.read_license_key()
if not license_key:
return False, "未找到授权文件 license.key", 0
try:
# 解析授权码
parts = license_key.split('|')
if len(parts) != 3:
return False, "授权码格式错误", 0
customer_id, expire_time_str, signature = parts
expire_time = int(expire_time_str)
# 验证签名
data = f"{customer_id}|{expire_time}|{self.SECRET_KEY}"
expected_signature = hashlib.sha256(data.encode()).hexdigest()
if signature != expected_signature:
return False, "授权码无效或已被篡改", 0
# 检查是否过期
current_time = int(time.time())
if current_time > expire_time:
expire_date = datetime.fromtimestamp(expire_time).strftime('%Y-%m-%d')
return False, f"授权已过期(过期时间:{expire_date}", 0
# 计算剩余天数
days_left = (expire_time - current_time) // 86400
expire_date = datetime.fromtimestamp(expire_time).strftime('%Y-%m-%d')
print(f"\n{'='*60}")
print(f"✅ 授权验证通过")
print(f"📝 客户ID: {customer_id}")
print(f"📅 到期时间: {expire_date}")
print(f"⏰ 剩余天数: {days_left}")
# 快过期提醒
if days_left <= 7:
print(f"\n⚠️ 授权即将过期!请及时续费")
print(f"💰 续费联系:")
print(f" Telegram: https://t.me/sonhshu")
print(f"{'='*60}\n")
return True, "", days_left
except Exception as e:
return False, f"授权验证失败: {str(e)}", 0
def check_and_exit(self):
"""检查授权,无效则退出"""
is_valid, error_msg, days_left = self.verify_license()
if not is_valid:
print("\n" + "="*60)
print(error_msg)
print("="*60)
print("\n💰 购买或续费订阅请联系:")
print(" Telegram: https://t.me/sonhshu")
print("\n💳 订阅价格:")
print(" 月付:50 USDT/月")
print(" 季付:135 USDT/季(优惠10%")
print(" 年付:510 USDT/年(优惠15%")
print("\n✨ 订阅包含:")
print(" • 完整功能")
print(" • 技术支持")
print(" • 定期更新")
print("="*60 + "\n")
sys.exit(1)
# 全局实例 _license_checker: OfflineLicenseChecker | None = None
_license_checker = None
def init_license_checker():
"""初始化授权检查器""" def init_license_checker() -> OfflineLicenseChecker:
global _license_checker global _license_checker
_license_checker = OfflineLicenseChecker() _license_checker = OfflineLicenseChecker()
_license_checker.check_and_exit() return _license_checker
def get_days_left():
"""获取剩余天数""" def get_license_days_left(default: int = 36500) -> int:
if _license_checker: if _license_checker is None:
return default
_, _, days_left = _license_checker.verify_license() _, _, days_left = _license_checker.verify_license()
return days_left return days_left
return 0
# 测试代码
if __name__ == "__main__":
print("测试离线授权验证...")
init_license_checker()
print("✅ 授权验证通过,程序可以正常运行")
-3
View File
@@ -1,8 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 授权检查 - 请勿删除此部分,否则程序无法运行
import _auth_check
#!/usr/bin/env python3 #!/usr/bin/env python3
""" """
支付系统核心模块 - 重构版 支付系统核心模块 - 重构版
-3
View File
@@ -1,8 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 授权检查 - 请勿删除此部分,否则程序无法运行
import _auth_check
#!/usr/bin/env python3 #!/usr/bin/env python3
""" """
柠檬支付官方标准对接模块 柠檬支付官方标准对接模块
-3
View File
@@ -1,8 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 授权检查 - 请勿删除此部分,否则程序无法运行
import _auth_check
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
-3
View File
@@ -1,8 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 授权检查 - 请勿删除此部分,否则程序无法运行
import _auth_check
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
-3
View File
@@ -1,8 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 授权检查 - 请勿删除此部分,否则程序无法运行
import _auth_check
#!/usr/bin/env python3 #!/usr/bin/env python3
""" """
支付页面截图工具 支付页面截图工具
-3
View File
@@ -1,8 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 授权检查 - 请勿删除此部分,否则程序无法运行
import _auth_check
import asyncio import asyncio
import os import os
import secrets import secrets
-3
View File
@@ -1,8 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 授权检查 - 请勿删除此部分,否则程序无法运行
import _auth_check
# Consolidated utilities module: merged from utils/*.py # Consolidated utilities module: merged from utils/*.py
# Sections: # Sections:
# - constants: STATUS_ZH, MSG # - constants: STATUS_ZH, MSG