订单
This commit is contained in:
@@ -0,0 +1,193 @@
|
||||
<?php
|
||||
/**
|
||||
* 甘草配置检查脚本
|
||||
* 用于检查 .env 配置是否正确,特别是检查是否有数组值导致 "Array to string conversion" 错误
|
||||
*/
|
||||
|
||||
// 加载 ThinkPHP
|
||||
require __DIR__ . '/server/vendor/autoload.php';
|
||||
|
||||
$app = new think\App();
|
||||
$app->initialize();
|
||||
|
||||
echo "=== 甘草配置检查 ===\n\n";
|
||||
|
||||
// 获取配置
|
||||
$config = think\facade\Config::get('gancao_scm', []);
|
||||
|
||||
echo "1. 检查配置是否存在:\n";
|
||||
if (empty($config)) {
|
||||
echo " ❌ 配置为空,请检查 .env 文件\n";
|
||||
exit(1);
|
||||
} else {
|
||||
echo " ✓ 配置已加载\n\n";
|
||||
}
|
||||
|
||||
echo "2. 检查各项配置:\n";
|
||||
|
||||
$requiredFields = [
|
||||
'enabled' => 'boolean',
|
||||
'gateway_url' => 'string',
|
||||
'gateway_ak' => 'string',
|
||||
'gateway_sk' => 'string',
|
||||
'biz_ak' => 'string',
|
||||
'biz_sk' => 'string',
|
||||
'callback_url' => 'string',
|
||||
'express_type' => 'string',
|
||||
'cradle_store' => 'string',
|
||||
'df_id' => 'integer',
|
||||
];
|
||||
|
||||
$hasError = false;
|
||||
|
||||
foreach ($requiredFields as $field => $expectedType) {
|
||||
$value = $config[$field] ?? null;
|
||||
$actualType = gettype($value);
|
||||
|
||||
echo " - {$field}: ";
|
||||
|
||||
if ($value === null) {
|
||||
echo "❌ 未配置\n";
|
||||
$hasError = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 检查类型
|
||||
if ($actualType === 'array') {
|
||||
echo "❌ 错误!值是数组,应该是 {$expectedType}\n";
|
||||
echo " 实际值: " . json_encode($value, JSON_UNESCAPED_UNICODE) . "\n";
|
||||
$hasError = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 转换类型检查
|
||||
$typeMatch = false;
|
||||
switch ($expectedType) {
|
||||
case 'string':
|
||||
$typeMatch = is_string($value) || is_numeric($value);
|
||||
break;
|
||||
case 'integer':
|
||||
$typeMatch = is_int($value) || is_numeric($value);
|
||||
break;
|
||||
case 'boolean':
|
||||
$typeMatch = is_bool($value) || in_array($value, [0, 1, '0', '1', 'true', 'false'], true);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!$typeMatch) {
|
||||
echo "⚠️ 类型不匹配(期望: {$expectedType}, 实际: {$actualType})\n";
|
||||
echo " 值: " . var_export($value, true) . "\n";
|
||||
} else {
|
||||
echo "✓ {$actualType}";
|
||||
if ($expectedType === 'string' && strlen((string)$value) > 50) {
|
||||
echo " (长度: " . strlen((string)$value) . ", 前50字符: " . substr((string)$value, 0, 50) . "...)";
|
||||
} else {
|
||||
echo " = " . var_export($value, true);
|
||||
}
|
||||
echo "\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo "\n3. 检查可选配置:\n";
|
||||
|
||||
$optionalFields = [
|
||||
'default_is_decoct' => 'boolean',
|
||||
'default_times_per_day' => 'integer',
|
||||
'default_num_per_pack' => 'integer',
|
||||
'default_dose_ml' => 'integer',
|
||||
'herb_id_map' => 'array',
|
||||
];
|
||||
|
||||
foreach ($optionalFields as $field => $expectedType) {
|
||||
$value = $config[$field] ?? null;
|
||||
$actualType = gettype($value);
|
||||
|
||||
echo " - {$field}: ";
|
||||
|
||||
if ($value === null) {
|
||||
echo "未配置(可选)\n";
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($expectedType === 'array' && !is_array($value)) {
|
||||
echo "⚠️ 应该是数组,实际是 {$actualType}\n";
|
||||
} elseif ($expectedType !== 'array' && is_array($value)) {
|
||||
echo "❌ 错误!值是数组,应该是 {$expectedType}\n";
|
||||
$hasError = true;
|
||||
} else {
|
||||
echo "✓ {$actualType}\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo "\n4. 测试 JSON 编码:\n";
|
||||
|
||||
// 模拟构建提交负载
|
||||
$testPayload = [
|
||||
'token' => 'test_token_123',
|
||||
'df_id' => (int)($config['df_id'] ?? 101),
|
||||
'amount' => 7,
|
||||
'express_type' => isset($config['express_type']) ? (string)$config['express_type'] : 'sf',
|
||||
'callback_url' => isset($config['callback_url']) ? (string)$config['callback_url'] : '',
|
||||
'cradle_store' => isset($config['cradle_store']) ? (string)$config['cradle_store'] : 'default',
|
||||
'express_to' => [
|
||||
'name' => '测试患者',
|
||||
'phone' => '13800138000',
|
||||
'province' => '四川省',
|
||||
'city' => '成都市',
|
||||
'addr' => '测试地址123号',
|
||||
],
|
||||
'patient' => [
|
||||
'name' => '测试患者',
|
||||
'age' => '30',
|
||||
'sex' => 0,
|
||||
'phone' => '13800138000',
|
||||
],
|
||||
'doctor' => [
|
||||
'name' => '测试医生',
|
||||
],
|
||||
'doct_advice' => [
|
||||
'taboo' => '无',
|
||||
'usage_time' => '饭后半小时服用',
|
||||
'usage_brief' => '遵医嘱',
|
||||
'others' => '',
|
||||
'notes_doctor' => '',
|
||||
],
|
||||
'm_list' => [
|
||||
['id' => 1, 'quantity' => 10.0, 'brief' => ''],
|
||||
],
|
||||
];
|
||||
|
||||
try {
|
||||
$json = json_encode($testPayload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
if ($json === false) {
|
||||
echo " ❌ JSON 编码失败: " . json_last_error_msg() . "\n";
|
||||
$hasError = true;
|
||||
} else {
|
||||
echo " ✓ JSON 编码成功\n";
|
||||
echo " 负载大小: " . strlen($json) . " 字节\n";
|
||||
|
||||
// 检查是否包含 "Array" 字符串(可能是数组转字符串的迹象)
|
||||
if (strpos($json, '"Array"') !== false || strpos($json, 'Array') !== false) {
|
||||
echo " ⚠️ 警告:JSON 中包含 'Array' 字符串,可能存在数组转字符串问题\n";
|
||||
$hasError = true;
|
||||
}
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
echo " ❌ 异常: " . $e->getMessage() . "\n";
|
||||
$hasError = true;
|
||||
}
|
||||
|
||||
echo "\n";
|
||||
|
||||
if ($hasError) {
|
||||
echo "=== 检查结果: ❌ 发现错误 ===\n";
|
||||
echo "\n请修复以上错误后重试。\n";
|
||||
echo "\n常见问题:\n";
|
||||
echo "1. 配置值被错误地设置为数组\n";
|
||||
echo "2. .env 文件格式错误(例如:GANCAO_SCM_EXPRESS_TYPE=[\"sf\"] 应该是 GANCAO_SCM_EXPRESS_TYPE=sf)\n";
|
||||
echo "3. 配置文件中有多余的引号或括号\n";
|
||||
exit(1);
|
||||
} else {
|
||||
echo "=== 检查结果: ✓ 配置正常 ===\n";
|
||||
exit(0);
|
||||
}
|
||||
Reference in New Issue
Block a user