updatekeys = 'aHR0cDovLzEyNy4wLjAuMS9hcHAvcm9ja2FwaS8:'; } else { $this->updatekeys = 'aHR0cDovL2FwaS5yb2Nrb2EuY29tLw::'; } $this->updatekey = $this->rock->jm->base64decode($this->updatekeys); $this->getsysnum(); } private function getsysnum() { $dbs = m('option'); $this->systemnum = $dbs->getval('systemnum'); $this->smsapikey = $dbs->getval('sms_apikey'); $this->qiannum = $dbs->getval('sms_qmnum'); $this->sendtype = $dbs->getval('sms_dirtype'); if (isempt($this->qiannum)) { $this->qiannum = ''; } if (isempt($this->systemnum)) { $rnd = md5(str_shuffle('abcedfghijk') . rand(1000, 9999)); $dbs->setval('systemnum', $rnd); $this->systemnum = $rnd; } return $this->systemnum; } public function geturlstr($mod, $act, $can = []) { $url = $this->updatekey; $url .= '?m=' . $mod . '&a=' . $act . ''; $url .= '&host=' . $this->rock->jm->base64encode(HOST) . '&version=' . VERSION . '&randtime=' . time( ) . '&ip=' . $this->rock->ip . '&xinhukey=' . getconfig('xinhukey') . '&sysnum=' . $this->systemnum . ''; if (!isempt($this->smsapikey)) { $url .= '&smsapikey=' . $this->smsapikey . ''; } $url .= '&authorkey=' . getconfig('authorkey') . ''; foreach ($can as $k => $v) { $url .= '&' . $k . '=' . $v . ''; } return $url; } public function getdata($mod, $act, $can = []) { $url = $this->geturlstr($mod, $act, $can); $cont = c('curl')->getcurl($url); if (!isempt($cont) && contain($cont, 'success')) { $data = json_decode($cont, true); } else { $data = returnerror('无法访问到官网API的,' . $cont . ''); } return $data; } public function postdata($mod, $act, $can = []) { $url = $this->geturlstr($mod, $act); $cont = c('curl')->postcurl($url, $can); if (!isempt($cont) && contain($cont, 'success')) { $data = json_decode($cont, true); } else { $data = returnerror('无法访问到官网API的,' . $cont . ''); } return $data; } public function urlsmall($url) { if (isempt($url)) { return ''; } $barr = $this->getdata('sms', 'urlsmall', ['url' => $this->rock->jm->base64encode($url)]); if (!$barr['success']) { return $url; } return $barr['data']['url']; } public function send($tomobile, $qiannum, $tplnum, $params = [], $url = '', $addlog = true) { if (isempt($qiannum)) { $qiannum = $this->qiannum; } if (!isempt($this->sendtype)) { if (!isset($params['url']) && $url) { $params['url'] = $url; } $barr = c($this->sendtype)->send($tomobile, $qiannum, $tplnum, $params); } else { $para['sys_tomobile'] = $tomobile; $para['sys_tplnum'] = $tplnum; $para['sys_qiannum'] = $qiannum; $para['sys_url'] = $this->rock->jm->base64encode($url); foreach ($params as $k => $v) { $para['can_' . $k . ''] = $v; } $barr = $this->postdata('sms', 'send', $para); } if (!$barr['success'] && $addlog) { m('log')->addlogs('短信', $barr['msg'], 2); } return $barr; } public function sendsms($receid, $qiannum, $tplnum, $params = [], $url = '', $addlog = true, $isyb = true) { if (isempt($receid)) { return returnerror('没有接收人'); } $receda = explode(',', $receid); if (c('check')->iscnmobile($receda[0])) { $tomobile = $receid; } else { $tomobile = m('admin')->getjoinfields($receid, 'mobile'); } if (isempt($tomobile)) { return returnerror('接收人[' . $receid . ']可能没设置手机号'); } $toama = explode(',', $tomobile); $toarr = []; foreach ($toama as $tostr) { if (!contain($tostr, '000000')) { $toarr[] = $tostr; } } if (!$toarr) { return returnerror('接收人的手机号不完整'); } $tomobile = join(',', $toarr); if (isempt($qiannum)) { $qiannum = $this->qiannum; } if (getconfig('asynsend') && $isyb) { $ybbo = m('reim')->asynurl( 'asynrun', 'sendsms', [ 'tomobile' => $tomobile, 'qiannum' => $qiannum, 'tplnum' => $tplnum, 'url' => $this->rock->jm->base64encode($url), 'params' => $this->rock->jm->base64encode(json_encode($params)), ] ); if ($ybbo) { return returnsuccess('异步发送'); } } return $this->send($tomobile, $qiannum, $tplnum, $params, $url, $addlog); } public function sendanay($m, $a, $can = [], $runtime = 0) { $runurl = m('base')->getasynurl($m, $a, $can, 1); $barr = $this->sendanayurl($runurl, $runtime); return $barr; } public function sendanayurl($runurl, $runtime = 0) { if (isempt($runurl)) { return returnerror('异步调用地址不能为空'); } $para = ['runurl' => $this->rock->jm->base64encode($runurl), 'runtime' => $runtime,]; $barr = $this->postdata('anay', 'send', $para); if (!$barr['success']) { m('log')->addlogs('调用官网异步', $barr['msg'], 2); } return $barr; } public function getvercode($tomobile, $device, $tplnum = '', $qiannum = '') { if (isempt($tomobile)) { return returnerror('接收手机号不能为空'); } if ($tplnum == '') { $tplnum = m('option')->getval('sms_yanzm'); } if (isempt($tplnum)) { $tplnum = 'defyzm'; } $otme = 0; $lorsr = m('log')->getone( "`type`='获取验证码' and (`optname`='$tomobile' or `device`='$device')", '`optdt`', 'id desc' ); if ($lorsr) { $otme = strtotime($lorsr['optdt']); } $jgtims = 60; $jgtime = time() - $otme; if ($otme > 0 && $jgtime < $jgtims) { return returnerror('获取太频繁,请' . ($jgtims - $jgtime) . '秒后在试'); } $code = '5' . rand(10000, 99999); $params['code'] = $code; $kaifbo = (getconfig('systype') == 'dev' || getconfig('systype') == 'demo'); if (!$kaifbo) { $barr = $this->send($tomobile, $qiannum, $tplnum, $params); } else { $barr = returnsuccess('ok'); } if ($barr['success']) { m('log')->addlog( '获取验证码', '获取验证码为:' . $code . '', ['device' => $device, 'optname' => $tomobile, 'optid' => $code] ); $barr['data'] = ''; if ($kaifbo) { $barr['data'] = $code; } } return $barr; } public function checkcode($tomobile, $code, $device) { if (isempt($tomobile)) { return returnerror('手机号不能为空'); } if (isempt($code)) { return returnerror('验证码不能为空'); } $youxiaq = 5 * 60; $optdt = date('Y-m-d H:i:s', time() - $youxiaq); $ors = m('log')->getone( "`type`='获取验证码' and `optname`='$tomobile' and `device`='$device' and `optdt`>'$optdt'", '`optid`,`optdt`,`id`', '`id` desc' ); if (!$ors) { return returnerror('请先获取验证码'); } if ($code != $ors['optid']) { return returnerror('验证码错误'); } m('log')->update('`optid`=0', $ors['id']); return returnsuccess('ok'); } public function starttask() { $turl = getconfig('anayurl', URL); $url = '' . $turl . 'task.php?m=runt&a=task'; $barr = $this->postdata('anay', 'starttask', ['runurl' => $this->rock->jm->base64encode($url)]); return $barr; } public function stoptask() { $barr = $this->getdata('anay', 'stoptask'); return $barr; } public function officesend($fileid, $lx = 0) { $yulx = ',doc,docx,xls,xlsx,ppt,pptx,'; $frs = m('file')->getone($fileid); if (!$frs) { return returnerror('文件不存在1'); } $filepath = $frs['filepath']; $fileext = $frs['fileext']; $filepathout = arrvalue($frs, 'filepathout'); $filesize = floatval($frs['filesize']); if (!contain($yulx, ',' . $fileext . ',')) { return returnerror('不是文档类型'); } if (isempt($filepath)) { return returnerror('文件路径是空的'); } if (substr($filepath, 0, 4) != 'http' && isempt($filepathout) && !file_exists($filepath)) { return returnerror('文件不存在2'); } $pdfpath = $frs['pdfpath']; if (!isempt($pdfpath) && file_exists($pdfpath)) { return returnerror('已转过了'); } $localpath = $frs['filepath']; if (substr($filepath, 0, 4) != 'http' && !isempt($filepathout) && !file_exists($filepath)) { return returnerror('文件同步到其他平台无法转化预览'); } if (substr($filepath, 0, 4) == 'http') { $localpath = '' . UPDIR . '/' . date('Y-m') . '/' . date('d_His') . '' . rand( 10, 99 ) . '_temp.' . $fileext . ''; $this->rock->createtxt($localpath, @file_get_contents($filepath)); if (!file_exists($localpath)) { return returnerror('无法下载远程文件,不能转换'); } $filesize = filesize($localpath); if ($filesize == 0) { return returnerror('远程文件已损坏'); } } $officeyl = getconfig('officeyl'); $cache = c('cache'); $zhkey = 'filetopdf' . $fileid . ''; $zhval = $cache->get($zhkey); if (isempt($zhval)) { if ($officeyl == '1') { $barr = $this->postdata( 'office', 'recedata', [ 'data' => $this->rock->jm->base64encode(file_get_contents($localpath)), 'fileid' => $fileid, 'fileext' => $fileext, 'filesize' => $filesize, 'filesizecn' => $frs['filesizecn'], 'backurl' => $this->rock->jm->base64encode( m('base')->getasynurl('asynrun', 'gwpdf', ['fileid' => $fileid], 2) ) ] ); } else { if ($officeyl == '4') { $barr = c('libreoffice')->filetopdf($fileid); } else { if (!contain(PHP_OS, 'WIN')) { return returnerror('只能在windows的服务器下转化'); } $bo = c('socket')->topdf($localpath, $fileid, $fileext); if (!$bo || is_string($bo)) { return returnerror('' . $bo . ',' . c('xinhu')->helpstr('topdf') . ''); } $barr = returnsuccess(); } } } else { $barr = returnsuccess(); } if ($barr['success']) { $times = ceil($filesize / (20 * 1024)) + 10; if ($times < 10) { $times = 10; } $cache->set($zhkey, 'true', $times + 5); if (!is_array($barr['data'])) { $barr['data'] = []; } $barr['data']['times'] = $times; $barr['data']['localpath'] = $this->rock->jm->base64encode($localpath); } return $barr; } public function officestatus($fileid) { if (getconfig('officeyl') == '1') { $barr = $this->getdata('office', 'getstatus', ['fileid' => $fileid]); } else { $frs = m('file')->getone($fileid); if (!$frs) { return returnerror('文件不存在1'); } $filepath = $frs['filepath']; $localpath = $this->rock->get('localpath'); if (!isempt($localpath)) { $filepath = $this->rock->jm->base64decode($localpath); } $pdfpath = str_replace('.' . $frs['fileext'] . '', '.pdf', $filepath); $status = 0; if (file_exists($pdfpath)) { $status = 1; } if ($status == 1) { m('file')->update(['pdfpath' => $pdfpath], $fileid); } $barr = returnsuccess(['status' => $status, 'ftype' => '0']); } return $barr; } public function officedown($fileid) { $barr = $this->getdata('office', 'down', ['fileid' => $fileid]); if ($barr['success']) { $data = $barr['data']; $pdfpath = $data['pdfpath']; $this->rock->createtxt($pdfpath, $this->rock->jm->base64decode($data['data'])); m('file')->update(['pdfpath' => $pdfpath,], $fileid); $barr = returnsuccess(); } return $barr; } public function getjiari() { $barr = $this->getdata('base', 'getjiari'); return $barr; } public function authercheck($key, $ym) { if (isempt($key)) { return returnerror('密钥格不能为空'); } if (isempt($ym)) { return returnerror('域名不能为空'); } $barr = $this->getdata( 'auther', 'check', ['autherkey' => $key, 'yuming' => $ym, 'randkey' => getconfig('randkey')] ); if ($barr['success']) { $da = $barr['data']; $this->saveauther($da, $key); return returnsuccess(); } else { return $barr; } } private function saveauther($da, $key) { $db = m('option'); $db->setval('auther_enddt@-101', $da['enddt']); $db->setval('auther_yuming@-101', $da['yuming']); $db->setval('auther_authkey@-101', $da['authkey']); $db->setval('auther_aukey@-101', $key); m('chargems')->update("`updatedt`='2020-02-02 02:02:02'", "`type`=0 and `mid` in(1,22)"); } public function autherfile($da, $key, $ym) { $da['enddt'] = $this->rock->jm->encrypt($this->rock->jm->strunlook($da['enddt'], $key)); $yuming = $this->rock->jm->strunlook($da['yuming'], $key); $xhkey1 = $this->rock->jm->strunlook($da['xhkey'], $key); $da['yuming'] = $this->rock->jm->encrypt($yuming); $da['authkey'] = $this->rock->jm->base64encode($this->rock->jm->strunlook($da['authkey'], $key)); $xhkey = getconfig('xinhukey'); if (isempt($xhkey)) { return returnerror( $this->rock->jm->base64decode('6K!35YWI5Yiw57O757uf6K6!572u5LiL6K6!572u5L!h5ZG85a6Y572Ra2V5') ); } if ($xhkey1 != $xhkey) { return returnerror( $this->rock->jm->base64decode('5L!h5ZG85a6Y572Ra2V55LiN5LiA6Ie077yM6K!36YeN5paw6K6!572u') ); } if (!contain(',' . $yuming . ',', ',' . $ym . ',')) { return returnerror('' . $ym . '不在签授域名里'); } $this->saveauther($da, $key); return returnsuccess(); } public function autherdel() { $aukey = m('option')->getval('auther_aukey'); m('option')->update('`value`=null', 'pid=-101'); if (!isempt($aukey)) { $barr = $this->getdata('auther', 'delkey', ['autherkey' => $aukey, 'randkey' => getconfig('randkey')]); return $barr; } return returnsuccess(); } }