我正在使用Laravel 5.6和Vue.js作为前端。我需要自动用他的货币代码注册一个用户。有什么建议吗?
我尝试了很多软件包(geoip,geolocal),但对我来说都不起作用。
$location = geoip()->getLocation();
答案 0 :(得分:0)
我使用了两项服务来获取国家/地区代码。如果由于某种原因(例如超出限制)而无法使用,则会尝试下一项服务:
/**
* Make cUrl request.
*/
private static function _getCurl(string $url, int $timeout = 400):?string {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $timeout); // If it takes too long just try the next api
curl_setopt($ch, CURLOPT_TIMEOUT_MS, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
/**
* Try to get the country code of the current user based on it's ip.
*/
public static function getCountryCode():?string {
// https://hostip.info/ - unlimited? requests per day
// https://ipinfo.io/ - 1000 requests per day
// https://ipdata.co/ - 1500 requests per day
// https://ipstack.com/ - 10000 requests per month (not used at the moment)
// Get country code:
$ip = $_SERVER['HTTP_CLIENT_IP']);
$countryCode = null;
if (!$countryCode) { // Try hostip.info
try {
$output = self::_getCurl('https://api.hostip.info/get_json.php?ip=' . $ip);
$output = json_decode($output);
$countryCode = ($output->country_code == 'XX') ? null : $output->country_code;
}
catch (Throwable $t) {}
}
if (!$countryCode) { // Try ipinfo.io
try {
$output = self::_getCurl('http://ipinfo.io/' . $ip . '/json?token=[ipinfo.io TOKEN HERE]');
$output = json_decode($output);
$countryCode = ($output->country == 'XX') ? null : $output->country;
}
catch (Throwable $t) {}
}
if (!$countryCode) { // Try ipdata.co
try {
$output = self::_getCurl('https://api.ipdata.co/' . $ip . '?api-key=[ipdata.co TOKEN HERE]');
$output = json_decode($output);
$countryCode = ($output->country_code == 'XX') ? null : $output->country_code;
}
catch (Throwable $t) {}
}
return $countryCode;
}
这是大类的切入点,因此您可能需要在这里和那里进行一些调整。 ipinfo.io和ipdata.co需要api令牌,因此您需要首先从它们的站点获取它们(都是免费的)。