所用到的开源项目: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
add_hook('ClientAreaRegister', 1, 'updateClientInfo');
add_hook('UserLogin', 1, 'updateClientInfo');
下载全部代码
https://github.com/iVampireSP/whmcs-auto-fill-client-address-by-ip