initialize(); echo "=== 甘草负载诊断 ===\n\n"; // 模拟处方数据 $rx = [ 'id' => 1, 'diagnosis_id' => 1, 'patient_name' => '测试患者', 'age' => 30, 'gender' => 0, 'phone' => '13800138000', 'clinical_diagnosis' => '中医辨证论治', 'doctor_name' => '测试医生', 'doctor_phone' => '13900139000', 'usage_time' => '饭后半小时服用', 'dietary_taboo' => '忌辛辣', 'usage_way' => '口服', 'usage_instruction' => '温水送服', 'usage_notes' => '注意休息', 'dose_count' => 7, 'herbs' => [ [ 'name' => '当归', 'dosage' => 10, 'gc_id' => 1001, 'brief' => '', ], [ 'name' => '黄芪', 'dosage' => 15, 'gc_id' => 1002, 'brief' => '', ], ], ]; // 模拟订单数据 $order = [ 'id' => 1, 'recipient_name' => '测试患者', 'recipient_phone' => '13800138000', 'shipping_address' => '四川省成都市武侯区测试街道123号', 'remark_extra' => '测试备注', ]; echo "1. 测试配置读取:\n"; $config = think\facade\Config::get('gancao_scm', []); $criticalFields = ['express_type', 'callback_url', 'cradle_store', 'df_id']; foreach ($criticalFields as $field) { $value = $config[$field] ?? null; $type = gettype($value); echo " - {$field}: {$type}"; if ($type === 'array') { echo " ❌ 错误!这个字段不应该是数组\n"; echo " 值: " . json_encode($value, JSON_UNESCAPED_UNICODE) . "\n"; } else { echo " ✓\n"; } } echo "\n2. 测试 buildPreviewPayload:\n"; try { $token = 'test_token_' . time(); $previewPayload = \app\common\service\gancao\GancaoScmRecipelService::buildPreviewPayload($rx, $order, $token); echo " ✓ buildPreviewPayload 成功\n"; echo " 字段数量: " . count($previewPayload) . "\n"; // 检查每个字段的类型 echo "\n 检查字段类型:\n"; foreach ($previewPayload as $key => $value) { $type = gettype($value); echo " - {$key}: {$type}"; if ($type === 'array') { echo " (包含 " . count($value) . " 个元素)"; // 检查数组内部是否有问题 $hasArrayValue = false; foreach ($value as $subKey => $subValue) { if (is_array($subValue) && !in_array($key, ['m_list', 'df101ext', 'df102ext', 'df103ext', 'df104ext'])) { $hasArrayValue = true; echo "\n ⚠️ 子字段 '{$subKey}' 是数组: " . json_encode($subValue, JSON_UNESCAPED_UNICODE); } } } echo "\n"; } } catch (\Throwable $e) { echo " ❌ 失败: " . $e->getMessage() . "\n"; echo " 文件: " . $e->getFile() . ":" . $e->getLine() . "\n"; } echo "\n3. 测试 buildSubmitPayload:\n"; try { $token = 'test_token_' . time(); $addrParts = \app\common\service\gancao\GancaoScmRecipelService::splitCnAddress($order['shipping_address']); $appNo = 'PO' . $order['id']; $submitPayload = \app\common\service\gancao\GancaoScmRecipelService::buildSubmitPayload( $rx, $order, $token, $addrParts, $appNo ); echo " ✓ buildSubmitPayload 成功\n"; echo " 字段数量: " . count($submitPayload) . "\n"; // 检查关键字段 echo "\n 检查关键字段:\n"; $keyFields = ['express_type', 'callback_url', 'app_order_no', 'cradle_store', 'express_to', 'patient', 'doctor', 'doct_advice']; foreach ($keyFields as $field) { if (!isset($submitPayload[$field])) { echo " - {$field}: ❌ 缺失\n"; continue; } $value = $submitPayload[$field]; $type = gettype($value); echo " - {$field}: {$type}"; if ($type === 'string') { if (strlen($value) > 50) { echo " (长度: " . strlen($value) . ")"; } else { echo " = " . var_export($value, true); } } elseif ($type === 'array') { echo " (包含 " . count($value) . " 个元素)"; // 检查数组内部 foreach ($value as $subKey => $subValue) { $subType = gettype($subValue); if ($subType === 'array') { echo "\n ⚠️ 子字段 '{$subKey}' 是数组(可能有问题)"; } } } echo "\n"; } } catch (\Throwable $e) { echo " ❌ 失败: " . $e->getMessage() . "\n"; echo " 文件: " . $e->getFile() . ":" . $e->getLine() . "\n"; } echo "\n4. 测试 JSON 编码:\n"; try { $token = 'test_token_' . time(); $addrParts = \app\common\service\gancao\GancaoScmRecipelService::splitCnAddress($order['shipping_address']); $appNo = 'PO' . $order['id']; $submitPayload = \app\common\service\gancao\GancaoScmRecipelService::buildSubmitPayload( $rx, $order, $token, $addrParts, $appNo ); $json = json_encode($submitPayload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); if ($json === false) { echo " ❌ JSON 编码失败: " . json_last_error_msg() . "\n"; } else { echo " ✓ JSON 编码成功\n"; echo " 大小: " . strlen($json) . " 字节\n"; // 检查是否包含 "Array" 字符串 if (strpos($json, '"Array"') !== false) { echo " ❌ 警告:JSON 中包含 'Array' 字符串,说明有数组被转换为字符串\n"; // 尝试找出是哪个字段 $decoded = json_decode($json, true); echo "\n 查找包含 'Array' 的字段:\n"; array_walk_recursive($decoded, function($value, $key) { if (is_string($value) && $value === 'Array') { echo " - 字段 '{$key}' 的值是 'Array'\n"; } }); } else { echo " ✓ JSON 内容正常\n"; } // 保存到文件以便检查 $filename = 'gancao_payload_' . date('YmdHis') . '.json'; file_put_contents($filename, json_encode($submitPayload, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); echo " 负载已保存到: {$filename}\n"; } } catch (\Throwable $e) { echo " ❌ 异常: " . $e->getMessage() . "\n"; echo " 文件: " . $e->getFile() . ":" . $e->getLine() . "\n"; echo " 堆栈:\n" . $e->getTraceAsString() . "\n"; } echo "\n=== 诊断完成 ===\n";