如何获得每位用户的本地货币

时间:2019-05-23 13:41:48

标签: vue.js laravel-5 currency

我正在使用Laravel 5.6和Vue.js作为前端。我需要自动用他的货币代码注册一个用户。有什么建议吗?

我尝试了很多软件包(geoip,geolocal),但对我来说都不起作用。

$location = geoip()->getLocation();

1 个答案:

答案 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令牌,因此您需要首先从它们的站点获取它们(都是免费的)。