当前位置: 首页 > article >正文

使用腾讯地图的 IP 定位服务。这里是正确的实现方式

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;

class CheckXinjiangIp
{
    protected $key = ' ';  // 你的腾讯地图 key

    public function handle(Request $request, Closure $next)
    {
        $ip = $request->ip();
        
        if ($ip === '127.0.0.1') {
            return $next($request);
        }

        // 缓存24小时
        $location = Cache::remember('ip_location_' . $ip, 60 * 24, function () use ($ip) {
            $response = Http::get('https://apis.map.qq.com/ws/location/v1/ip', [
                'key' => $this->key,
                'ip' => $ip
            ]);
            
            return $response->json();
        });

        // 检查是否是新疆地区
        if (isset($location['result']['ad_info']['province']) 
            && $location['result']['ad_info']['province'] === '新疆') {
            return $next($request);
        }

        // 非新疆地区返回JSON响应
        return response()->json([
            'code' => 403,
            'msg' => '非新疆地区访问',
            'data' => [
                'redirect' => true,
                'path' => '/pages/banners/index'
            ]
        ]);
    }
}

腾讯地图 IP 定位服务的特点:

  • 需要在请求参数中带上 key
  • 返回的地区信息更准确
  • 支持 HTTPS
  • 有每日免费配额

返回数据示例:

{
    "status": 0,
    "message": "Success",
    "result": {
        "ip": "xxx.xxx.xxx.xxx",
        "location": {
            "lat": 43.92172,
            "lng": 87.46991
        },
        "ad_info": {
            "nation": "中国",
            "province": "新疆",
            "city": "乌鲁木齐市",
            "district": "渠道"
        }
    }
}


http://www.kler.cn/a/389636.html

相关文章:

  • JWT深度解析:Java Web中的安全传输与身份验证
  • golang如何实现sse
  • js 获取某日期到现在的时长 js 数字补齐2位
  • DataWorks on EMR StarRocks,打造标准湖仓新范式
  • 如何用WordPress和Shopify提升SEO表现?
  • 【再谈设计模式】抽象工厂模式~对象创建的统筹者
  • 字节青训-游戏排名第三大的分数、补给站最优花费问题
  • vite-plugin-electron 库作用
  • 细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的另一种方法
  • 5G NR:各物理信道的DMRS配置
  • 【划分型 DP-最优划分】力扣2707. 字符串中的额外字符
  • 解决程序因缺少xinput1_3.dll无法运行的有效方法,有效修复丢失xinput1_3.dll
  • WPF的<ContentControl>控件
  • 常用的损失函数pytorch实现
  • 批量清除Word Excel PPT文件打开密码
  • 让redis一直开启服务/自动启动
  • wordpress站外调用指定ID分类下的推荐内容
  • i2c-tools 4.3 for Android 9.0
  • stm32 ADC实例解析(3)-多通道采集互相干扰的问题
  • PySimpleGUI库和pymysql库
  • 探索计算机互联网的奇妙世界:从基础到前沿的无尽之旅
  • 2024 年 Java 面试正确姿势(1000+ 面试题附答案解析)
  • 算法学习第一弹——C++基础
  • Hive简介 | 体系结构
  • 青训3_1110_01 构造特定数组的逆序拼接
  • 性能飙升!时间序列+预训练强强联合,轻松迈入顶刊门槛!