A-A+

WHMCS自动根据用户IP地址来填充客户资料:对接其他 API能精确到街道和邮政编码

2023年07月19日 VPS评价 等您评论

WHMCS Hook

这是一个很简单的 Hook,用于完善你的 WHMCS 功能。

注意:您可以随意修改并二次发布我们的代码。

所用到的开源项目:https://github.com/zoujingli/ip2region

此功能可以在用户注册或登录的时候,自动根据用户的 IP 的地址来填充客户的地址字段。

此功能是完全离线的,所以数据比较少,但是也避免了网络 API 请求。

当然你也可以对接其他 API,这样甚至能精确到街道和邮政编码。

WHMCS HOOK

在此之前,您需要先引入 Ip2Region 类。

use WHMCS\Authentication\CurrentUser;

function updateClientInfo()
{
    $ip = $_SERVER['REMOTE_ADDR'];

    $ip2region = new Ip2Region();

    $geo = $ip2region->memorySearch($ip);
    $arr = explode('|', str_replace(['0|'], '|', isset($geo['region']) ? $geo['region'] : ''));

    $country = $arr[0];
    $province = $arr[2];
    $city = $arr[3];
    $isp = $arr[4];

    // 释放资源
    unset($ip2region);

    $currentUser = new CurrentUser();
    $selectedClient = $currentUser->client();

    if (!is_null($selectedClient)) {
        if ($selectedClient->state == '') {
            $selectedClient->state = $province;
        }

        if ($selectedClient->city == '') {
            $selectedClient->city = $city;
        }

        $selectedClient->save();
    }

    return [
        'country' => $country,
        'province' => $province,
        'city' => $city,
        'isp' => $isp,
    ];
}

随后,我们需要用到这两个 Hook,分别是 ClientAreaRegister 和 UserLogin。这意味着,代码将会在用户注册时和登录时执行,分别获取用户的 IP 地址并完成资料更新。

// 添加 Hook
add_hook('ClientAreaRegister', 1, 'updateClientInfo');
add_hook('UserLogin', 1, 'updateClientInfo');

应用此代码

VPS全科网【http://vpsqk.com】提示:您可以随意修改并二次发布我们的代码。

给我留言