微信小程序电商实战 10:上线部署——审核、CI/CD 与常见被拒原因

微信小程序电商实战 01 技术选型 | 02 脚手架搭建 | 03 NutUI 配置 | 04 云开发环境 | 05 商品模块 | 06 购物车与订单 | 07 微信支付 | 08 用户中心 | 09 性能优化 | 10 上线部署 ← 本文


# 上线部署 ## 发布流程 ### 开发版(本地) - pnpm dev:weapp - 微信开发者工具预览 ### 体验版 - 上传代码(CI 或手动) - 设置体验版本 - 邀请测试人员 ### 审核版 - 提交审核(1~7 个工作日) - 审核被拒处理 ### 正式版 - 审核通过后发布 - 灰度发布(可选) ## miniprogram-ci 自动化 ### 安装配置 ### 上传脚本 ### GitHub Actions 集成 ## 上线前检查清单 ### 资质文件 - 营业执照 - 行业特殊资质 ### 功能检查 - 合规支付(微信支付) - 隐私政策页面 - 客服联系方式 ## 常见被拒原因 ### 资质类 ### 功能类 ### 内容类 ## 版本管理 ### 灰度发布 ### 快速回滚

一、发布流程总览

flowchart LR A[本地开发] --> B[pnpm build:weapp] B --> C[miniprogram-ci 上传] C --> D[体验版测试] D --> E{测试通过?} E -->|否| A E -->|是| F[提交审核] F --> G{审核结果} G -->|被拒| H[修改后重新提交] G -->|通过| I[发布正式版] H --> F I --> J[灰度放量 / 全量]

二、miniprogram-ci 自动化上传

手动在微信开发者工具点击「上传」效率低,miniprogram-ci 支持命令行上传。

安装

pnpm add -D miniprogram-ci

上传脚本

// scripts/upload.js
const ci = require('miniprogram-ci')
const path = require('path')

async function upload() {
  const project = new ci.Project({
    appid: process.env.MINI_APPID,
    type: 'miniProgram',
    projectPath: path.resolve(__dirname, '../dist'),
    privateKeyPath: path.resolve(__dirname, '../.keys/private.key'),
    ignores: ['node_modules/**/*'],
  })

  const version = require('../package.json').version
  const desc = `CI 自动上传 v${version} - ${new Date().toLocaleString('zh-CN')}`

  await ci.upload({
    project,
    version,
    desc,
    robot: 1,  // CI 机器人编号 1~30
    setting: {
      es6: false,
      minify: true,
      autoPrefixWXSS: true,
    },
    onProgressUpdate: console.log,
  })

  console.log(`✅ 上传成功:v${version}`)
}

upload().catch(err => {
  console.error('❌ 上传失败:', err)
  process.exit(1)
})

package.json 加入脚本:

{
  "scripts": {
    "build:weapp": "taro build --type weapp",
    "upload": "node scripts/upload.js",
    "release": "pnpm build:weapp && pnpm upload"
  }
}

获取上传密钥

在微信公众平台 → 开发 → 开发设置 → 小程序代码上传密钥,下载 .key 文件,不要提交到 Git,加入 .gitignore

.keys/

三、GitHub Actions CI/CD

# .github/workflows/deploy.yml
name: 小程序上线

on:
  push:
    tags:
      - 'v*'   # 打 tag 时触发,如 v1.0.0

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '18'

      - name: Install pnpm
        run: npm install -g pnpm

      - name: Install dependencies
        run: pnpm install

      - name: Build
        run: pnpm build:weapp
        env:
          VITE_CLOUD_ENV: ${{ secrets.CLOUD_ENV_PROD }}

      - name: 写入上传密钥
        run: |
          mkdir -p .keys
          echo "${{ secrets.MINI_PRIVATE_KEY }}" > .keys/private.key

      - name: 上传到微信
        run: pnpm upload
        env:
          MINI_APPID: ${{ secrets.MINI_APPID }}

在 GitHub 仓库 → Settings → Secrets 中配置:

  • CLOUD_ENV_PROD:生产云开发环境 ID
  • MINI_APPID:小程序 AppID
  • MINI_PRIVATE_KEY:上传密钥内容(多行文本)

四、上线前强制检查清单

资质准备

电商类小程序属于**"经营"类目**,审核比普通小程序严格:

必要资质 说明
营业执照 企业主体必须,个人主体无法开通部分功能
微信支付商户号 先开通再审核,否则支付功能无法上线
公司名与小程序名称一致 不一致会被拒
隐私政策 必须在小程序内有独立页面,内容合规

功能检查

  • 只使用微信支付,不能有其他支付方式(支付宝链接等)
  • 隐私政策页面 /pages/user/privacy,内容包含:收集数据项、使用目的、联系方式
  • 客服入口(open-type="contact" 的 Button 或客服链接)
  • 用户协议页面
  • 小程序登录不强制绑定手机号(不能在首页就弹手机号授权)
  • 所有外链跳转使用 web-view 组件,且域名在白名单中

界面检查

  • 去掉开发阶段的 console.log 和调试信息
  • project.config.jsonurlCheck 改回 true
  • 微信开发者工具 → 体验评分 ≥ 60 分
  • 真机预览各主流机型(iPhone 12/15、HUAWEI、小米)

五、电商类常见被拒原因

类别 被拒原因 解决方案
资质 未提供营业执照 补充资质文件
资质 经营范围与类目不符 修改营业执照经营范围或换类目
支付 使用非微信支付 移除所有非微信支付入口
支付 页面有"支付宝"/"银行卡"字样 全局搜索替换
内容 商品涉及违禁品(医疗/烟草等) 移除相关商品
功能 无隐私政策 新增独立隐私政策页面
功能 首页强制手机号授权 改为按需授权(下单时才请求)
功能 外链未配置业务域名 在公众平台配置合法域名白名单
界面 主页面与截图不符 重新提交审核截图

六、版本管理与灰度发布

审核通过后不要立即全量发布,先灰度验证:

微信公众平台 → 版本管理 → 审核版本 → 发布 → 按比例灰度
  ↓
设置灰度比例(如 5%)→ 观察错误上报 → 无异常 → 扩至 100%

快速回滚:在版本管理界面保留上一个正式版本,一键回滚不需要重新审核。


七、错误监控(可选)

接入微信小程序官方错误监控:

// app.ts
onError(error: string) {
  // 上报错误到云函数
  callCloud('monitor', {
    action: 'error',
    error,
    page: Taro.getCurrentPages().slice(-1)[0]?.route,
    timestamp: new Date().toISOString(),
  }).catch(() => {})
}

或使用第三方监控服务(Fundebug、腾讯 Bugly 小程序版)。


微信小程序电商实战 01 技术选型 | 02 脚手架搭建 | 03 NutUI 配置 | 04 云开发环境 | 05 商品模块 | 06 购物车与订单 | 07 微信支付 | 08 用户中心 | 09 性能优化 | 10 上线部署 ← 本文

实操清单

  • pnpm add -D miniprogram-ci,编写 scripts/upload.js 并测试上传成功
  • 在微信公众平台下载上传密钥,加入 .gitignore
  • package.json 加入 release 脚本(build + upload 一步完成)
  • 配置 GitHub Actions 自动部署,推送 tag 时触发
  • 准备营业执照或个人资质文件,在公众平台上传
  • 创建隐私政策页面 /pages/user/privacy,内容包含数据收集说明和联系方式
  • 全局检查:移除 console.log、关闭 urlCheck: false
  • 在微信开发者工具运行「体验评分」,确保 ≥ 60 分
  • CLOUD_ENV_PRODMINI_APPIDMINI_PRIVATE_KEY 配置到 GitHub Secrets
  • 打 tag v1.0.0 触发 CI,在微信公众平台确认上传成功
  • 提交审核,对照「常见被拒原因」检查表逐项排查
  • 审核通过后先灰度 5%,观察 24 小时无异常后全量发布