微信分享

微信分享内容管理

版本 v1.0.0· 胡思乱想 · 2 次获取 · 内容管理
自定义微信内分享卡片的**标题、描述、小图标(缩略图)与链接**
¥1.00抵扣
一次购买,永久使用

详情介绍

微信分享(WeChatShare)

自定义微信内分享卡片的标题、描述、小图标(缩略图)与链接,同时覆盖:

  • 分享给朋友(微信会话)
  • 分享到朋友圈(Timeline)

效果预览

![效果对比](preview.png)

左:未处理时的原始链接样式(长标题 + 裸链接 + 默认链接图标)

右:启用本插件后的自定义卡片(自定义标题 + 描述摘要 + 自定义缩略图)

目录结构

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                     效果截图

安装

  1. 后台 → 应用中心 → 本地插件 → 找到「微信分享」→ 安装(或直接刷新插件列表)。
  2. 安装后 static/ 会复制到 public/static/WeChatShare/。
  3. 打开「微信分享」的配置页,填写公众号 AppID / AppSecret 并保存。
  4. 在微信公众平台完成域名配置(必须,否则 wx.config 会报 invalid signature):

  - 设置与开发 → 公众号设置 → 功能设置 → JS接口安全域名 → 填写站点域名(不带 http://、不带路径)。

  - 若使用测试号,则在测试号管理页配置「JS接口安全域名」。

  - 同时确认「IP白名单」已加入服务器出口 IP,否则取 access_token 会报 40164。

  1. 手机微信打开任意前台页面,右上角「···」查看分享卡片。

配置项

配置说明
启用微信分享总开关,关闭后前台不注入脚本
公众号 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 错误,便于排查

实现原理

  1. WeChatSharePlugin::renderAssets() 由布局的 {:pluginassets()} 输出 window.WECHATSHARE_CFG 与 wechat-share.js。
  2. 脚本在微信内加载 JS-SDK,POST 当前页面 URL(已去掉 # 片段)到签名接口 wechat-share/signature。
  3. 服务端 WxSdk 取 accesstoken(stabletoken 优先,失败回退 cgi-bin/token)→ 取 jsapi_ticket → 按

  jsapi_ticket=..&noncestr=..×tamp=..&url=.. 字典序拼接后 SHA1,返回 appId/timestamp/nonceStr/signature。

  accesstoken 与 jsapiticket 均写入 Cache(有效期减 300 秒),token 失效时自动刷新重试一次。

  1. 前台 wx.config 成功后,在 wx.ready 内调用:

  - wx.updateAppMessageShareData({title, desc, link, imgUrl}) —— 分享给朋友

  - wx.updateTimelineShareData({title, link, imgUrl}) —— 分享到朋友圈

  低版本微信回退到 onMenuShareAppMessage / onMenuShareTimeline。

  1. 监听 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官方交流群 QQ官方交流群