微信小程序实战面经
实战高频考点
1. 登录与鉴权完整流程
前端 wx.login() → 获取 code
↓
发送 code 到自己的后端
↓
后端调用微信接口:code2Session
→ 返回 openid + session_key + unionid
↓
后端生成自定义 token,存 Redis
↓
前端存 token 到 storage,后续请求携带
常见问题
session_key有有效期,需定期调用checkSession验证wx.getUserInfo已废弃,用wx.getUserProfile(需用户触发)unionid需满足:已关联公众号/小程序,或绑定开放平台
2. 支付流程
1. 前端发起支付请求到自己后端
2. 后端调用微信统一下单接口 → 返回 prepay_id
3. 后端用 prepay_id 签名生成支付参数
4. 前端调用 wx.requestPayment({ timeStamp, nonceStr, package, signType, paySign })
5. 用户支付完成 → 微信回调后端 → 后端更新订单状态
6. 前端 success 回调只做提示,不以此为支付成功依据(以后端通知为准)
3. 自定义组件高级用法
behaviors(类似 mixins)
const loginBehavior = Behavior({
data: { isLogin: false },
methods: {
checkLogin() { /* ... */ }
},
lifetimes: { attached() { this.checkLogin() } }
})
Component({
behaviors: [loginBehavior],
// 自动拥有 loginBehavior 的数据和方法
})
抽象节点(类似 slot 的高阶用法)
{ "componentGenerics": { "selectable": { "default": "./default-item" } } }
4. 小程序云开发
- 云函数:Node.js 环境,免鉴权调用微信 API,自动获取 openid
- 云数据库:文档型数据库,支持实时监听
- 云存储:文件上传下载,
wx.cloud.uploadFile - 云调用:云函数中调用微信开放能力(发送订阅消息等)
// 云函数端
exports.main = async (event, context) => {
const { openid } = context.OPENID // 自动获取,无需手动传
return db.collection('users').where({ _openid: openid }).get()
}
5. 分包策略详解
{
"subpackages": [
{ "root": "packageA", "pages": ["pages/cat", "pages/dog"] },
{ "root": "packageB", "pages": ["pages/apple"] }
],
"preloadRule": {
"pages/index": { "network": "all", "packages": ["packageA"] }
}
}
- 独立分包:可不依赖主包运行(分享页、广告页)
- 分包预加载:用户在某页面时提前加载指定分包
6. 调试与发布
- vconsole:小程序内置调试面板,
wx.setEnableDebug({ enableDebug: true }) - 抓包:Charles/Whistle 配合代理,需在微信开发者工具开启
- 体验版/预览版:真机测试不经过审核
- 灰度发布:后台配置按比例放量
7. 高频面试题
- 小程序如何做埋点? 封装统一 Page/Component,重写 onShow/tap 等生命周期
- 如何实现全局错误监控?
App.onError+wx.onError捕获未处理异常 - 小程序能访问 cookie 吗? 不能,用
wx.setStorageSync替代 - 如何做长连接?
wx.connectSocketWebSocket API - 页面间传参的方式? URL 参数、globalData、EventBus、本地存储