<?php namespace app\common\library; use app\common\model\Config; use app\common\model\OrderStatus; use app\common\model\User; use think\Hook; use think\Request; use app\common\library\QRcode; /** * 公共类 */ class Common { /** * curl 请求 * @param $url string 请求地址 * @param $headers json 请求头 * @param $body json 请求体 * @return mixed */ public static function curlRequest($url, $headers = [], $body = [], $method = "GET") { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);//设置请求头 curl_setopt($ch, CURLOPT_POSTFIELDS, $body);//设置请求体 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); //定义请求类型 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTP_VERSION, 'CURL_HTTP_VERSION_1_1'); $output = curl_exec($ch); curl_close($ch); $arr = json_decode($output, true); return $arr; } /** * 成功 * @param $msg * @return array */ public static function return_success($msg,$data = null){ $result = [ 'code' => 1, 'msg' => $msg, 'data' =>$data ]; return $result; die; } /** * 失败 * @param $msg * @return array */ public static function return_error($msg,$data = null){ $result = [ 'code' => 0, 'msg' => $msg, 'data' => $data ]; return $result; die; } public static function get_ffid($invite_code){ $f = \app\common\model\User::where('id',$invite_code)->field('fid')->find(); if ($f) return $f->fid; else return 0; } /** * 生成二维码 */ public static function generate_qrcode($value){ $dir = dirname(realpath(dirname($_SERVER['SCRIPT_FILENAME']))) . '/public/verify'; if(!file_exists($dir)){ //检查是否有该文件夹,如果没有就创建,并给予最高权限 mkdir($dir, 0700,true); } $filename = $dir.'/'.$value.'.png'; QRcode::png($value,$filename); return 'http://'.$_SERVER['SERVER_NAME']."/verify/".$value.'.png'; } /** * 生成二维码 */ public static function setqrcode($value,$name){ $dir = dirname(realpath(dirname($_SERVER['SCRIPT_FILENAME']))) . '/public/user'; if(!file_exists($dir)){ //检查是否有该文件夹,如果没有就创建,并给予最高权限 mkdir($dir, 0700,true); } $filename = $dir.'/'.$name.'.png'; QRcode::png($value,$filename,QR_ECLEVEL_L,7); return 'http://'.$_SERVER['SERVER_NAME']."/user/".$name.'.png'; } public static function setintivecode($user_id,$type){ $g = $type==1 ? 'invite' : 'mer'; $name = $g.$user_id."_".time(); $address = 'http://'.$_SERVER['SERVER_NAME'].'/build/#/'.$type.'/'.$user_id; $url = self::setqrcode($address,$name); return $url; } /** * 订单操作记录 * @param int $change_message 操作备注 * @param int $oid 订单id */ public static function order_status($oid, $change_message) { OrderStatus::create(['oid' => $oid,'change_message' => $change_message, 'change_time' => time()]); } /** * 判断金额在哪个区间 */ public static function checkMoneyGrade($money){ if ($money<50000){ return false; }elseif ($money>=50000 && $money<150000){ return 50000; }elseif ($money>=150000 && $money<450000){ return 150000; }elseif ($money>=450000 && $money<1350000){ return 450000; }elseif ($money>=1350000 && $money<4000000){ return 1350000; }elseif ($money>=4000000 && $money<12000000){ return 4000000; }elseif ($money>=12000000 && $money<36000000){ return 12000000; }elseif ($money>=36000000 && $money<100000000){ return 36000000; }elseif ($money>=100000000 && $money<300000000){ return 100000000; }elseif ($money>=300000000 && $money<600000000){ return 300000000; }elseif ($money>=600000000){ return 600000000; } } /** * 生成订单唯一id * $user_id 用户id * @return string */ public static function getNewOrderId($user_id) { $str = date('Ymd').$user_id.substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); return $str; } /** * 身份证验证 * @param $card * @return bool */ public static function setCard($card){ $city = [11=>"北京",12=>"天津",13=>"河北",14=>"山西",15=>"内蒙古",21=>"辽宁",22=>"吉林",23=>"黑龙江 ",31=>"上海",32=>"江苏",33=>"浙江",34=>"安徽",35=>"福建",36=>"江西",37=>"山东",41=>"河南",42=>"湖北 ",43=>"湖南",44=>"广东",45=>"广西",46=>"海南",50=>"重庆",51=>"四川",52=>"贵州",53=>"云南",54=>"西藏 ",61=>"陕西",62=>"甘肃",63=>"青海",64=>"宁夏",65=>"新疆",71=>"台湾",81=>"香港",82=>"澳门",91=>"国外 "]; $tip = ""; $match = "/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/"; $pass= true; if(!$card || !preg_match($match,$card)){ //身份证格式错误 $pass = false; }else if(!$city[substr($card,0,2)]){ //地址错误 $pass = false; }else{ //18位身份证需要验证最后一位校验位 if(strlen($card) == 18){ $card = str_split($card); //∑(ai×Wi)(mod 11) //加权因子 $factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]; //校验位 $parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ]; $sum = 0; $ai = 0; $wi = 0; for ($i = 0; $i < 17; $i++) { $ai = $card[$i]; $wi = $factor[$i]; $sum += $ai * $wi; } $last = $parity[$sum % 11]; if($parity[$sum % 11] != $card[17]){ $pass =false; } }else{ $pass =false; } } if(!$pass) return false;/* 身份证格式错误*/ return true;/* 身份证格式正确*/ } /** * 高德地图api根据ip获取地区 */ public static function gaoDegetAreaToIp(){ $ip = request()->ip(); $content = file_get_contents("http://restapi.amap.com/v3/ip?key=7b60be14348558ca73ea081b3e871c6e&ip={$ip}"); $json = json_decode($content,true); return $json; } /** * 获取当前的经纬度 */ public static function get_ipjwd(){ $ip = request()->ip(); //获取百度地图apikey $api_key = Config::get_values('baidu_api_server'); if ($ip=='127.0.0.1') {//如果获取到的ip为127.0.0.1 会报错 在这随便给一个ip $ip='58.30.228.35'; } $content = file_get_contents("http://api.map.baidu.com/location/ip?ak=$api_key&ip={$ip}&coor=bd09ll"); $json = json_decode($content); $data=array(); $data['log']=$json->{'content'}->{'point'}->{'x'};//按层级关系提取经度数据 $data['lat']=$json->{'content'}->{'point'}->{'y'};//按层级关系提取纬度数据 $data['address']=$json->{'content'}->{'address'};//按层级关系提取address数据 return $data; } /** * 计算距离 * 1.纬度1,经度1,纬度2,经度2 * 2.返回结果是单位是KM。 * 3.保留一位小数 */ public static function getDistance($lat2,$lng2,$lat='',$log='') { $user = app()->session->get('us'); $userinfo = User::get($user['id']); if ($lat && $log) { $lng1 = $log; $lat1 = $lat; }elseif ($userinfo && $userinfo['now_lat'] && $userinfo['now_log']){ $lng1 = $userinfo['now_log']; $lat1 = $userinfo['now_lat']; }else{ return "0"; } // $userinfo = User::get($user['id']); // if ($userinfo && $userinfo['now_lat'] && $userinfo['now_log']){ // $lng1 = $userinfo['now_log']; // $lat1 = $userinfo['now_lat']; // }else{ // if (!$lat2 || !$lng2) // return '1'; // $ip = request()->ip(); // //获取百度地图apikey // $api_key = Config::get_values('baidu_api_server'); // if ($ip=='127.0.0.1') {//如果获取到的ip为127.0.0.1 会报错 在这随便给一个ip // $ip='58.30.228.35'; // } // $content = file_get_contents("http://api.map.baidu.com/location/ip?ak=$api_key&ip={$ip}&coor=bd09ll"); // $json = json_decode($content); // $lng1=$json->{'content'}->{'point'}->{'x'};//按层级关系提取经度数据 // $lat1=$json->{'content'}->{'point'}->{'y'};//按层级关系提取纬度数据 // } //将角度转为狐度 $radLat1 = deg2rad($lat1);//deg2rad()函数将角度转换为弧度 $radLat2 = deg2rad($lat2); $radLng1 = deg2rad($lng1); $radLng2 = deg2rad($lng2); $a = $radLat1 - $radLat2; $b = $radLng1 - $radLng2; $s = 2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6371; return round($s,1); } }