You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.5 KiB
6.5 KiB
微信小程序配置问题解决方案
🔍 问题分析
错误信息
生成二维码失败: 租户 10550 的小程序未配置,请先在系统设置中配置微信小程序信息
问题根源
代码在SettingServiceImpl.getBySettingKeyIgnoreTenant
方法中查找微信小程序配置时,使用以下SQL条件:
SELECT * FROM sys_setting
WHERE setting_key = 'mp-weixin'
AND tenant_id = 10550
AND deleted = 0
但是你的配置存储在cms_website_field
表中,字段结构为:
name = 'AppID'
- 微信小程序AppIDname = 'AppSecret'
- 微信小程序AppSecrettenant_id = 10550
- 租户ID
✅ 解决方案
我已经修改了SettingServiceImpl
,让它在找不到sys_setting
配置时,自动从cms_website_field
表中读取配置。
🔧 代码修改
1. 修改SettingServiceImpl
在getBySettingKeyIgnoreTenant
方法中添加了备用配置读取逻辑:
if ("mp-weixin".equals(key)) {
// 尝试从cms_website_field表中读取微信小程序配置
JSONObject websiteFieldConfig = getWeixinConfigFromWebsiteField(tenantId);
if (websiteFieldConfig != null) {
System.out.println("从cms_website_field表获取到微信小程序配置: " + websiteFieldConfig);
return websiteFieldConfig;
}
throw new BusinessException("租户 " + tenantId + " 的小程序未配置,请先在系统设置中配置微信小程序信息");
}
2. 新增配置读取方法
private JSONObject getWeixinConfigFromWebsiteField(Integer tenantId) {
// 查询AppID
CmsWebsiteField appIdField = cmsWebsiteFieldService.getOne(
new LambdaQueryWrapper<CmsWebsiteField>()
.eq(CmsWebsiteField::getName, "AppID")
.eq(CmsWebsiteField::getTenantId, tenantId)
.eq(CmsWebsiteField::getDeleted, 0)
);
// 查询AppSecret
CmsWebsiteField appSecretField = cmsWebsiteFieldService.getOne(
new LambdaQueryWrapper<CmsWebsiteField>()
.eq(CmsWebsiteField::getName, "AppSecret")
.eq(CmsWebsiteField::getTenantId, tenantId)
.eq(CmsWebsiteField::getDeleted, 0)
);
if (appIdField != null && appSecretField != null
&& appIdField.getValue() != null && !appIdField.getValue().trim().isEmpty()
&& appSecretField.getValue() != null && !appSecretField.getValue().trim().isEmpty()) {
// 构建微信小程序配置JSON
JSONObject config = new JSONObject();
config.put("appId", appIdField.getValue().trim());
config.put("appSecret", appSecretField.getValue().trim());
return config;
}
return null;
}
📋 配置检查步骤
1. 检查现有配置
执行SQL查询检查你的配置:
SELECT id, name, value, tenant_id, deleted, comments
FROM cms_website_field
WHERE tenant_id = 10550
AND name IN ('AppID', 'AppSecret')
AND deleted = 0;
2. 创建配置(如果不存在)
如果查询结果为空,需要创建配置:
-- 创建AppID配置
INSERT INTO cms_website_field (type, name, value, tenant_id, comments, deleted, create_time)
VALUES (0, 'AppID', '你的微信小程序AppID', 10550, '微信小程序AppID', 0, NOW());
-- 创建AppSecret配置
INSERT INTO cms_website_field (type, name, value, tenant_id, comments, deleted, create_time)
VALUES (0, 'AppSecret', '你的微信小程序AppSecret', 10550, '微信小程序AppSecret', 0, NOW());
3. 更新配置值
如果配置存在但值不正确,更新配置:
-- 更新AppID
UPDATE cms_website_field
SET value = '你的实际AppID'
WHERE name = 'AppID' AND tenant_id = 10550 AND deleted = 0;
-- 更新AppSecret
UPDATE cms_website_field
SET value = '你的实际AppSecret'
WHERE name = 'AppSecret' AND tenant_id = 10550 AND deleted = 0;
🧪 测试验证
1. 运行测试
# 运行配置测试
mvn test -Dtest=WeixinConfigTest
# 运行特定测试方法
mvn test -Dtest=WeixinConfigTest#testGetWeixinConfigFromWebsiteField
2. 手动验证
重启应用后,尝试生成二维码功能,应该不再报错。
🔄 配置流程
原始流程
请求微信小程序配置
↓
查询 sys_setting 表
↓
setting_key = 'mp-weixin' AND tenant_id = 10550
↓
未找到配置 → 抛出异常
修改后流程
请求微信小程序配置
↓
查询 sys_setting 表
↓
setting_key = 'mp-weixin' AND tenant_id = 10550
↓
未找到配置
↓
查询 cms_website_field 表
↓
name = 'AppID' AND name = 'AppSecret' AND tenant_id = 10550
↓
找到配置 → 构建JSON返回
↓
未找到配置 → 抛出异常
📊 配置格式对比
sys_setting表格式
{
"setting_key": "mp-weixin",
"content": "{\"appId\":\"wx1234567890abcdef\",\"appSecret\":\"abcdef1234567890abcdef1234567890\"}",
"tenant_id": 10550
}
cms_website_field表格式
-- AppID记录
name = 'AppID', value = 'wx1234567890abcdef', tenant_id = 10550
-- AppSecret记录
name = 'AppSecret', value = 'abcdef1234567890abcdef1234567890', tenant_id = 10550
最终返回格式
{
"appId": "wx1234567890abcdef",
"appSecret": "abcdef1234567890abcdef1234567890"
}
⚠️ 注意事项
1. 配置安全
- AppSecret是敏感信息,确保数据库访问权限控制
- 建议定期更换AppSecret
2. 字段名称
- 确保
cms_website_field
表中的name
字段值准确:AppID
(注意大小写)AppSecret
(注意大小写)
3. 租户隔离
- 确保
tenant_id = 10550
- 确保
deleted = 0
4. 配置验证
- AppID格式:以
wx
开头的18位字符串 - AppSecret格式:32位字符串
✅ 验证清单
- 修改SettingServiceImpl添加备用配置读取
- 添加getWeixinConfigFromWebsiteField方法
- 创建测试用例验证功能
- 提供SQL脚本检查和创建配置
- 在cms_website_field表中创建AppID配置
- 在cms_website_field表中创建AppSecret配置
- 重启应用程序测试
- 验证二维码生成功能正常
🎉 总结
通过修改SettingServiceImpl
,现在系统支持从两个地方读取微信小程序配置:
- 主要来源:
sys_setting
表(原有方式) - 备用来源:
cms_website_field
表(新增支持)
当主要来源找不到配置时,系统会自动尝试从备用来源读取,这样就解决了你的配置问题,无需修改现有的cms_website_field
表结构。
只需要确保在cms_website_field
表中有正确的AppID
和AppSecret
配置即可。