微信分享内容管理
详情介绍
微信分享(WeChatShare)
自定义微信内分享卡片的标题、描述、小图标(缩略图)与链接,同时覆盖:
- 分享给朋友(微信会话)
- 分享到朋友圈(Timeline)
效果预览

左:未处理时的原始链接样式(长标题 + 裸链接 + 默认链接图标)
右:启用本插件后的自定义卡片(自定义标题 + 描述摘要 + 自定义缩略图)
目录结构
WeChatShare/
├── plugin.json 插件元信息
├── WeChatSharePlugin.php 插件入口(配置项、前台注入)
├── routes.php 前台签名接口路由
├── controller/Signature.php 签名接口(域名白名单校验)
├── service/WxSdk.php access_token / jsapi_ticket / SHA1 签名
├── static/
│ ├── jweixin-1.6.0.js 微信 JS-SDK
│ └── wechat-share.js 前台注入脚本
├── icon.svg 插件图标
└── preview.png 效果截图安装
- 后台 → 应用中心 → 本地插件 → 找到「微信分享」→ 安装(或直接刷新插件列表)。
- 安装后
static/会复制到public/static/WeChatShare/。 - 打开「微信分享」的配置页,填写公众号
AppID/AppSecret并保存。 - 在微信公众平台完成域名配置(必须,否则
wx.config会报invalid signature):
- 设置与开发 → 公众号设置 → 功能设置 → JS接口安全域名 → 填写站点域名(不带 http://、不带路径)。
- 若使用测试号,则在测试号管理页配置「JS接口安全域名」。
- 同时确认「IP白名单」已加入服务器出口 IP,否则取 access_token 会报 40164。
- 手机微信打开任意前台页面,右上角「···」查看分享卡片。
配置项
| 配置 | 说明 |
|---|---|
| 启用微信分享 | 总开关,关闭后前台不注入脚本 |
| 公众号 AppID | 公众号开发信息中的 AppID |
| 公众号 AppSecret | 与 AppID 配套;保存后留空表示不修改 |
| 分享标题 | 「分享给朋友」标题;留空取当前页面 <title> |
| 分享描述 | 「分享给朋友」描述;留空取 meta[name=description],仍为空时截取正文前 80 字 |
| 分享缩略图 | 完整图片地址(http/https),建议 ≥300×300;留空按选择器抓取正文首图 |
| 分享链接 | 留空分享当前页面地址;填写后全站统一分享该地址 |
| 朋友圈标题 | 「分享到朋友圈」标题;留空沿用分享标题 |
| 分享给朋友 | 是否接管「发送给朋友」卡片 |
| 分享到朋友圈 | 是否接管「分享到朋友圈」卡片 |
| 仅在微信内生效 | 仅 UA 含 MicroMessenger 时加载脚本,默认开启 |
| 正文图片选择器 | 抓取首图用的 CSS 选择器,多个用逗号分隔 |
| JS-SDK 地址 | 默认插件内置 jweixin-1.6.0.js,可改为官方 CDN |
| 额外允许的分享域名 | 签名接口默认只接受当前访问域名;多域名/裸域与 www 并存时在此填写,支持 *.example.com |
| 调试模式 | 开启后前台 alert 输出 wx.config 错误,便于排查 |
实现原理
WeChatSharePlugin::renderAssets()由布局的{:pluginassets()} 输出 window.WECHATSHARE_CFG与wechat-share.js。- 脚本在微信内加载 JS-SDK,POST 当前页面 URL(已去掉
#片段)到签名接口wechat-share/signature。 - 服务端
WxSdk取accesstoken(stabletoken优先,失败回退cgi-bin/token)→ 取jsapi_ticket→ 按
jsapi_ticket=..&noncestr=..×tamp=..&url=.. 字典序拼接后 SHA1,返回 appId/timestamp/nonceStr/signature。
accesstoken 与 jsapiticket 均写入 Cache(有效期减 300 秒),token 失效时自动刷新重试一次。
- 前台
wx.config成功后,在wx.ready内调用:
- wx.updateAppMessageShareData({title, desc, link, imgUrl}) —— 分享给朋友
- wx.updateTimelineShareData({title, link, imgUrl}) —— 分享到朋友圈
低版本微信回退到 onMenuShareAppMessage / onMenuShareTimeline。
- 监听
pjax:end/community:pjax/popstate,站内无刷新跳转后重新签名并覆盖新页面的标题与首图。
常见问题
签名报 invalid signature
- 公众号「JS接口安全域名」是否包含当前域名(含
www区别)。 - 参与签名的 URL 必须与实际访问地址完全一致(含查询参数),且不能带
#片段;脚本已自动处理。 - AppSecret 是否填错;修改后清一次缓存再试。
config:invalid url domain
- 当前域名不在「JS接口安全域名」内,或填的是带协议/路径的地址。
取 access_token 报 40164 / 61004
- 服务器出口 IP 未加入公众号「IP白名单」。
图片不显示
- 微信要求缩略图可公网访问;
data:/blob:地址会被忽略。 - 建议 300×300 以上,比例接近 1:1 或 4:3。
朋友圈没有描述
- 朋友圈卡片本身只支持标题 + 图片,描述仅「分享给朋友」生效,这是微信限制。
分享链接与当前页不一致
- 检查是否在配置里填了「分享链接」,填写后全站统一使用该地址。
更新记录 (1)
-
v1.0.0
2026-10-21
正式发布
QQ官方交流群