226 lines
7.1 KiB
Python
226 lines
7.1 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
Soul创业派对 - 小程序一键部署脚本
|
||
功能:
|
||
1. 打开微信开发者工具
|
||
2. 自动编译小程序
|
||
3. 上传到微信平台
|
||
4. 显示审核指引
|
||
"""
|
||
|
||
import os
|
||
import sys
|
||
import time
|
||
import subprocess
|
||
from pathlib import Path
|
||
|
||
# 修复Windows控制台编码问题
|
||
if sys.platform == 'win32':
|
||
import io
|
||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
|
||
|
||
# 配置信息
|
||
CONFIG = {
|
||
'appid': 'wxb8bbb2b10dec74aa',
|
||
'project_path': Path(__file__).parent / 'miniprogram',
|
||
'version': '1.0.1',
|
||
'desc': 'Soul创业派对 - 1:1完整还原Web功能'
|
||
}
|
||
|
||
# 微信开发者工具可能的路径
|
||
DEVTOOLS_PATHS = [
|
||
r"D:\微信web开发者工具\微信开发者工具.exe",
|
||
r"C:\Program Files (x86)\Tencent\微信web开发者工具\微信开发者工具.exe",
|
||
r"C:\Program Files\Tencent\微信web开发者工具\微信开发者工具.exe",
|
||
]
|
||
|
||
|
||
def print_banner():
|
||
"""打印横幅"""
|
||
print("\n" + "=" * 70)
|
||
print(" 🚀 Soul创业派对 - 小程序一键部署")
|
||
print("=" * 70 + "\n")
|
||
|
||
|
||
def find_devtools():
|
||
"""查找微信开发者工具"""
|
||
print("🔍 正在查找微信开发者工具...")
|
||
|
||
for devtools_path in DEVTOOLS_PATHS:
|
||
if os.path.exists(devtools_path):
|
||
print(f"✅ 找到微信开发者工具: {devtools_path}\n")
|
||
return devtools_path
|
||
|
||
print("❌ 未找到微信开发者工具")
|
||
print("\n请确保已安装微信开发者工具")
|
||
print("下载地址: https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html\n")
|
||
return None
|
||
|
||
|
||
def open_devtools(devtools_path):
|
||
"""打开微信开发者工具"""
|
||
print("📱 正在打开微信开发者工具...")
|
||
|
||
try:
|
||
# 使用项目路径打开开发者工具
|
||
subprocess.Popen([devtools_path, str(CONFIG['project_path'])])
|
||
print("✅ 微信开发者工具已打开\n")
|
||
print("⏳ 等待开发者工具启动(10秒)...")
|
||
time.sleep(10)
|
||
return True
|
||
except Exception as e:
|
||
print(f"❌ 打开失败: {e}")
|
||
return False
|
||
|
||
|
||
def check_private_key():
|
||
"""检查上传密钥"""
|
||
key_path = CONFIG['project_path'] / 'private.key'
|
||
|
||
if not key_path.exists():
|
||
print("\n" + "⚠" * 35)
|
||
print("\n❌ 未找到上传密钥文件 private.key\n")
|
||
print("📥 获取密钥步骤:")
|
||
print(" 1. 访问 https://mp.weixin.qq.com/")
|
||
print(" 2. 登录小程序后台")
|
||
print(" 3. 开发管理 → 开发设置 → 小程序代码上传密钥")
|
||
print(" 4. 点击「生成」,下载密钥文件")
|
||
print(" 5. 将下载的 private.*.key 重命名为 private.key")
|
||
print(f" 6. 放到目录: {CONFIG['project_path']}")
|
||
print("\n💡 温馨提示:")
|
||
print(" - 密钥只能生成一次,请妥善保管")
|
||
print(" - 如需重新生成,需要到后台重置密钥")
|
||
print("\n" + "⚠" * 35 + "\n")
|
||
return False
|
||
|
||
print(f"✅ 找到密钥文件: private.key\n")
|
||
return True
|
||
|
||
|
||
def upload_miniprogram():
|
||
"""上传小程序"""
|
||
print("\n" + "-" * 70)
|
||
print("📦 准备上传小程序到微信平台...")
|
||
print("-" * 70 + "\n")
|
||
|
||
print(f"📂 项目路径: {CONFIG['project_path']}")
|
||
print(f"🆔 AppID: {CONFIG['appid']}")
|
||
print(f"📌 版本号: {CONFIG['version']}")
|
||
print(f"📝 描述: {CONFIG['desc']}\n")
|
||
|
||
# 检查密钥
|
||
if not check_private_key():
|
||
return False
|
||
|
||
# 切换到miniprogram目录执行上传脚本
|
||
upload_script = CONFIG['project_path'] / '上传小程序.py'
|
||
|
||
if not upload_script.exists():
|
||
print(f"❌ 未找到上传脚本: {upload_script}")
|
||
return False
|
||
|
||
print("⏳ 正在执行上传脚本...\n")
|
||
|
||
try:
|
||
result = subprocess.run(
|
||
[sys.executable, str(upload_script)],
|
||
cwd=CONFIG['project_path'],
|
||
capture_output=False, # 直接显示输出
|
||
text=True
|
||
)
|
||
|
||
return result.returncode == 0
|
||
except Exception as e:
|
||
print(f"❌ 上传出错: {e}")
|
||
return False
|
||
|
||
|
||
def show_next_steps():
|
||
"""显示后续步骤"""
|
||
print("\n" + "=" * 70)
|
||
print("✅ 部署完成!")
|
||
print("=" * 70 + "\n")
|
||
|
||
print("📱 后续操作:")
|
||
print("\n1️⃣ 在微信开发者工具中:")
|
||
print(" - 查看编译结果")
|
||
print(" - 使用模拟器或真机预览测试")
|
||
print(" - 确认所有功能正常")
|
||
|
||
print("\n2️⃣ 提交审核:")
|
||
print(" - 访问 https://mp.weixin.qq.com/")
|
||
print(" - 登录小程序后台")
|
||
print(" - 版本管理 → 开发版本")
|
||
print(" - 选择刚上传的版本 → 提交审核")
|
||
|
||
print("\n3️⃣ 审核材料准备:")
|
||
print(" - 小程序演示视频(可选)")
|
||
print(" - 测试账号(如有登录功能)")
|
||
print(" - 功能说明(突出核心功能)")
|
||
|
||
print("\n4️⃣ 审核通过后:")
|
||
print(" - 在后台点击「发布」")
|
||
print(" - 用户即可在微信中搜索使用")
|
||
|
||
print("\n" + "=" * 70 + "\n")
|
||
|
||
|
||
def main():
|
||
"""主函数"""
|
||
print_banner()
|
||
|
||
# 1. 查找微信开发者工具
|
||
devtools_path = find_devtools()
|
||
if not devtools_path:
|
||
print("💡 请先安装微信开发者工具,然后重新运行本脚本")
|
||
return False
|
||
|
||
# 2. 打开微信开发者工具
|
||
if not open_devtools(devtools_path):
|
||
print("❌ 无法打开微信开发者工具")
|
||
return False
|
||
|
||
print("\n✅ 微信开发者工具已打开,项目已加载")
|
||
print("\n💡 现在你可以:")
|
||
print(" 1. 在开发者工具中查看和测试小程序")
|
||
print(" 2. 使用模拟器或扫码真机预览")
|
||
print(" 3. 确认功能正常后,准备上传\n")
|
||
|
||
# 3. 询问是否立即上传
|
||
print("-" * 70)
|
||
user_input = input("\n是否立即上传到微信平台?(y/n,默认n): ").strip().lower()
|
||
|
||
if user_input == 'y':
|
||
if upload_miniprogram():
|
||
show_next_steps()
|
||
return True
|
||
else:
|
||
print("\n❌ 上传失败")
|
||
print("\n💡 你可以:")
|
||
print(" 1. 检查 private.key 是否正确")
|
||
print(" 2. 确保已开启开发者工具的「服务端口」")
|
||
print(" 3. 或在开发者工具中手动点击「上传」按钮\n")
|
||
return False
|
||
else:
|
||
print("\n✅ 开发者工具已就绪,你可以:")
|
||
print(" 1. 在开发者工具中测试小程序")
|
||
print(" 2. 准备好后,运行本脚本并选择上传")
|
||
print(" 3. 或直接在开发者工具中点击「上传」按钮\n")
|
||
return True
|
||
|
||
|
||
if __name__ == '__main__':
|
||
try:
|
||
success = main()
|
||
sys.exit(0 if success else 1)
|
||
except KeyboardInterrupt:
|
||
print("\n\n⚠️ 用户取消操作")
|
||
sys.exit(1)
|
||
except Exception as e:
|
||
print(f"\n❌ 发生错误: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
sys.exit(1)
|