朋友圈分享图必须导出为HTTPS图片URL才能生效,流程为Canvas绘制→生成临时文件→上传至CDN/对象存储→返回可访问HTTPS链接,且需在5秒内完成、尺寸推荐1242×1242px。

朋友圈分享图不能直接用 Canvas 画完就传给 onShareTimeline,必须导出为 HTTPS 图片 URL 才能生效。Canvas 只是生成手段之一,关键在“导出→上传→返回可访问链接”这一闭环。
Canvas 画完后无法直接当 imageUrl 使用
微信对 onShareTimeline 的 imageUrl 字段有硬性要求:必须是 HTTPS 协议、可被微信服务器直连加载的网络地址。Canvas 的 canvas.toDataURL() 返回的是 base64 字符串,canvas.toTempFilePath() 返回的是本地临时路径(如 wxfile://xxx),两者微信均拒绝识别。
- base64 图片会触发 “invalid image url” 错误,卡片降级为默认图标
- 本地 tempFilePath 在朋友圈分享场景下完全无效,甚至不报错,静默失败
- 即使你用
uni.uploadFile上传了临时文件,也必须确保后端返回的是带 HTTPS 域名的完整 URL(如https://cdn.example.com/share-abc123.jpg),不能是相对路径或内网地址
必须走“Canvas → 临时文件 → 上传 → HTTPS URL”四步链
这是目前唯一稳定可行的路径。跳过任意一环,朋友圈卡片都会显示异常。
-
canvas.draw完成后,立刻调用uni.canvasToTempFilePath,注意指定width/height与 canvas 一致,否则截图裁剪错位 - 上传时用
uni.uploadFile,filePath填上一步返回的tempFilePath,name建议固定为file(部分后端只认这个字段) - 后端需将文件存到支持 HTTPS 的 CDN 或对象存储(如腾讯云 COS、阿里云 OSS),并返回可公开访问的 URL;禁止返回 302 跳转链接或带鉴权参数的临时链接(微信不跟随重定向)
- 最终把该 URL 赋值给
onShareTimeline返回对象的imageUrl字段
尺寸和时机限制极易被忽略
朋友圈卡片对图片质量和调用时机极其敏感,不是“能出图”就行。
- 推荐尺寸为 1242×1242 px(正方形),最低不得小于 300×300 px;安卓微信 8.0.33+ 会检测宽高比,非正方形可能被拉伸或居中裁切
-
onShareTimeline必须在用户点击右上角菜单后 5 秒内完成执行——也就是说,Canvas 绘制 + 上传 + 返回 URL 整个流程必须控制在 5 秒内,否则卡片静默回退为纯文字 - 不能在
onLoad或onShow预生成图,必须等用户触发分享行为后再启动绘制;否则时间超限或图片过期 - 若页面含动态数据(如用户昵称、实时价格),务必在
onShareTimeline内实时读取,不要依赖 data 缓存,避免异步未完成就返回空值
真正卡住人的从来不是“怎么画”,而是“画完怎么让微信认”。Canvas 是工具,HTTPS URL 才是通行证;上传不是可选项,是必经关卡。别省那一次 HTTP 请求,否则朋友圈里永远只有小程序默认图标。


















