Skip to content

微信小程序开发

小程序登录、跳转、码/Scheme、导航、消息、付费能力梳理;末尾附 uni-app 多环境自动切 BaseURL 的实用代码。

一、小程序登录(jscode2session)

  1. 客户端 wx.login → 临时 code(5 分钟有效,可刷新,每次 session_key 变)。
  2. 服务端 GET https://api.weixin.qq.com/sns/jscode2session(appid, secret, js_code, grant_type)。
  3. 返回 session_keyunionidopenid
  • 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(需后台配置,否则全屏)。
  • 服务端:getQRCode(永久,太阳码,总计 10 万)、getUnlimitedQRCode(不限量,1 分钟 5 千)、createQRCode
类型手机浏览器扫站长工具解码
二维码可唤醒小程序可解码
小程序码(太阳码)无法识别不可解码

三种拉起方式均最长 30 天有效(不再永久),每次动态获取;URL Scheme 每天生成上限 50 万。

类型格式 / 示例适用限制 / 说明
URL Schemeweixin://dl/business/?t=TICKET*iOS 直接识别;安卓需中间页重定向每天生成 50 万
URL Linkhttps://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 小时内可主动发任意内容。

九、小程序付费提示

十、uni-app 多环境自动切 BaseURL(envVersion)

放在 api/request.js 顶部,替换原来的 const BaseURL = "..."。 运行时由微信返回当前版本,自动切换 BaseURL——无需注释切换、无需编译配置,发版绝不会连错。

三环境对照

envVersion场景连接地址
release提审发布后的正式版URL_MAP.release(生产域名)
trial体验版URL_MAP.trial(测试穿透)
developHBuilderX 运行 / 预览 / 真机调试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: 日志确认当前环境

© 2026 开发速查