setCode($code); $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/user/getuserinfo"); if ($resp->errcode == 0 && $resp->errmsg == 'ok') { $result = $resp->result; return $result; } except($resp->errcode . ' ' . $resp->errmsg); } /** * 设置企业内部应用H5微应用鉴权 * * @param string $url 应用URL,例如:https://your-domain.com/path/to/your/app.html * @return mixed **/ public static function generateAuthSignature($url) { // 获取jsapiTicket $jsapiTicket = Sample::jsapiTickets()['jsapiTicket']; // 生成鉴权签名 $nonceStr = randCode(16); // 随机字符串,用于保证签名不可预测性,长度为16个字符的随机字符串 $timeStamp = time(); // 时间戳,格式为13位数字,如:1602756290 $stringA = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timeStamp&url=$url"; $signature = sha1($stringA); // 签名值 // agentId值 // corpId值 $config = config('app.dingtalk'); $agentId = $config['agentId']; $corpId = $config['corpId']; return compact("agentId", "corpId", "nonceStr", "timeStamp", "signature", "url"); } /** * 更新员工和部门 * * @return bool * [{"dept_id":438337214,"name":"BOSS","parent_id":1},{"dept_id":438145402,"name":"项目管理中心","parent_id":1},{"dept_id":501674219,"name":"技术部","parent_id":438145402},{"dept_id":500773946,"name":"项目一组","parent_id":501674219},{"dept_id":501193520,"name":"项目二组","parent_id":501674219},{"dept_id":731200005,"name":"Ui测试组","parent_id":501674219},{"dept_id":501415496,"name":"销售部","parent_id":438145402},{"dept_id":859178110,"name":"运营部","parent_id":438145402},{"dept_id":724339668,"name":"职能支持中心","parent_id":1},{"dept_id":438218445,"name":"人力资源部","parent_id":724339668},{"dept_id":702458745,"name":"财务部","parent_id":724339668}] **/ public static function renew() { $save_department_data = []; $add_department_data = []; $del_department_data = []; $department_user_data = []; $user_data = []; $save_user_data = []; $add_user_data = []; $del_user_data = []; $department_data = self::get_tree(1); $department_data_key = array_column($department_data, null, 'dept_id'); $department_list = Department::field('is_deleted', true) ->where('is_deleted', CommonConstant::IS_DELETED_0) ->select(); $department_key = array_column($department_list->toArray(), null, 'dept_id'); foreach ($department_data as $value) { if (array_key_exists($value['dept_id'], $department_key)) { $save_department_data[] = $value; } else { $add_department_data[] = $value; } $user_list = self::user_list($value['dept_id']); if ($user_list->list) { $department_user_data[$value['dept_id']] = $user_list->list; } } foreach ($department_user_data as $value) { foreach ($value as $val) { $user_data[] = (array)$val; } } $user_data_key = array_column($user_data, null, 'userid'); $user_list = User::field('is_deleted', true) ->where('is_deleted', CommonConstant::IS_DELETED_0) ->select(); $user_key = array_column($user_list->toArray(), null, 'userid'); Db::startTrans(); try { // 更新部门 if ($save_department_data) { foreach ($department_list as $val) { if (array_key_exists($val['dept_id'], $department_data_key)) { $department_data_info = $department_data_key[$val['dept_id']]; $val->save($department_data_info); } else { $del_department_data[] = $val['id']; } } } if ($add_department_data) { Department::insertAll($add_department_data); } if ($del_department_data) { Department::where('id', 'in', $del_department_data)->update(['is_deleted' => CommonConstant::IS_DELETED_1]); } // 更新员工 foreach ($user_data as $value) { if (array_key_exists($value['userid'], $user_key)) { $save_user_data[] = $value; } else { $data = [ 'userid' => $value['userid'], 'unionid' => $value['unionid'], 'name' => $value['name'], 'avatar' => $value['avatar'], 'mobile' => isset($value['mobile']) ? $value['mobile'] : '', 'title' => isset($value['title']) ? $value['title'] : '', 'manager_userid' => isset($value['manager_userid']) ? $value['manager_userid'] : '', 'department' => implode(',', $value['dept_id_list']), ]; $add_user_data[] = $data; } } if ($save_user_data) { foreach ($user_list as $val) { if (array_key_exists($val['userid'], $user_data_key)) { $user_data_info = $user_data_key[$val['userid']]; $data = [ 'userid' => $user_data_info['userid'], 'unionid' => $user_data_info['unionid'], 'department' => implode(',', $user_data_info['dept_id_list']), ]; $val->save($data); } else { $del_user_data[] = $val['id']; } } } if ($add_user_data) { User::insertAll($add_user_data); } if ($del_user_data) { User::where('id', 'in', $del_user_data)->update(['is_deleted' => CommonConstant::IS_DELETED_1]); } Db::commit(); } catch (Exception $e) { Db::rollback(); except('出现错误:' . $e->getMessage() .'|'. $e->getFile() .'|'. $e->getLine()); } return true; } /** * 递归 **/ public static function get_tree($dept_id, &$tree = []) { $resp = self::department_listsub($dept_id); foreach ($resp as $value) { $tree[] = [ 'dept_id' => $value->dept_id, 'name' => $value->name, 'parent_id' => $value->parent_id, ]; self::get_tree($value->dept_id, $tree); } return $tree; } /** * 获取部门列表 * * @param string $dept_id 父部门ID * @return mixed */ public static function department_listsub($dept_id) { $accessToken = Sample::accessToken()['accessToken']; $c = self::get_obj(); $req = new \OapiV2DepartmentListsubRequest; $req->setDeptId($dept_id); $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/department/listsub"); if ($resp->errcode == 0 && $resp->errmsg == 'ok') { $result = $resp->result; return $result; } except($resp->errcode . ' ' . $resp->errmsg); } /** * 获取部门详情 * * @param string $dept_id 部门ID * @return mixed */ public static function department_get($dept_id) { $accessToken = Sample::accessToken()['accessToken']; $c = self::get_obj(); $req = new \OapiV2DepartmentListsubRequest; $req->setDeptId($dept_id); $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/department/get"); if ($resp->errcode == 0 && $resp->errmsg == 'ok') { $result = $resp->result; return $result; } except($resp->errcode . ' ' . $resp->errmsg); } /** * 获取部门用户详情 * * @param string $dept_id 部门ID * @return mixed */ public static function user_list($dept_id) { $accessToken = Sample::accessToken()['accessToken']; $c = self::get_obj(); $req = new \OapiV2UserListRequest; $req->setDeptId($dept_id); $req->setCursor("0"); $req->setSize("100"); $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/user/list"); if ($resp->errcode == 0 && $resp->errmsg == 'ok') { $result = $resp->result; return $result; } except($resp->errcode . ' ' . $resp->errmsg); } /** * 查询用户详情 * * @param string $userid 用户的userId * @return mixed */ public static function user_get($userid) { $accessToken = Sample::accessToken()['accessToken']; $c = self::get_obj(); $req = new \OapiV2UserGetRequest; $req->setUserid($userid); $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/user/get"); if ($resp->errcode == 0 && $resp->errmsg == 'ok') { $result = $resp->result; return $result; } except($resp->errcode . ' ' . $resp->errmsg); } }