微信小程序电商实战 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:生产云开发环境 IDMINI_APPID:小程序 AppIDMINI_PRIVATE_KEY:上传密钥内容(多行文本)
四、上线前强制检查清单
资质准备
电商类小程序属于**"经营"类目**,审核比普通小程序严格:
| 必要资质 | 说明 |
|---|---|
| 营业执照 | 企业主体必须,个人主体无法开通部分功能 |
| 微信支付商户号 | 先开通再审核,否则支付功能无法上线 |
| 公司名与小程序名称一致 | 不一致会被拒 |
| 隐私政策 | 必须在小程序内有独立页面,内容合规 |
功能检查
- 只使用微信支付,不能有其他支付方式(支付宝链接等)
- 隐私政策页面
/pages/user/privacy,内容包含:收集数据项、使用目的、联系方式 - 客服入口(
open-type="contact"的 Button 或客服链接) - 用户协议页面
- 小程序登录不强制绑定手机号(不能在首页就弹手机号授权)
- 所有外链跳转使用
web-view组件,且域名在白名单中
界面检查
- 去掉开发阶段的
console.log和调试信息 -
project.config.json中urlCheck改回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_PROD、MINI_APPID、MINI_PRIVATE_KEY配置到 GitHub Secrets - 打 tag
v1.0.0触发 CI,在微信公众平台确认上传成功 - 提交审核,对照「常见被拒原因」检查表逐项排查
- 审核通过后先灰度 5%,观察 24 小时无异常后全量发布