send_message(15071229603, $message, $messageUrl); // var_dump($res); } /** * 周报推送 */ public function week_data_push() { $weekMessagesModel = new WeekMessages(); $AdminUserModel = new AdminUser(); //当前日期 $sdefaultDate = date("Y-m-d"); //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期 $first = 1; //获取当前周的第几天 周日是 0 周一到周六是 1 - 6 $w = date('w', strtotime($sdefaultDate)); //获取本周开始日期,如果$w是0,则表示周日,减去 6 天 $week_start = date('Y-m-d', strtotime("$sdefaultDate -" . ($w ? $w - $first : 6) . ' days')); //本周结束日期 $week_end = date('Y-m-d H:i:s', strtotime("$week_start +6 days") + 86399); // 获取本周的预警周报 $push_data = $weekMessagesModel->query()->select(['supervisory_user_id']) // ->where(['warn_start_date'=>'2024-01-08','warn_end_date'=>'2024-01-14 23:59:59','is_push'=>1]) ->where(['warn_start_date' => $week_start, 'warn_end_date' => $week_end, 'is_push' => 1]) ->groupBy(['supervisory_user_id']) ->get(); if ($push_data) { $push_data_arr = $push_data->toArray(); foreach ($push_data_arr as $k => $v) { $mobile = $AdminUserModel->where(['id' => $v['supervisory_user_id']])->first()["mobile"]; if ($mobile) { $message = $week_start . ' ~ ' . $week_end . ',您所辖的项目预警周报统计'; $messageUrl = 'https://anquansys.sxlq.com:37100/home/warninginfo?uid=' . $v['supervisory_user_id']; $res = $this->send_message($mobile, $message, $messageUrl); if ($res['code'] == 0) { $updata['is_push'] = 2; $updata['push_msg'] = '推送成功'; } else { $updata['is_push'] = 3; $updata['push_msg'] = $res['msg']; } } else { $updata['is_push'] = 3; $updata['push_msg'] = '督察人手机号为空'; } $weekMessagesModel->where(['warn_start_date' => $week_start, 'warn_end_date' => $week_end, 'is_push' => 1, 'supervisory_user_id' => $v['supervisory_user_id']])->update($updata); } } return sparkSuccess(dataReturn(0, '推送成功', '')); } # 发送消息通知 public function getUserInfo($mobile) { $get_user = $this->get_user_info($mobile); if ($get_user['errcode'] != 0) { return false; } $get_unionId = $this->get_unionid($get_user['result']['userid']); if ($get_unionId['errcode'] != 0) { return false; } return $get_unionId['result']['unionid']; } /** * @param $mobile * @param $message * @param $messageUrl * @return array */ public function send_message($mobile, $message, $messageUrl) { Db::table("warn_log")->insert(['type' => 21, 'content' => '钉钉推送', 'time' => date('Y-m-d H:i:s')]); $ding_config = getConfByType('ding_talk'); $get_user = $this->get_user_info($mobile); if ($get_user['errcode'] == 0) { $userId = $get_user['userid']; $accessToken = $this->getaccess_token(); $url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={$accessToken}"; $data = array( 'agent_id' => intval($ding_config['agent_id']), 'userid_list' => $userId, 'msg' => array( 'msgtype' => 'link', 'link' => array( 'picUrl' => '$iAEKAqNwbmcDBgTNAk', 'messageUrl' => $messageUrl, 'text' => $message, 'title' => '您的预警周报', ) ) ); $return_res = $this->http_curl_post($url, $data); if ($return_res['errcode'] == 0) { return ['code' => 0, 'msg' => '发送成功', 'data' => $return_res['task_id']]; } else { return ['code' => 1, 'msg' => $return_res['errmsg']]; } } else { return ['code' => 1, 'msg' => $get_user['errmsg']]; } } # 获取token public function getaccess_token() { // 发起请求获取 access_token $ding_config = getConfByType('ding_talk'); if (Cache::get('DingTalkToken')) { $access_token = Cache::get('DingTalkToken'); } else { $url = 'https://oapi.dingtalk.com/gettoken?appkey=' . $ding_config['dingappkey'] . '&appsecret=' . $ding_config['dingappsecret']; $res = $this->http_curl_get($url, 1); if ($res['errcode'] == 0) { $access_token = $res['access_token']; Cache::set('DingTalkToken', $access_token, 7199); } } return $access_token; } public function get_unionid($user_id) { $token = $this->getaccess_token(); $url = 'https://oapi.dingtalk.com/topapi/v2/user/get?access_token=' . $token; return $this->http_curl_post($url, ['userid' => $user_id]); } # 获取员工信息 public function get_user_info($mobile) { // 获取员工信息 $token = $this->getaccess_token(); $url = 'https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token=' . $token; $data = ['mobile' => $mobile]; return $this->http_curl_post($url, $data); } function http_curl_post($url, $data, $header = '') { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); if ($header) { curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//重点 } else { curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));//重点 } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return json_decode($output, true); } function http_curl_get($url, $type = 1) { $curl = curl_init(); curl_setopt($curl, CURLOPT_TIMEOUT, 5000); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_URL, $url); if ($type == 1) { curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); } $res = curl_exec($curl); if ($res) { curl_close($curl); return json_decode($res, true); } else { $error = curl_errno($curl); curl_close($curl); return $error; } } public function upload() { $accessToken = '069fbe5d954a353ab213c8e37386a030'; $curl = curl_init(); curl_setopt_array( $curl, array( CURLOPT_URL => 'https://oapi.dingtalk.com/media/upload?access_token=' . $accessToken, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => array('media' => new CURLFILE('C:/Users/bing/Desktop/上传APK/111.jpg'), 'type' => 'file'), ) ); $response = curl_exec($curl); curl_close($curl); //var_dump($response); } }