name: wechat-miniapp-zh displayName: 微信小程序开发助手 slug: wechat-miniapp-zh version: 1.0.0 author: ikun license: MIT language: zh-CN description: | 微信小程序开发的全流程助手——从 appid 申请、原生 / Taro / uni-app 选型、云开发 / 自建后端选型, 到登录鉴权、支付、订阅消息、审核避坑。区别于通用 Web 开发,专攻微信生态特殊性。 覆盖:技术选型、架构设计、关键 API、审核驳回原因 5 大类、安全合规。 触发:用户说 "微信小程序"、"小程序开发"、"Taro"、"uni-app"、"云开发"、"wx.login"、"小程序支付"、"订阅消息"、"审核驳回"。 keywords: ["微信小程序", "小程序开发", "Taro", "uni-app", "云开发", "wx.login", "微信支付", "订阅消息", "小程序审核", "appid", "WXML", "WXSS"]
微信小程序和 Web 开发完全是两个物种:
- 没有 DOM、没有 window、没有 localStorage(有自己的 wx.setStorage)
- 路由不是 react-router / vue-router(是 wx.navigateTo 那一套)
- 没有第三方 npm 包用(90% 的 npm 包都跑不起来)
- 登录、支付、消息全是微信家的 API
- 审核被驳回不告诉你具体哪行错(只给一句"违反 X.X 条款")
这个 skill 帮你: 1. 选型决策:原生 / Taro / uni-app 选哪个 2. 关键 API 速查:登录、支付、订阅消息、wx 全家桶 3. 审核避坑:5 大类驳回原因 + 修复策略 4. 架构设计:云开发 vs 自建后端怎么选
不做的事:不替你写完整业务代码(场景太多);不做 UI 设计;不做支付证书申请那种纯账号工作。
| 原生(WXML/WXSS/JS) | Taro(React 风格) | uni-app(Vue 风格) | |
|---|---|---|---|
| 学习成本 | 低(看官方文档 1 周) | 中(要会 React) | 中(要会 Vue) |
| 开发效率 | 中 | 高(组件化) | 高(生态成熟) |
| 性能 | 最好(原生) | 好(编译后接近原生) | 好 |
| 多端编译 | 只能微信 | ✅ 微信 / 支付宝 / H5 / RN | ✅ 微信 / 支付宝 / 抖音 / H5 / App |
| 调试 | 最稳(官方工具) | 中(多一层编译) | 中(多一层编译) |
| 生态 | 官方组件 | React 生态 | Vue 生态 + DCloud 插件市场 |
| 适合 | 纯微信 / 性能要求高 | React 团队 / 多端 | Vue 团队 / 跨端跨平台 |
是不是只发布微信?
├─ 是 → 团队会 React 吗?
│ ├─ 会 → Taro(更现代)或 原生(更稳)
│ └─ 不会 → 原生(学习成本最低)
└─ 否(要发抖音 / 支付宝 / H5 / App)→
├─ 团队 React → Taro
└─ 团队 Vue → uni-app(多端兼容性最好)
// 1. 拿临时登录凭证
wx.login({
success: async (res) => {
// res.code 5 分钟有效,要立即发给后端
const { openid, session_key } = await fetch('/api/wx/login', {
method: 'POST',
body: JSON.stringify({ code: res.code })
}).then(r => r.json())
// 保存 openid 到本地
wx.setStorageSync('openid', openid)
}
})
// 2. 后端用 code 换 openid(必须服务端做,不能前端)
// GET https://api.weixin.qq.com/sns/jscode2session?
// appid=xxx&secret=xxx&js_code=CODE&grant_type=authorization_code
坑:
- wx.getUserInfo 2021 年起已废弃,必须用 <button open-type="getUserProfile"> 主动触发
- 头像昵称从 2022 年起需要用 <button open-type="chooseAvatar"> 单独获取
- 手机号必须用 <button open-type="getPhoneNumber"> 用户主动授权 → 后端解密
// 前端:调起支付
wx.requestPayment({
timeStamp: '...', // 来自后端
nonceStr: '...',
package: 'prepay_id=...',
signType: 'MD5',
paySign: '...',
success: (res) => { /* 支付成功 */ },
fail: (err) => { /* 支付失败/取消 */ }
})
// 后端流程:
// 1. 创建订单到自己数据库
// 2. 调微信统一下单 API(unifiedorder)
// 3. 拿到 prepay_id,组装支付参数 + sign 给前端
// 4. 监听微信回调(必须验签 + 幂等处理)
// 5. 更新订单状态
坑: - 支付证书申请要 1 周(商户号 → 申请 API 证书 → 下载 → 上传服务器) - 沙箱环境不可信,必须真实测试 - 退款需要再申请退款 API(默认不开通) - 回调一定要做幂等(微信会重试)
// 前端:用户点击触发,请求订阅
wx.requestSubscribeMessage({
tmplIds: ['xxx', 'xxx'], // 后台预先申请的模板 ID
success: (res) => { /* res 里看每个模板是否同意 */ }
})
// 后端:用户操作后发送
POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send
{
"touser": "用户 openid",
"template_id": "xxx",
"page": "pages/order/detail?id=123",
"data": { "thing1": { "value": "您的订单已发货" } }
}
坑: - 订阅消息是一次订阅一次发送(用户每次都要重新订阅) - 模板必须按微信类目申请(涉及行业资质) - 发送时机有严格限制(用户操作后 7 天 / 24 小时)
// 同步(小数据量,<10KB 推荐)
wx.setStorageSync('key', value)
const value = wx.getStorageSync('key')
// 异步(推荐用法)
wx.setStorage({ key, data })
// 单 key 上限 1MB,整个小程序 10MB
app.json 里配 __usePrivacyCheck__: truewx.requirePrivacyAuthorize)| 项 | 要求 |
|---|---|
| 隐私协议 | 必须 + 用户主动同意(2024 起强审) |
| 用户数据收集 | 必须最小化、必须告知 |
| 第三方 SDK | 必须在隐私协议中列出(如友盟、Bugly) |
| 个人小程序 | 不能做电商 / 金融 / 医疗 / 教育(必须企业资质) |
| 内容安全 | 用户输入文字 / 图片必须过 security.msgSecCheck 内容安全 API |
| ICP 备案 | 服务器域名必须备案(境内)+ ICP 证(电商类) |
按问题类型给: - 选型问题 → 输出选型决策表 + 推荐 - API 问题 → 输出代码示例 + 坑提示 - 审核问题 → 输出驳回类型分析 + 修复步骤 - 架构问题 → 输出推荐架构图 + 选型理由
## 你的问题
(复述)
## 推荐方案
(选型 / 架构 / API / 修复)
## 代码示例
```javascript
// 注释清楚,不写废话
不主动写完整业务代码(场景太多);不主动给完整 UI 实现。
这个 Skill 质量较好,针对微信小程序开发者的实际痛点编写,覆盖全面且实用。优势在于内容接地气(审核避坑、支付集成等本土化问题)、代码示例可运行、常见坑点标注清晰。不足之处是缺少示例演示和 FAQ,实际使用时可能需要结合其他资料学习。