$time) { $dian_arr[$index]['dian_1'] = explode(':', $Elect[$index])[3]; $dian_1 = explode(':', $Elect[$index])[3]; } } // 计算服务费 $fu_1 = '0.00'; $ServiceFee = str_replace('服务费:', '', $fu); $Elect = explode(',', $ServiceFee); $fu_arr = []; for ($index = 0; $index < count($Elect); $index++) { $fu_arr[$index]['time_interval'] = substr($Elect[$index], 0, 11); $start_time = substr($Elect[$index], 0, 5); $end_time = substr($Elect[$index], 6, 5); $fu_arr[$index]['price'] = substr($Elect[$index], 12, 4); $fu_arr[$index]['fu_1'] = ''; if ($start_time < $time && $end_time > $time) { $fu_arr[$index]['dian_1'] = explode(':', $Elect[$index])[3]; $fu_1 = explode(':', $Elect[$index])[3]; } } foreach ($dian_arr as $key => &$value) { $value['dian_1'] = false; $start_time = substr($value['time_interval'], 0, 5); $end_time = substr($value['time_interval'], 6, 5); if ($start_time < $time && $end_time > $time) { $value['dian_1'] = true; } foreach ($fu_arr as $kk => $vv) { if ($value['time_interval'] == $vv['time_interval']) { $value['price'] = number_format((double)$value['price'], 4); $value['fu_price'] = number_format((double)$vv['price'], 4); $value['total_price'] = number_format($vv['price'] + $value['price'], 4); } else { continue; } } } return ['time_price' => number_format($dian_1 + $fu_1, 4), 'price_list' => $dian_arr]; } function getMonthDate($date) { $date_t = array(); $date_t[] = $date; for ($i = 0; $i < 4; $i++) { $this_date = strtotime($date); $next_date = date("Y-m-d", strtotime('next monday', $this_date)); $date_t[] = $next_date; $date = $next_date; } return $date_t; } function getSeasonDate($date) { $date_t = array(); $date_t[] = $date; for ($i = 0; $i < 2; $i++) { $this_date = strtotime($date); $next_date = date("Y-m-d", strtotime('next month', $this_date)); $date_t[] = $next_date; $date = $next_date; } return $date_t; } function getYearDate($date) { $date_t = array(); $date_t[] = $date; for ($i = 0; $i < 11; $i++) { $this_date = strtotime($date); $next_date = date("Y-m-d", strtotime('next month', $this_date)); $date_t[] = $next_date; $date = $next_date; } return $date_t; } function getDayDate($date) { $date_t = array(); $date_t[] = $date; $this_date = strtotime($date); $end_date = date("Y-m-d H:i:s", strtotime('+4 hour -1 second', $this_date)); $date_end[] = $end_date; for ($i = 0; $i < 5; $i++) { $this_date = strtotime($date); $next_date = date("Y-m-d H:i:s", strtotime('+4 hour', $this_date)); $this_date_end = strtotime($end_date); $next_date_end = date("Y-m-d H:i:s", strtotime('+4 hour', $this_date_end)); $date_end[] = $next_date_end; $date_t[] = $next_date; $date = $next_date; $next_date_end = date("Y-m-d H:59:59", strtotime($next_date_end)); $end_date = $next_date_end; } $kk['start_time'] = $date_t; $kk['end_time'] = $date_end; return $kk; } function getDistance($lat1, $lng1, $lat2, $lng2) { $earthRadius = 6367000; $lat1 = ($lat1 * pi()) / 180; $lng1 = ($lng1 * pi()) / 180; $lat2 = ($lat2 * pi()) / 180; $lng2 = ($lng2 * pi()) / 180; $calcLongitude = $lng2 - $lng1; $calcLatitude = $lat2 - $lat1; $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2); $stepTwo = 2 * asin(min(1, sqrt($stepOne))); $calculatedDistance = $earthRadius * $stepTwo; return round($calculatedDistance / 1000, 2); } function Encrypt($data) { $aes = new Aes(); return $aes->encrypt($data); } function Decrypt($data) { $aes = new Aes(); return $aes->decrypt($data); } function HmacMD5($data) { $md5 = new HMACMD5(); return $md5->HMAC($data); } function CurlSend($url, $data = '', $token = '') { $data = json_encode($data); // echo $data; $ch = curl_init(); $headers = array(); if ($token) { $headers[] = 'Authorization: Bearer ' . $token; } $headers[] = 'Content-Type: application/json;charset=utf-8'; $headers[] = 'Content-Length: ' . strlen($data); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $curl_return = curl_exec($ch); curl_close($ch); return json_decode(trim($curl_return), true); } function checkParams($params) { $arr = ['OperatorID', 'Data', 'TimeStamp', 'Seq', 'Sig']; // 参数检查 foreach ($arr as $v) { if (empty($params[$v])) { return $v; } } return 2; } function checkSig($OperatorID, $params) { $sig = $OperatorID . $params['Data'] . $params['TimeStamp'] . $params['Seq']; $ecry_sig = $this->HmacMD5($sig); if ($params['Sig'] != $ecry_sig) { return 1; } return 2; } function signToken() { $key = config('hard.DataSecretIV'); //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当 于加密中常用的 盐 salt $token = array( "iss" => $key, //签发者 可以为空 "aud" => '', //面象的用户,可以为空 "iat" => time(), //签发时间 "nbf" => time() + 1, //在什么时候jwt开始生效 (这里表示生成100秒后才生效) "exp" => time() + 7200, //token 过期时间 "data" => [ //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对 'name' => 'zuxing' ] ); // print_r($token); $jwt = JWT::encode($token, $key, "HS256"); //根据参数生成了 token return $jwt; } //验证token function checkToken_assess($token) { $key = config('hard.DataSecretIV'); $key = new Key($key, 'HS256'); $status = array("code" => 2); try { JWT::$leeway = 60;//当前时间减去60,把时间留点余地 $decoded = JWT::decode($token, $key, array('HS256')); //HS256方式,这里要和签发的时候对应 $arr = (array)$decoded; $res['code'] = 1; $res['data'] = $arr['data']; return 2; } catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确 $status['msg'] = "签名不正确"; return 1; } catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用 $status['msg'] = "token失效"; return 1; } catch (\Firebase\JWT\ExpiredException $e) { // token过期 $status['msg'] = "token失效"; return 1; } catch (\Exception $e) { //其他错误 $status['msg'] = "未知错误"; return 1; } } function encodeData($data, $params, $ret, $msg = '') { $data = json_encode($data); $data = $this->Encrypt($data); $seq = empty($Seq) ? '0001' : $params['Seq']; $datetime = empty($TimeStamp) ? date('YmdHis') : $params['TimeStamp']; $sig = $params['OperatorID'] . $data . $datetime . $seq; $s = $this->HmacMD5($sig); return json(['Msg' => $msg, 'Ret' => $ret, 'Data' => $data, 'Sig' => $s]); } function generate_password($length) { $chars = '0123456789'; $time = time(); $password = config('hard.OperatorID') . $time; for ($i = 0; $i < $length; $i++) { $password .= $chars[mt_rand(0, strlen($chars) - 1)]; } return $password; } }