Files
mp-java/docs/payment_config_diagnostic.sql
赵忠林 ededc7a501 feat(payment): 添加支付配置诊断和测试接口
- 新增支付配置诊断SQL脚本
- 添加测试控制器和微信支付诊断控制器
- 实现支付配置检查、快速测试和缓存清理等功能
-优化支付服务和订单创建流程- 更新相关实体和DTO以支持新功能
2025-08-13 18:03:34 +08:00

141 lines
4.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 支付配置诊断SQL脚本
-- 用于诊断"Value must not be null!"错误
-- 1. 检查所有租户的支付配置完整性
SELECT
tenant_id,
name,
type,
mch_id,
app_id,
merchant_serial_number,
api_key,
apiclient_key,
apiclient_cert,
pub_key,
pub_key_id,
status,
-- 配置完整性检查
CASE
WHEN mch_id IS NULL OR mch_id = '' THEN '❌ 商户号缺失'
WHEN app_id IS NULL OR app_id = '' THEN '❌ 应用ID缺失'
WHEN merchant_serial_number IS NULL OR merchant_serial_number = '' THEN '❌ 证书序列号缺失'
WHEN api_key IS NULL OR api_key = '' THEN '❌ API密钥缺失'
WHEN LENGTH(api_key) != 32 THEN '❌ API密钥长度错误'
ELSE '✅ 基础配置完整'
END AS basic_config_status,
-- 证书配置模式检查
CASE
WHEN pub_key IS NOT NULL AND pub_key != '' AND pub_key_id IS NOT NULL AND pub_key_id != ''
THEN '🔑 公钥模式'
WHEN apiclient_key IS NOT NULL AND apiclient_key != '' AND apiclient_cert IS NOT NULL AND apiclient_cert != ''
THEN '📜 证书模式'
ELSE '⚠️ 自动证书模式'
END AS cert_mode,
-- 状态检查
CASE
WHEN status = 1 THEN '✅ 已启用'
ELSE '❌ 未启用'
END AS status_check
FROM sys_payment
WHERE type = 0 -- 微信支付
ORDER BY tenant_id;
-- 2. 检查特定租户的详细配置请替换为实际的租户ID
-- 如果您知道具体的租户ID请取消注释并修改下面的查询
/*
SELECT
'=== 租户配置详情 ===' as section,
tenant_id,
name,
mch_id as '商户号',
app_id as '应用ID',
merchant_serial_number as '证书序列号',
CASE
WHEN api_key IS NOT NULL AND api_key != ''
THEN CONCAT('已配置(长度:', LENGTH(api_key), ')')
ELSE '未配置'
END as 'API密钥状态',
apiclient_key as '私钥文件',
apiclient_cert as '证书文件',
pub_key as '公钥文件',
pub_key_id as '公钥ID',
status as '状态'
FROM sys_payment
WHERE tenant_id = 10547 AND type = 0; -- 请替换为实际的租户ID
*/
-- 3. 查找可能导致"Value must not be null!"的问题
SELECT
'=== 潜在问题检查 ===' as section,
tenant_id,
CASE
WHEN mch_id IS NULL THEN '商户号为NULL'
WHEN mch_id = '' THEN '商户号为空字符串'
ELSE NULL
END as mch_id_issue,
CASE
WHEN app_id IS NULL THEN '应用ID为NULL'
WHEN app_id = '' THEN '应用ID为空字符串'
ELSE NULL
END as app_id_issue,
CASE
WHEN merchant_serial_number IS NULL THEN '证书序列号为NULL'
WHEN merchant_serial_number = '' THEN '证书序列号为空字符串'
ELSE NULL
END as serial_number_issue,
CASE
WHEN api_key IS NULL THEN 'API密钥为NULL'
WHEN api_key = '' THEN 'API密钥为空字符串'
WHEN LENGTH(api_key) != 32 THEN CONCAT('API密钥长度错误(', LENGTH(api_key), ')')
ELSE NULL
END as api_key_issue
FROM sys_payment
WHERE type = 0
HAVING mch_id_issue IS NOT NULL
OR app_id_issue IS NOT NULL
OR serial_number_issue IS NOT NULL
OR api_key_issue IS NOT NULL;
-- 4. 生成修复建议
SELECT
'=== 修复建议 ===' as section,
tenant_id,
CONCAT(
'-- 租户 ', tenant_id, ' 的修复SQL:\n',
'UPDATE sys_payment SET \n',
CASE WHEN mch_id IS NULL OR mch_id = '' THEN ' mch_id = ''YOUR_MERCHANT_ID'',\n' ELSE '' END,
CASE WHEN app_id IS NULL OR app_id = '' THEN ' app_id = ''YOUR_APP_ID'',\n' ELSE '' END,
CASE WHEN merchant_serial_number IS NULL OR merchant_serial_number = '' THEN ' merchant_serial_number = ''YOUR_SERIAL_NUMBER'',\n' ELSE '' END,
CASE WHEN api_key IS NULL OR api_key = '' THEN ' api_key = ''YOUR_32_CHAR_API_KEY'',\n' ELSE '' END,
' status = 1\n',
'WHERE tenant_id = ', tenant_id, ' AND type = 0;\n'
) as fix_sql
FROM sys_payment
WHERE type = 0
AND (mch_id IS NULL OR mch_id = ''
OR app_id IS NULL OR app_id = ''
OR merchant_serial_number IS NULL OR merchant_serial_number = ''
OR api_key IS NULL OR api_key = '');
-- 5. 检查证书文件路径配置
SELECT
'=== 证书文件路径检查 ===' as section,
tenant_id,
apiclient_key as '私钥文件路径',
apiclient_cert as '证书文件路径',
pub_key as '公钥文件路径',
CASE
WHEN apiclient_key IS NOT NULL AND apiclient_key != ''
THEN '✅ 私钥路径已配置'
ELSE '❌ 私钥路径未配置'
END as private_key_status,
CASE
WHEN pub_key IS NOT NULL AND pub_key != ''
THEN '✅ 公钥路径已配置'
ELSE '⚠️ 公钥路径未配置(将使用自动证书)'
END as public_key_status
FROM sys_payment
WHERE type = 0
ORDER BY tenant_id;