يُحدِّد الموقع باستخدام دالة geolocation، وإذا لم تتوفر الأذونات اللازمة أو كان المتصفح غير مدعوم، يُحدِّد الموقع عبر عنوان IP باستخدام واجهة API التي توفرها Naver.
قبل الاستخدام، احصل على مفتاح API من Naver عبر العنوان أدناه.
(https://www.ncloud.com/product/applicationService/geoLocation)
<?
function makeSignature($secretKey, $method, $baseString, $timestamp, $accessKey)
{
$space = ' ';
$newLine = "\n";
$hmac = $method.$space.$baseString.$newLine.$timestamp.$newLine.$accessKey;
$signautue = base64_encode(hash_hmac('sha256', $hmac, $secretKey,true));
return $signautue;
}
if($_POST['order'] == 'geolocation')
{
$hostNameUrl = 'https://geolocation.apigw.ntruss.com';
$requestUrl= '/geolocation/v2/geoLocation';
$accessKey = 'يرجى إدخال accessKey.';
$secretKey = 'يرجى إدخال secretKey.';
$ip = $_SERVER['REMOTE_ADDR'];
$timestamp = round(microtime(true) * 1000);
$baseString = $requestUrl.'?ip='.$ip.'&ext=t&responseFormatType=json';
$signautue = makeSignature($secretKey, 'GET', $baseString, $timestamp, $accessKey);
$url = $hostNameUrl.$baseString;
$is_post = false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, $is_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = array();
$headers[] = 'X-NCP-APIGW-TIMESTAMP: '.$timestamp;
$headers[] = 'X-NCP-IAM-ACCESS-KEY: '.$accessKey;
$headers[] = 'X-NCP-APIGW-SIGNATURE-V2: '.$signautue;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = json_decode(curl_exec ($ch), true);
if($response['geoLocation'])
{
$lat = $response['geoLocation']['lat'];
$lng = $response['geoLocation']['long'];
}else{
$lat = 37.535053;
$lng = 127.147263;
}
echo json_encode(array('latitude'=>$lat, 'longitude'=>$lng));
exit;
}
?>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>جارٍ تحديد الموقع...</title>
</head>
<body>
<div style="width: 100%; text-align: center; display: inline-block; ">
<p>جارٍ تحديد موقعك لضمان استخدام سلس.</p>
<p>يرجى <font color="RED"><strong>السماح</strong></font> بالوصول إلى موقعك.</p>
</div>
<script>
function setPositionByGeo(pos)
{
document.cookie = "latitude=" + pos.coords.latitude;
document.cookie = "longitude=" + pos.coords.longitude;
location.href = "<?=$_GET['url'] ? $_GET['url'] : '/'?>";
}
function setPositionByIP()
{
var xhr = new XMLHttpRequest();
var dat = new FormData();
dat.append("order", "geolocation");
xhr.open("POST", window.location.pathname);
xhr.send(dat);
xhr.onload = function()
{
if(xhr.status === 200 || xhr.status === 201)
{
var res = JSON.parse(xhr.responseText);
if(res.latitude&&res.longitude)
{
document.cookie = "latitude=" + res.latitude;
document.cookie = "longitude=" + res.longitude;
location.href = "<?=$_GET['url'] ? $_GET['url'] : '/'?>";
}
}
};
}
window.onload = function() {
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(setPositionByGeo, setPositionByIP);
else
setPositionByIP();
}
</script>
</body>
</html>