getAccessToken(); if($status){ return $this->json_return(200,'',$data); }else{ return $this->json_return(201,$data); } } public function getUserByCode(Request $request) { $service = new DrbService(); list($status,$data) = $service->getUserByCode($request->all()); if($status){ return $this->json_return(200,'',$data); }else{ return $this->json_return(201,$data); } } public function createProcessInstance(Request $request) { $service = new DrbService(); $userData = $request->userData; list($status,$data) = $service->createProcessInstance($request->all(), $userData); if($status){ return $this->json_return(200,'',$data); }else{ return $this->json_return(201,$data); } } public function getTemplateFields(Request $request) { $service = new DrbService(); list($status,$data) = $service->getTemplateFields($request->all()); if($status){ return $this->json_return(200,'',$data); }else{ return $this->json_return(201,$data); } } /** * 钉钉事件回调 */ public function dinCallback(Request $request) { $token = config('dingtalk.token'); // 钉钉事件订阅 token $aesKey = config('dingtalk.aes_key'); // 钉钉事件订阅 aes_key $crypt = new DingTalkCrypto($token, $aesKey); // 1. 获取钉钉传来的参数 $msgSignature = $request->get('msg_signature'); // 注意 $signature = $request->get('signature'); $timestamp = $request->get('timestamp'); $nonce = $request->get('nonce'); $encrypt = $request->input('encrypt'); // 2. 解密 $event = $crypt->decryptMsg($msgSignature, $timestamp, $nonce, $encrypt); if ($event === false) { Log::error('钉钉解密失败', compact('msgSignature','timestamp','nonce','encrypt')); return response()->json([ 'errcode' => 40001, 'errmsg' => 'decrypt fail' ]); // Log::error('钉钉解密失败', [ // 'msg_signature' => $msgSignature, // 'timestamp' => $timestamp, // 'nonce' => $nonce, // 'encrypt' => $encrypt // ]); // return response()->json(['errcode' => 1, 'errmsg' => '解密失败']); } Log::info('钉钉解密后的事件数据', $event); // 3. 验证 challenge if (isset($event['EventType']) && $event['EventType'] === 'check_url') { $encryptMsg = $crypt->encryptMsg($event['Random'], $timestamp, $nonce); return response()->json([ "msg_signature" => $encryptMsg['msg_signature'], "timeStamp" => $timestamp, "nonce" => $nonce, "encrypt" => $encryptMsg['encrypt'] ]); } // 4. 处理事件 if (isset($event['EventType'])) { switch ($event['EventType']) { case 'bpms_instance_change': // 审批实例变更 $processInstanceId = $event['processInstanceId'] ?? null; $result = $event['result'] ?? null; // agree / oppose / terminate Log::info("审批实例变更事件", compact('processInstanceId', 'result')); // TODO: 在这里执行你的业务逻辑,例如更新数据库状态 break; case 'bpms_task_change': // 审批任务变更 $processInstanceId = $event['processInstanceId'] ?? null; $taskId = $event['taskId'] ?? null; $result = $event['result'] ?? null; // agree / oppose Log::info("审批任务变更事件", compact('processInstanceId', 'taskId', 'result')); // TODO: 在这里执行你的业务逻辑,例如记录审批人操作 break; default: Log::warning("未处理的事件类型", ['EventType' => $event['EventType']]); } } // 5. 返回 success(加密) $resEncrypt = $crypt->encryptMsg('success', $timestamp, $nonce); return response()->json([ "msg_signature" => $resEncrypt['msg_signature'], "timeStamp" => $timestamp, "nonce" => $nonce, "encrypt" => $resEncrypt['encrypt'] ]); } }