#!/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)