JS-SDK 签名
用到这些能力时才需要 JS-SDK:自定义分享卡片、图片选择、订阅消息授权开放标签。
域名名额
- 调用 JS-SDK 的页面 host 必须在公众号的「JS 接口安全域名」里(共 5 条,需精确到子域,逐个添加)。
- 因此站点里凡是只为了"攒订阅额度"的引导页,建议直接放到中台:
wx.onzx.cn只占用 1 条名额,所有站点共用。 - 验证文件(
MP_verify_xxx.txt)与网页授权域名共用,不用重复上传。
POST /api/v1/js/config
{ "url": "https://vip.onzx.cn/me" }
{ "ok": true, "data": {
"appId": "wx…", "timestamp": 1760000000, "nonceStr": "…", "signature": "sha1…",
"jsApiList": ["checkJsApi","updateAppMessageShareData","updateTimelineShareData","chooseImage","wx-open-subscribe"],
"url": "https://vip.onzx.cn/me",
"notice": "当前页面 URL 与签名 URL 必须逐字符一致…"
} }
签名 URL 必须与浏览器地址栏完全一致:含 query、不含
# 之后的片段。
安卓上 SPA 路由变化不会重新签名,这是 invalid signature 的头号成因 —— 单页应用请在每次进入需要 JS-SDK 的页面时重新取签名。
页面里怎么用
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
fetch('/api/v1/js/config', { /* 站点服务端代理一层,别把密钥暴露到前端 */ })
.then(r => r.json()).then(j => {
wx.config({ debug: false, appId: j.data.appId, timestamp: j.data.timestamp,
nonceStr: j.data.nonceStr, signature: j.data.signature,
jsApiList: ['updateAppMessageShareData'], openTagList: ['wx-open-subscribe'] });
wx.ready(function () {
wx.updateAppMessageShareData({ title: '…', desc: '…', link: '…', imgUrl: '…' });
});
wx.error(function (e) { console.warn('wx.config 失败', e); });
});
</script>
签名接口需要站点密钥,不能在前端直接调:请在站点服务端做一个转发路由(/site/jsconfig → 调中台 → 只回传
appId/timestamp/nonceStr/signature 四个字段)。
合规提醒
- 分享文案与图片不能诱导分享("分享后才能查看/领取"是明确违规,会导致接口被封)。
- 订阅授权弹窗必须由用户主动点击触发,不得默认勾选、不得与其他操作捆绑。
本页内容随代码一起版本化(V0.1.0)。发现文档与实际行为不一致,请当缺陷报告。