| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- <?php namespace App\Servers\Aliyun;
- use Ixudra\Curl\Facades\Curl;
- /**
- * ip归属地
- *
- * @author 刘相欣
- *
- */
- class IpLocation{
- /**
- * 获取IP归属地
- * @param string $ip IP地址
- * @param string $field 获取字段,可以选字段
- *
- * @return string|array
- *
- * */
- public function getCityByIp( $ip='',$field='' ){
- // 获取IP
- $ip = $ip ? $ip : request()->ip();
- // 从缓存读取数据
- $result = cache('aliyunMarketGetCityByIp:'.ip2long($ip),[]);
- // 如果有数据
- if( $result ) return $field ? (isset($result[$field]) ? $result[$field] : '') : $result;
- // 读取AppCode
- $appcode = config('aliyun_appcode','3e494a5f38c44e0c97424fd122e348c3');
- // 提示未配置
- if( empty($appcode) ) ['error'=>'请联系管理员设置接口 appcode'];
- // 拼接路径
- $path = 'https://bf1c.api.huachen.cn/ip';//'https://hcapi20.market.alicloudapi.com/ip';
- // 头部信息
- $headers = ['Authorization:APPCODE '.$appcode];
- // 拼接参数
- $url = $path .'?ip='.$ip;
- // 接收返回值json格式并转数组
- $result = Curl::to($url)->withHeaders($headers)->asJsonResponse(true)->get();
- // 如果错误
- if( empty($result['data']) ) return $field ? '' : [];
- if( empty($result['ret']) ) return $field ? '' : [];
- // 如果错误$result['ret'].='=>'.$result['msg']
- if( $result['ret'] != 200 ) return $field ? '' : [];
- // 存储到缓存,有效期6小时
- cache(['aliyunMarketGetCityByIp:'.ip2long($ip)=>$result['data']],3600 * 6);
- // 如果存在返回国家/地区
- if( $field ) return isset($result['data'][$field]) ? $result['data'][$field] : '';
- // 否则返回整个数组数据
- return $result['data'];
- }
- }
|