主题
微信小程序开发
小程序登录、跳转、码/Scheme、导航、消息、付费能力梳理;末尾附 uni-app 多环境自动切 BaseURL 的实用代码。
一、小程序登录(jscode2session)
- 客户端
wx.login→ 临时 code(5 分钟有效,可刷新,每次 session_key 变)。 - 服务端
GET https://api.weixin.qq.com/sns/jscode2session(appid, secret, js_code, grant_type)。 - 返回
session_key、unionid、openid。
- openid 永久不变;session_key 标记登录态,一般用自定义 token 控制。
- access_token 是小程序访问微信服务的鉴权标识(2 小时,测试/生产公用会冲突)。建议用
getStableAccessToken(官方推荐),但不能解决测试生产互踢。
二、小程序跳转 H5(web-view)
- H5 必须 https,需配置业务域名下载校验文件。
- 跳转:
wx.navigateTo到 web-view 页,src传 encodeURIComponent 的 h5Url。 - 小程序内嵌公众号 H5(
jweixin-1.3.2.js)支持图像/音频/位置/扫一扫等,不支持支付/分享/界面操作。 - 预览/真机调试是瞬态镜像;HBuilder 改代码手机端需重新扫码。
三、小程序跳转小程序
- 无关联同一公众号限制,数量限制 10 个;中间弹用户授权框。
wx.navigateToMiniProgram({ appId, path, envVersion:'release', success })。- 拉起半屏
openEmbeddedMiniProgram(需后台配置,否则全屏)。
四、小程序码 / 二维码 / Short Link
- 服务端:
getQRCode(永久,太阳码,总计 10 万)、getUnlimitedQRCode(不限量,1 分钟 5 千)、createQRCode。
| 类型 | 手机浏览器扫 | 站长工具解码 |
|---|---|---|
| 二维码 | 可唤醒小程序 | 可解码 |
| 小程序码(太阳码) | 无法识别 | 不可解码 |
五、URL Scheme / URL Link / Short Link
三种拉起方式均最长 30 天有效(不再永久),每次动态获取;URL Scheme 每天生成上限 50 万。
| 类型 | 格式 / 示例 | 适用 | 限制 / 说明 |
|---|---|---|---|
| URL Scheme | weixin://dl/business/?t=TICKET* | iOS 直接识别;安卓需中间页重定向 | 每天生成 50 万 |
| URL Link | https://wxaurl.cn/*TICKET* | 标准 http,官方提供默认 H5 中间页 | — |
| Short Link | #小程序://... | 公众号图文可嵌入 | 仅电商类可生成,菜单不可配 |
六、H5 拉起小程序
- 微信环境:
wx-open-launch-weapp开放标签(需 wx.config 注入x-open-launch-app)。 - 微信外:
URL Scheme/URL Link/Short Link。 - web-view 内嵌 H5:
wx.miniProgram.navigateTo/postMessage(消息在退回/销毁/分享/复制链接时拿到)。 - 小程序框架逻辑层非浏览器,无 window/document;
getApp()、getCurrentPages();以 Sync 结尾为同步 API。
七、小程序导航 API
| 方法 | 行为 |
|---|---|
navigateTo | 保留当前页,跳转到非 tabBar 页 |
redirectTo | 关闭当前页,跳转 |
switchTab | 跳转到 tabBar 页 |
reLaunch | 关闭所有页,跳转 |
八、微信消息能力(小程序侧)
- 小程序订阅消息:收到「服务通知」,卡片跳小程序;模板后台配置。
- 模板消息(服务号):突破 4 条限制,但极难获批,新应用推荐一次性订阅消息。
- 订阅消息前端:
wx.requestSubscribeMessage({ tmplIds }),需用户点击场景触发(勿初始化直接弹)。 - 客服消息:用户互动后 48 小时内可主动发任意内容。
九、小程序付费提示
- 手机号快速验证组件 0.03 元/次;实时验证 0.04 元/次(计费标准以微信支付最新公布为准,详见:https://pay.weixin.qq.com/docs/merchant/development/real-time-auth/)。
- 微信支付 2024 年起对部分场景调整费率,具体以商户平台最新公告为准。
十、uni-app 多环境自动切 BaseURL(envVersion)
放在
api/request.js顶部,替换原来的const BaseURL = "..."。 运行时由微信返回当前版本,自动切换 BaseURL——无需注释切换、无需编译配置,发版绝不会连错。
三环境对照
| envVersion | 场景 | 连接地址 |
|---|---|---|
release | 提审发布后的正式版 | URL_MAP.release(生产域名) |
trial | 体验版 | URL_MAP.trial(测试穿透) |
develop | HBuilderX 运行 / 预览 / 真机调试 | LOCAL_URL(注释切换,默认穿透) |
同一个发行包,体验版打开返回
trial、提审上线后正式版打开返回release,自动切地址,无需发两个包。 envVersion 取值:HBuilderX「运行」=develop;上传体验版 =trial;提审发布后 =release。
代码
js
// 接口地址:环境由 envVersion 自动判定,无需注释切换
// release 正式版 → 生产域名;trial 体验版 → 测试穿透;develop 开发版 → LOCAL_URL
const URL_MAP = {
release: 'https://gansutuoyu.cn/org/server', // 正式生产域名(按项目替换)
trial: 'http://areweb.eatuo.com:8891/org/server', // 体验版/测试 穿透
}
// 本地开发(开发版)联调地址:取消对应行注释、注释掉默认行即可,仅影响开发版
const LOCAL_URL = 'http://areweb.eatuo.com:8891/org/server' // 默认:测试穿透
// const LOCAL_URL = 'http://192.168.3.72:81/org/server' // dev
// const LOCAL_URL = 'http://192.168.4.132:38080' // 陶璐
// const LOCAL_URL = 'http://192.168.4.178:38080' // 张明辉
// const LOCAL_URL = 'http://192.168.4.93:38080' // 宋江峰
// const LOCAL_URL = 'http://192.168.3.172:38080' // 张数数
// const LOCAL_URL = 'http://192.168.4.22:38080' // 柴培炀
// const LOCAL_URL = 'http://192.168.4.44:38080' // 李福茹
// const LOCAL_URL = 'http://192.168.4.59:38080' // 尹佳秀
// const LOCAL_URL = 'http://192.168.3.181:38080' // 苏哲
// 当前微信运行环境:'develop' | 'trial' | 'release',非微信端默认 develop
let _envVersion = 'develop'
// #ifdef MP-WEIXIN
_envVersion = uni.getAccountInfoSync().miniProgram.envVersion
console.log('环境_envVersion:', _envVersion)
// #endif
const BaseURL = _envVersion === 'release'
? URL_MAP.release
: _envVersion === 'trial'
? URL_MAP.trial
: LOCAL_URL // develop使用要点
- 改本地联调地址:在
LOCAL_URL列表取消对应行注释、注释掉默认行(仅影响开发版) - 上线:
URL_MAP.release填正式生产域名;未上线可留''占位(正式版请求会失败,避免误上线连测试服) - 按项目替换:
release/trial的域名端口、LOCAL_URL列表,按各项目实际填 - 验证:运行后看控制台
环境_envVersion:日志确认当前环境