onShareAppMessage 返回的 shareTicket 为 undefined,是因为 shareTicket 仅在用户从微信群聊卡片点击进入时才存在,且需同时满足:开启 withShareTicket: true、path 为合法页面路径、目标页 onLoad 中通过 options.shareTicket 安全读取;私聊、扫码、非群聊入口均不触发,且有效期仅5分钟。

uni-app 中 onShareAppMessage 返回的 shareTicket 为什么是 undefined
因为微信小程序的 shareTicket 只在「群聊分享」且用户点击进入时才存在,且必须满足两个前提:开启 withShareTicket: true、使用 uni.navigateTo(或类似跳转)携带转发路径,不能用 uni.redirectTo 或页面栈已满导致跳转失败。
-
onShareAppMessage函数返回对象里加withShareTicket: true是必要条件,否则即使分享到群,后续也拿不到票据 - 用户必须从群聊卡片「点击进入」该分享页,单独打开小程序、扫码、私聊转发都不会触发
shareTicket - 目标页面的
onLoad或onShow钩子中,需通过options(不是query)读取shareTicket,格式为options.shareTicket - 真机调试必须用「微信开发者工具」或真机预览 + 群聊测试,模拟器和 H5 完全不支持
如何在 onShareAppMessage 正确配置并触发群分享
直接返回带 withShareTicket: true 的对象即可,无需额外调用 API;但注意路径必须是合法页面路径,且不能含非法字符或参数过长。
onShareAppMessage() {
return {
title: '一起参与活动',
path: '/pages/group/activity?id=123',
withShareTicket: true // 必须显式写上
}
}
-
path必须以/开头,且对应真实存在的页面(如pages/group/activity.vue) - 不要在
path中拼接shareTicket—— 微信会自动追加,你只需接收 - 如果分享后进群卡片点开没反应,检查是否开启了「获取群信息」权限(
scope.groupInfo不需要主动申请,但需在manifest.json的微信配置里勾选「群分享」能力)
在目标页面的 onLoad 中安全读取 shareTicket
shareTicket 不是 always 存在,它只出现在群聊分享跳转的首次加载中,且仅在 options 里,不在 query 或 getOpenerEventChannel 中。
onLoad(options) {
if (options.shareTicket) {
// 这里可以调用 uni.getShareInfo 获取群信息
uni.getShareInfo({
shareTicket: options.shareTicket,
success: res => {
console.log('encryptedData:', res.encryptedData)
console.log('iv:', res.iv)
},
fail: err => {
// 常见失败:shareTicket 过期(超过 5 分钟)、签名失败、未在群内打开
console.error('getShareInfo fail:', err)
}
})
}
}
-
shareTicket有效期仅 5 分钟,务必及时调用uni.getShareInfo -
uni.getShareInfo返回的是加密数据,需后端配合解密(使用session_key和iv)才能拿到openGId - 不要在
onShow里反复尝试读取 ——shareTicket只在首次onLoad有效,二次进入页面时options.shareTicket为空
为什么 uni.getShareInfo 调用失败或返回空 encryptedData
最常见原因是 shareTicket 已失效或来源非法,而不是代码写错;微信对群票据校验极严,任何环节出问题都会静默失败。
- 用户不是从群聊卡片点进来的(比如复制链接再打开)→
shareTicket无效 - 距离分享时间超过 5 分钟 → 微信服务端直接拒绝解密
- 小程序未发布(体验版/开发版)且未在「微信公众平台 > 小程序管理 > 功能管理」中开通「群分享」能力 →
getShareInfo会报错errCode: -1 - 后端解密时用了错误的
session_key(必须是当前用户本次登录态对应的 key,不能复用旧 key)
真正能拿到 openGId 的地方只有后端解密结果,前端永远看不到明文群 ID —— 这是微信的设计约束,不是 uni-app 的限制。



















