问题描述:
在配置微信 JS-SDK 时,我遇到了“config:fail, invalid signature”签名无效的错误。尽管我已经根据微信文档和微信校验工具仔细检查了签名的生成过程,但问题依然存在。目前我正在使用测试公众号进行测试,并将测试公众号的 JS 接口安全域名绑定到了本地 IP。以下是生成签名的后端代码和前端使用的截图。请帮忙分析可能导致“config:fail, invalid signature”错误的原因
错误截图:
前端关键代码:
后端node.js关键代码:
请求jspi_ticket接口时的type类型是jsapi
签名的计算过程代码图片:
补充微信h5控制台打印的config配置:
补充几点:
1、请求微信jsapi_ticket的type是jsapi
2、jsapi是有效的
3、使用微信校验工具生成的签名也不行https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
核查一下签名算法!!!
// 1. 先解码 URL
const decodedUrl = decodeURIComponent(url);
// 2. 构建签名字符串(确保使用小写的 noncestr)
const string1 = `jsapi_ticket=${jsapiTicket}&noncestr=${nonceStr}×tamp=${timestamp}&url=${decodedUrl}`;
// 3. 使用 sha1 进行加密
const hash = crypto.createHash("sha1");
hash.update(string1);
return hash.digest("hex");
}
app.post("/h5/getJsSdk", async (req, res) => {
const url = req.body.url;
const nonceStr = Math.random().toString(36).substr(2, 15);
const timestamp = Math.floor(Date.now() / 1000);
// ... 其他代码 ...
const signature = generateSignature(jsapiTicket, nonceStr, timestamp, url);
res.json({
code: 0,
message: "success",
data: {
appId: APPID,
timestamp,
nonceStr,
signature,
url: decodeURIComponent(url), // 返回解码后的 URL
}
});
});
1. 确保 jsapi_ticket 是有效的且未过期
2. 验证测试号的 appId 是否正确配置
3. 检查安全域名配置是否正确
4. 建议开启 debug 模式(已经开启),查看详细的错误信息
5. 使用微信 JS-SDK 签名校验工具进行验证:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
如果按照以上修改后仍然有问题,建议:
1. 在 debug 模式下打印出签名用的所有参数
2. 使用微信官方的签名校验工具验证签名是否正确