'ww83d8e358fe7f71b7', 'agent_id' => 1000007, // 自建应用的 AgentId 'secret' => '5kJcYML2kJ_ojLQ-1KuzXo_rsMs2T74M6RjQmJ5uG6A', 'token' => 'U0GQ5SI5RkOh5DA9wI', 'aes_key' => 'Ces99dugJYEGSgBfCFUg43lI1e1TGWh7HRSmboUiS5N', ]; $app = Factory::work($config); // 1. 定义收到数据后的逻辑 $app->server->push(function ($message) use ($app) { // 判断是否为审批状态变动通知 Log::channel('apiLog')->info('企业微信', ['msg' => $message]); if ($message['Event'] === 'sys_approval_change') { $info = $message['ApprovalInfo']; $status = (int)$info['SpStatus']; // 强制转为整数防止类型判断坑 $spNo = $info['SpNo']; if ($status === 2) { // 【核心:二次查询】拿着单号去获取单据里的详细内容(请假天数、理由等) // $detail = $app->oa->approvalDetail($spNo); // 情况 A:最终通过 // 此时应该调用 $app->oa->approvalDetail($spNo) 获取详情并同步到你的数据库 // \Log::info("审批单 [{$spNo}] 最终通过,准备发放福利/记录考勤"); } elseif ($status === 3) { // 情况 B:最终驳回 // 此时你可能需要更新本地单据状态为“已作废” // \Log::info("审批单 [{$spNo}] 被驳回,流程结束"); } // 其他状态(如 1-审批中)直接忽略,不处理任何业务 } }); // 核心逻辑:serve() 会自动判断请求类型 // 如果是 GET 请求,它会自动处理校验逻辑并返回明文 echostr // 如果是 POST 请求,它会进入消息处理流程 return $app->server->serve(); } }