uni-app调用微信卡包接口前必须确认的3件事:1.小程序已开通“卡券”类目并配置合法域名;2.后端提供有效的card_id和对应用户的唯一code;3.运行环境为真机微信(开发者工具不支持,H5/App端不可用)。

uni-app调用微信卡包接口前必须确认的3件事
微信小程序卡券(卡包)功能无法直接通过 uni-app 的 API 调用,uni.openCard 是唯一官方支持的对接入口,但它只负责“打开已领取的卡券”,不处理创建、发放、核销等后端逻辑。真正要实现“发卡→用户领卡→进卡包→核销”,你得靠微信原生能力 + 后端配合,uni-app 只能做轻量桥接。
- 微信侧要求:小程序必须开通“卡券”类目(在小程序后台「开发管理 → 接口设置」中添加
<a href="https://www.php.cn/link/5c2ef9d8092bde26ff170b873741ba15">https://www.php.cn/link/5c2ef9d8092bde26ff170b873741ba15</a>域名,并在「功能列表」中申请开通「卡券」服务) - 后端必须持有有效的
access_token和card_id(由微信卡券后台创建并返回),uni-app 本身无法生成或管理卡券 - 用户领卡动作必须发生在微信环境内(
uni.getProvider检测到weixin才能调用),H5 或 App 端完全不可用
如何用 uni.openCard 正确打开用户已领取的卡券
uni.openCard 不是“领卡”,而是“跳转到微信卡包中展示某张已归属该用户的卡”。它需要两个关键参数:cardId 和 code(注意不是 access_token)。这个 code 是用户领卡后微信返回的唯一凭证,必须由你的后端在发放环节保存并透传给前端。
uni.openCard({
cardList: [{
cardId: 'pbLatjg4vQf10z7y96b2YkZaX7wA',
code: '1234567890123456' // 必须是该用户+该卡ID对应的合法code
}],
success: res => console.log('打开成功'),
fail: err => console.log('失败', err.errMsg) // 常见:errCode 10003 表示 code 无效或过期
});
-
code有效期默认为3个月,且仅对该cardId+ 该用户 openid 有效,不能复用 - 如果用户从未领过这张卡,调用
uni.openCard会静默失败(fail 回调触发,但无明确提示) - 多张卡可批量传入
cardList,但每张都需独立有效的code
为什么不能用 uni.request 直接调用微信卡券下发接口
微信卡券下发(如 <a href="https://www.php.cn/link/5c2ef9d8092bde26ff170b873741ba15/card/pay/activate">https://www.php.cn/link/5c2ef9d8092bde26ff170b873741ba15/card/pay/activate</a> 或 /card/code/deposit)全部要求使用 access_token + POST + JSON 请求体,且必须携带 Authorization: Bearer {access_token} 或拼在 URL 中。uni-app 的 uni.request 在微信小程序环境下默认不支持自定义 header 中的 Authorization 字段(微信基础库限制),即使加上也会被过滤。
name wechat-article-writer-pro description 微信公众号文章完整生成技能(专业版)。输入主题即自动完成:信息调研、文章撰写(含章节配图)、5个备选爆款标题、封面图生成、带格式排版的DOCX文档输出。触发词:写公众号文章、生成公众号内容、做微信推文、公众号文章完整版。 agent_created true 微信公众号文章完整生成技能(专业版) 概述 本技能提供微信公众号文章从主题到成品的完整生成流程,在基础版之上增加:章节配图、DOCX 格式输出(含彩色重点文字和表格
- 替代方案只有后端代理:前端把必要参数(如用户 openid、card_id、激活手机号等)传给自己的服务器,由后端用服务号或小程序后台的
access_token完成真实请求 - 切勿尝试在前端拼接
access_token到 URL 发起请求——token 泄露风险极高,且微信会校验 referer 和 IP 白名单 - 小程序端能做的“领卡”动作,实际是跳转微信提供的领卡链接:
<a href="https://www.php.cn/link/045ce2e6853c2a1183f06fb5c0ed0850">https://www.php.cn/link/045ce2e6853c2a1183f06fb5c0ed0850</a>},但该链接需后端生成(调用/card/mpnews/gethtml或类似接口)
容易被忽略的兼容性与调试陷阱
真机调试时,uni.openCard 在开发者工具里永远返回 fail sys:fail not support —— 这是正常现象,工具不模拟卡包环境,必须用真机扫码测试。
- iOS 微信 8.0.30+ 对卡券跳转有更严格校验:若
cardId格式错误(比如少一位、含非法字符),不会报错,而是直接白屏卡住;建议用正则^pbLat[a-zA-Z0-9]{24}$预检 - Android 下若用户未安装微信最新版,可能提示“该功能暂不可用”,实际是微信客户端版本太低(需 ≥ 7.0.12)
- 卡券核销必须由商户后台调用
/card/code/consume,小程序端无法主动核销;前端只能通过uni.getNetworkType判断是否在线,再触发后端核销请求
微信卡券不是“前端接入一个 API 就完事”的功能,它的核心链路(创建卡券 → 发放 → 领取 → 展示 → 核销)里,uni-app 最多承担 20% 的展示和跳转职责,剩下全依赖后端与微信服务端的稳定通信。别在 main.js 里反复试 uni.openCard,先确认后端有没有给你返回正确的 code。


















