# 微信JSSDK签名验证异常工单
## 1. 问题概述
**问题类型**: JSSDK签名验证异常
**问题描述**: 在使用微信开放标签`wx-open-launch-weapp`跳转小程序时,JSSDK签名验证持续失败,即使前后端签名参数完全一致,微信客户端仍返回`invalid signature`错误。
## 2. 环境信息
### 2.1 基础环境
- **微信版本**: 最新正式版(多个版本测试)
- **操作系统**: iOS/Android
- **网页域名**: `https://aitcyt.com`
- **小程序AppID**: `wxa8277f37d1cbd9c7`
### 2.2 技术栈
- 前端: HTML5 + 微信JSSDK 1.6.0
- 后端: Java Spring Boot
- 签名算法: SHA1
## 3. 问题详细描述
### 3.1 现象表现
1. **签名验证失败**: 即使前后端参数完全一致,JSSDK配置仍返回`invalid signature`
2. **参数一致性验证**: 前后端timestamp和nonce参数完全匹配
3. **异常行为**: 微信JSSDK在`realAuthUrl`中显示两个相同的URL
### 3.2 关键日志证据
#### 前端日志:
```
[14:54:45] 签名接口 - 返回数据: {
"data": {
"signature": "559cdeff53a575965ec39431bff2fa784f274236",
"appId": "wxa8277f37d1cbd9c7",
"nonceStr": "cnRM8cefGjFT2fHt",
"timestamp": 1761375266
},
"code": 1,
"message": "获取JSSDK签名成功"
}
[14:54:46] JSSDK错误 - 初始化失败: {
"realAuthUrl": [
],
"errMsg": "config:invalid signature"
}
```
#### 后端日志:
```
【GetJSSDK-URL参数提取】从URL中提取的参数: {
redirect=signIn,
activityId=30,
nonce=cnRM8cefGjFT2fHt,
env_version=release,
timestamp=1761375266
}
【GetJSSDK-签名参数生成】核心参数:
nonceStr=cnRM8cefGjFT2fHt(长度:16,来源=URL),
timestamp=1761375266(秒级时间戳,来源=URL)
【GetJSSDK-签名生成】SHA1签名结果:559cdeff53a575965ec39431bff2fa784f274236(长度:40)
```
## 4. 技术排查详情
### 4.1 已排除的问题
✅ **参数不一致**: 前后端timestamp和nonce完全一致
✅ **时间戳格式**: 使用秒级时间戳,符合微信要求
✅ **URL编码**: URL参数未包含特殊字符,无需编码
✅ **签名算法**: SHA1算法正确实现,签名长度40位
✅ **jsapi_ticket**: 有效且未过期
✅ **URL一致性**: 签名URL与当前页面URL完全一致
### 4.2 异常现象分析
1. **realAuthUrl重复**: 错误信息中`realAuthUrl`数组包含两个相同的URL
2. **参数完全匹配**: 所有签名参数前后端完全一致
3. **签名验证拒绝**: 即使参数正确,微信客户端仍拒绝签名
## 5. 复现步骤
### 5.1 标准复现流程
2. 页面自动请求JSSDK签名
3. 后端返回签名参数(与URL参数一致)
4. 前端调用`wx.config`配置JSSDK
5. 微信客户端返回`invalid signature`错误
### 5.2 测试用例
```javascript
// 前端配置
wx.config({
debug: false,
appId: 'wxa8277f37d1cbd9c7',
timestamp: 1761375266,
nonceStr: 'cnRM8cefGjFT2fHt',
signature: '559cdeff53a575965ec39431bff2fa784f274236',
jsApiList: ['checkJsApi'],
openTagList: ['wx-open-launch-weapp']
});
```
## 6. 请求协助内容
### 6.1 具体排查请求
1. **验证机制分析**: 请微信团队协助分析JSSDK签名验证的具体逻辑
2. **缓存机制**: 检查是否存在客户端缓存导致签名验证异常
3. **realAuthUrl重复**: 分析为何错误信息中会出现重复URL
4. **环境限制**: 确认当前环境是否存在特殊限制
### 6.2 期望解决方案
1. **根本原因**: 希望了解签名验证失败的具体技术原因
2. **修复建议**: 获得官方的修复建议或解决方案
3. **验证测试**: 希望微信团队能在其测试环境中复现并验证
## 7. 附加信息
### 7.1 相关代码片段
```java
// 后端签名生成核心逻辑
String signStr = String.format("jsapi_ticket=%s&noncestr=%s×tamp=%d&url=%s",
jsapiTicket, nonceStr, timestamp, url);
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(signStr.getBytes(StandardCharsets.UTF_8));
```
### 7.2 测试数据
- **测试时间**: 2025-10-25 14:54:45
- **测试用户**: 多个微信用户测试均复现
- **网络环境**: 不同网络环境(WiFi/4G/5G)测试结果一致
---
**备注**: 此问题已影响我们的小程序跳转功能正常使用,恳请微信团队优先处理,感谢支持!
