123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- <?php
- /*
- * 工具服务
- */
- namespace App\Services;
- class ToolService
- {
- // 静态对象
- protected static $instance = null;
- protected $apiUrls = [
- // ip编号信息
- 'ip-api'=>'http://ip-api.com/json/%s?lang=%s',
- // IP解析
- 'ip-api—data'=>'https://www.ip.cn/api/index?ip=%s&type=1',
- ];
- /**
- * @return static|null
- */
- public static function make(){
- if(!self::$instance){
- self::$instance = new static();
- }
- return self::$instance;
- }
- /**
- * 获取IP对应地址
- * @param $ip IP
- * @param $returnKey 返回数据格式:返回某个字段,空返回全部
- * @param $lang 返回数据语言格式:zh-CN(中文)、en(英文拼音)
- * @return array|bool
- */
- public function getIpAddress($ip, $returnKey = '', $lang='zh-CN'){
- $apiUrl = $this->apiUrls['ip-api'];
- if(empty($urls) || empty($ip)){
- return false;
- }
- $cacheKey = "caches:address:ip_".$ip.'_'.$returnKey;
- $result = RedisService::get($cacheKey);
- $data = isset($result['data']) && !is_array($result['data'])? trim($result['data']) : '';
- if(!empty($data)){
- return $data;
- }
- $apiUrl = sprintf($apiUrl, $ip, $lang);
- $result = httpRequest($apiUrl,'','get');
- $status = isset($result['status'])? $result['status'] : '';
- if($status == 'success'){
- $result = [
- 'country'=> isset($result['country'])? strtolower($result['country']) : '中国',
- 'countryCode'=> isset($result['countryCode'])? strtolower($result['countryCode']) : 'zh-CN',
- 'region'=> isset($result['region'])? $result['region'] : '',
- 'regionName'=> isset($result['regionName'])? $result['regionName'] : '',
- 'city'=> isset($result['city'])? $result['city'] : '',
- 'lat'=> isset($result['lat'])? $result['lat'] : '',
- 'lng'=> isset($result['lon'])? $result['lon'] : '',
- 'ip'=> isset($result['query'])? $result['query'] : '',
- ];
- $data = $returnKey && isset($result[$returnKey])? $result[$returnKey] : $result;
- if(!empty($data)){
- RedisService::set($cacheKey, ['apiUrl'=> $apiUrl, 'data'=> $data, 'result'=> $result], 3600);
- return $data;
- }
- }
- return false;
- }
- }
|