server->push(function($message) { // $message = json_decode('{"ToUserName":"wwcdbc686326b51a89","FromUserName":"sys","CreateTime":"1727420114","MsgType":"event","Event":"change_external_contact","ChangeType":"add_external_contact","UserID":"LiangYan","ExternalUserID":"wmnltlDwAAcHuNEggrIxLtb-Buzk0KkQ","State":"state_id=9","WelcomeCode":"G2OYXUVxNyu3YOb3-oELMOCX1XSLWoeeGjl_HOw7k1E"}',true); try { // 处理结果 $result = []; // 外部联系人变动 if( $message['Event'] == 'change_external_contact' ) { // 添加企业客户事件,// 注册用户 if( $message['ChangeType'] == 'add_external_contact' ) $result = $this->addExternal($message); // 编辑企业客户事件 if( $message['ChangeType'] == 'edit_external_contact' ) $result = $this->editExternal($message); // 删除企业客户事件 if( $message['ChangeType'] == 'del_external_contact' ) $result = $this->delExternal($message); // 删除跟进成员事件 if( $message['ChangeType'] == 'del_follow_user' ) $result = $this->delFollow($message); } // 错误 if( isset($result['error']) ) return json_send(['code'=>'work_notify','msg'=>$result['error'],'data'=>$message]); // 成功 return json_send(['code'=>'success','msg'=>'notify','data'=>$message]); } catch (\Throwable $th) { // 成功 return json_send(['code'=>'error','msg'=>'notify','data'=>['message'=>$message,'msg'=>$th->getMessage()]]); } }); $response = $app->server->serve(); $response->send(); } /** * 添加企业客户事件 * */ public function addExternal($message){ // 实例 $WorkExternal = New WorkExternal; $WorkState = new WorkState; $WorkUser = New WorkUser; $WorkTag = New Worktag; // 通过state获取附加参数以判断用户类型 parse_str($message['State'],$state); // 获取附加参数 $state = empty($state['state_id']) ? [] : $WorkState->getOne($state['state_id']); // 存在客户标签,给客户增加标签 if( !empty($state['tags']) ) CorpTag::markTags($message['UserID'], $message['ExternalUserID'],explode(',',$state['tags'])); // 获取客户详情 $extUser = ExternalContact::getOne($message['ExternalUserID']); // 如果没有获取到数据的话 if( !$extUser ) return ['error'=>'企微ID不存在']; // 如果存在用户类型,且有外部联系人信息 if( !empty($state['user_type']) && !empty($extUser['external_contact']) ) $extUser['external_contact']['user_type'] = $state['user_type']; // 判断企微用户是否存在 $external = $WorkExternal->getOneByExtUserId($message['ExternalUserID']); // 更新或者新增客户 $id = $external ? $external['id'] : $WorkExternal->workAdd($extUser['external_contact']); // 如果添加失败 if( !$id ) return ['error'=>'新用户添加失败']; // 跳转链接 $link = Mini::getUrlLink('pages/bind/user',http_build_query(['kailin_uid'=>Hashids::encodeHex($id),'work_userid'=>$message['UserID']])); // 欢迎语 $welcome = $link ? ['link'=>['title'=>'请点此填写表单','desc'=>'填写表单信息为了给您提供更优服务','url'=>$link]] : ['text'=>['content'=>'请联系您的对接人员为您录入信息']]; // 发送欢迎语 ExternalContact::sendWelcome($message['WelcomeCode'],$welcome); // 循环跟进人员 foreach ($extUser['follow_user'] as $workUser) { // 如果是当前的跟进人员 if( $workUser['userid'] == $message['UserID'] ) { // 处理跟进关系 $WorkUser = $WorkUser->upsertOne($extUser['external_contact'],$workUser); // 处理标签 if( $workUser['tags'] ) $WorkTag->upsertTags($message['UserID'],$message['ExternalUserID'],$workUser['tags']); } } // 结果 return ['success'=>'处理完成']; } /** * 编辑企业客户事件 * */ public function editExternal($message){ // 实例 $WorkExternal = New WorkExternal; $WorkUser = New WorkUser; $WorkTag = New WorkTag; // 获取客户详情 $extUser = ExternalContact::getOne($message['ExternalUserID']); // 如果没有获取到数据的话 if( !$extUser ) return ['error'=>'企微ID不存在']; // 判断用户是否已经存在 $external = $WorkExternal->getOneByExtUserId($message['ExternalUserID']); // 如果更新或者新增客户 $id = $external ? $external['id'] : $WorkExternal->workAdd($extUser['external_contact']); // 如果添加失败 if( !$id ) return ['error'=>'客户信息更新失败']; // 循环跟进人员 foreach ($extUser['follow_user'] as $workUser) { // 如果是当前的跟进人员 if( $workUser['userid'] == $message['UserID'] ){ // 处理跟进关系 $WorkUser = $WorkUser->upsertOne($extUser['external_contact'],$workUser); // 处理标签 $WorkTag->upsertTags($message['UserID'],$message['ExternalUserID'],$workUser['tags']); } } // 返回结果 return ['success'=>'处理完成']; } /** * 删除企业客户事件 * */ public function delExternal($message){ // 实例 $WorkUser = New WorkUser; $WorkTag = New WorkTag; // 获取客户详情 $extUser = ExternalContact::getOne($message['ExternalUserID']); // 如果没有获取到数据的话 if( !$extUser ) return ['error'=>'企微ID不存在']; // 删除跟进人员信息 $WorkUser->delByExtUser($message['ExternalUserID'],$message['UserID']); // 删除跟进人员标签 $WorkTag->delByExtUser($message['ExternalUserID'],$message['UserID']); // 返回结果 return ['success'=>'处理完成']; } /** * 客户删除跟进人员事件 * */ public function delFollow($message){ // 实例 $WorkExternal = New WorkExternal; $WorkUser = New WorkUser; // 获取客户详情 $extUser = ExternalContact::getOne($message['ExternalUserID']); // 如果没有获取到数据的话 if( !$extUser ) return ['error'=>'企微ID不存在']; // 判断用户是否已经存在 $external = $WorkExternal->getOneByExtUserId($message['ExternalUserID']); // 如果有用户的话 if( !$external ) return ['success'=>'用户不存在无需处理']; // 如果更新或者新增客户 $id = $external ? $external['id'] : $WorkExternal->workAdd($extUser['external_contact']); // 如果添加失败 if( !$id ) return ['error'=>'客户信息更新失败']; // 返回结果 $result = $WorkUser->updateByExtUser($message['ExternalUserID'],$message['UserID'],['status'=>2]); // 如果添加失败 if( !$result ) return ['error'=>'状态变更失败']; // 返回结果 return ['success'=>'处理完成']; } }