#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Soul 创业派对 - 小程序一键上传(项目根目录运行) 将**当前仓库 miniprogram/ 目录的小程序代码**完整上传到微信公众平台。 AppID、项目路径等见 miniprogram/project.config.json 或 .cursorrules。 说明: - 本脚本是「把仓库里已有小程序代码原样上传」,不是「把 Web 站转成小程序」。 - Web(Next.js)与小程序(WXML/WXSS)是两套技术栈,无法 1:1 自动转换; 本仓库已提供原生小程序实现(miniprogram/),本脚本负责将其上传到公众号后台。 使用(在项目根目录): python scripts/autosysc-weixin.py # 版本号与描述在 miniprogram/upload.js 或 上传小程序.py 的 CONFIG 中修改 前置条件: - miniprogram/private.key:在微信公众平台「开发管理 → 开发设置 → 小程序代码上传密钥」生成并下载,重命名为 private.key 放到 miniprogram/ 下。 - 已安装微信开发者工具(可选,用于 CLI 方式)或 Node.js + miniprogram-ci(用于 CI 方式)。 """ from __future__ import print_function import sys import io import json import subprocess import argparse from pathlib import Path # 设置 stdout 编码为 UTF-8,解决 Windows 终端编码问题 if sys.platform == "win32": sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace') sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace') # 项目根目录 ROOT = Path(__file__).resolve().parent.parent MINIPROGRAM_DIR = ROOT / "miniprogram" UPLOAD_SCRIPT = MINIPROGRAM_DIR / "上传小程序.py" def get_appid(): """从 miniprogram/project.config.json 或 .cursorrules 读取 AppID""" config_file = MINIPROGRAM_DIR / "project.config.json" if config_file.exists(): try: with open(config_file, "r", encoding="utf-8") as f: data = json.load(f) appid = data.get("appid", "").strip() if appid: return appid except Exception: pass # 与 .cursorrules 中一致 return "wxb8bbb2b10dec74aa" def check_miniprogram(): """检查 miniprogram 目录和必要文件""" if not MINIPROGRAM_DIR.is_dir(): print("❌ 未找到 miniprogram 目录: %s" % MINIPROGRAM_DIR) return False app_json = MINIPROGRAM_DIR / "app.json" if not app_json.exists(): print("❌ miniprogram 目录下未找到 app.json,请确认是否为小程序项目根目录") return False return True def check_private_key(): """检查上传密钥是否存在""" key_file = MINIPROGRAM_DIR / "private.key" if key_file.exists(): return True print("❌ 未找到上传密钥: miniprogram/private.key") print("") print("请按以下步骤获取:") print(" 1. 打开 https://mp.weixin.qq.com/ 登录小程序后台") print(" 2. 开发管理 → 开发设置 → 小程序代码上传密钥") print(" 3. 点击「生成」并下载密钥文件") print(" 4. 将 private.*.key 重命名为 private.key") print(" 5. 放到项目 miniprogram/ 目录下") print("") return False def main(): parser = argparse.ArgumentParser(description="小程序代码一键上传到微信公众平台") parser.parse_args() print("=" * 60) print(" Soul 创业派对 - 小程序一键上传") print("=" * 60) print(" 项目根目录: %s" % ROOT) print(" 小程序目录: %s" % MINIPROGRAM_DIR) print(" AppID: %s" % get_appid()) print("=" * 60) if not check_miniprogram(): return 1 if not check_private_key(): return 1 if not UPLOAD_SCRIPT.exists(): print("❌ 未找到上传脚本: %s" % UPLOAD_SCRIPT) return 1 print("") print("🚀 调用 miniprogram/上传小程序.py 执行上传...") print("") cmd = [sys.executable, str(UPLOAD_SCRIPT)] try: r = subprocess.run( cmd, cwd=str(MINIPROGRAM_DIR), timeout=300, ) if r.returncode == 0: print("") print(" 后台提交审核: https://mp.weixin.qq.com/ → 版本管理 → 开发版本 → 提交审核") print("=" * 60) return 0 return r.returncode except subprocess.TimeoutExpired: print("❌ 上传超时(超过 5 分钟)") return 1 except Exception as e: print("❌ 执行失败: %s" % e) return 1 if __name__ == "__main__": sys.exit(main())