如何在Laravel中从IP获取国家

ix0qys7i  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(229)

我有创建自定义分析模块,在那里我可以跟踪游客活动,在这里我使用了Laravel包“stevebauman/位置”获取游客位置.
主要的问题是,当我静态地提供IP给变量时,这个IP为我提供了正确的位置。另一方面,当我动态地获得IP时,它只提供IP

$visitor = request()->ip();

我怎样才能得到国家名称,代码,邮政地址的IP在Laravel

$visitor = request()->ip();
    $traffic = PageVisits::where('ip_address', $visitor)->where('property_id', $id)
    ->whereMonth('created_at', Carbon::now()->month)->first();
    if(auth()->check() && auth()->user()->usertype == 'Admin'){
    
    }else{
        if (!$traffic) {

            $traffic = new PageVisits();
            $traffic->ip_address = $visitor;
            $traffic->property_id = $id;
            $position = Location::get('https://'.$visitor);
            $traffic->country = $position->countryName;
            $traffic->agency_id = $property->agency_id ?? '';
            $traffic->save();
        }
0pizxfdo

0pizxfdo1#

您可以创建服务,然后在控制器中使用该服务。

iecba09b

iecba09b2#

你可以创建文件夹与服务,但它〉〉〉〉我使用apiStack

<?php

namespace App\Services;

use Illuminate\Support\Facades\Http;

class IpStack
{

    protected $key;

    protected $baseUrl = 'http://api.ipstack.com/';

    public function __construct($key)
    {
        $this->key = $key;
    }

    public function get($ip)
    {
        // http://api.ipstack.com/(ip)?access_key=(key)
        $response = Http::baseUrl($this->baseUrl)
            ->get($ip, [
                'access_key' => $this->key,
            ]);

        return $response->json();
    }
}

强制呼入控制器

{
 $geoip = new IpStack(config('services.ipstack.key'));
            $response = $geoip->get(request()->ip());
}

相关问题