要在微信里实现自定义分享链接,本质上就是“后端出票、前端验票”的过程。整个链路不算太复杂,但微信的权限和签名机制卡得很严,只要哪一步对不上,分享出去轻则变回默认样式,重则直接失效。实际落地时,有几个关键环节需要逐个盯紧。
首先有两个前提条件。公众号必须经过微信认证,个人号一般拿不到完整的 JS-SDK 接口权限,企业主体认证是基本要求。另外,还要有一个已经完成 ICP 备案的域名,并在微信公众平台后台的“JS 接口安全域名”里完成绑定。域名没备案或者没配置,后面签名再正确也没用。

后端的核心任务是生成签名。先在微信公众平台“开发—基本配置”里拿到 AppID 和 AppSecret,这是所有请求的凭据。然后用这两个参数向微信服务器换取 access_token:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
这个 token 有效期为 7200 秒,期间可以复用,服务端一定要做好缓存,别每次都重新去微信取。拿到 access_token 后,再用它换取 jsapi_ticket:
https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=ACCESS_TOKEN
jsapi_ticket 同样有效 7200 秒,建议全局缓存。ticket 拿到手,才进入真正的签名环节。

签名时,需要把 jsapi_ticket、随机字符串 nonceStr、时间戳 timestamp 以及当前页面的 URL 拼起来,按微信要求的字典序排列,最后用 sha1 加密。这里最容易踩坑的是 URL:必须是用户打开页面时的完整地址,最好先经过 encodeURIComponent 处理,多一个斜杠、少一个参数,签名都会失败。实际开发中,很多团队会把当前页面 URL 传给后端,让后端统一生成签名、时间戳和随机串,前端只负责调用,这样出错的几率会小很多。
前端的工作相对集中。先在页面里引入微信 JS-SDK,脚本地址是 https://res.wx.qq.com/open/js/jweixin-1.x.x.js,版本号会随微信更新,上线前最好确认一下最新地址。引入后,用后端返回的 AppID、timestamp、nonceStr 和 signature 调用 wx.config 进行权限校验,相当于告诉微信:当前页面有权调用分享接口。校验通过后,把分享逻辑写在 wx.ready 里,比如用 wx.onMenuShareTimeline 设置朋友圈的标题、链接和缩略图,用 wx.onMenuShareAppMessage 设置转发给好友时的标题、描述、链接和图标。如果需要分享到 QQ、微博等场景,微信也提供了对应接口,可以一并配置。
最后再说几个容易翻车的地方。签名是有有效期的,过期后分享一定会失败,所以服务端缓存要设置合理的刷新机制,最好留一点提前量。另外,access_token 和 jsapi_ticket 的接口都有频率限制,反复调用会被微信限流,缓存不只是为了性能,更是为了避免被封。调试阶段建议打开 JS-SDK 的 debug 模式,这样在微信开发者工具或真机里能看到具体报错;但上线前一定要记得关掉,否则会影响用户体验。真机测试时,如果代码已经更新了,分享却还是老样子,多半是微信缓存作祟,清理一下手机微信缓存再试。
把这些环节串起来,基本就能实现一个稳定可用的微信自定义分享。整个过程考验的不是某个单点技术,而是前后端配合、权限配置和缓存策略是否足够细致。只要签名、域名、权限三者都正确,分享出来的卡片就会按照你设定的标题、图标和链接展示。
Se Connecter Maintenant