使用PHP调用Google Geolocation API通过MAC地址定位异常求助
我之前也碰到过一模一样的情况,大概率是请求格式不对或者API没能正确识别你提供的MAC地址导致的,给你一步步排查的思路:
先确认请求的JSON结构是否符合API要求
Google Geolocation API明确要求MAC地址必须放在wifiAccessPoints数组中,每个数组元素至少包含macAddress字段(搭配signalStrength这类可选参数还能提升定位精度)。如果你的请求没正确构造这个结构,API会直接默认用请求IP来定位。给你一个标准的PHP cURL请求示例:$apiKey = '你的Google API密钥'; $requestUrl = "https://www.googleapis.com/geolocation/v1/geolocate?key=$apiKey"; // 构造符合要求的请求体 $postData = [ 'wifiAccessPoints' => [ [ 'macAddress' => 'AA:BB:CC:DD:EE:FF', // 目标MAC地址 'signalStrength' => -60 // 可选参数,信号强度值有助于提高定位精度 ] ] ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $requestUrl); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $result = json_decode($response, true); print_r($result);检查API密钥的配置权限
确保你的Google Cloud API密钥已经启用了Geolocation API,别搞混成其他地图类API(比如Maps JavaScript API)。另外,这个API是付费服务(有免费额度),如果没设置计费账户,可能会触发隐性限制,导致API无法正常使用MAC地址定位,转而用IP作为备选方案。验证MAC地址的有效性
你提供的MAC地址必须是公开存在的Wi-Fi AP的地址,Google的定位数据库里得有对应的记录才行。如果是本地设备的私有MAC(比如手机随机生成的)或者虚构的MAC,API根本识别不了,自然会返回请求IP的位置。可以找一个已知的公共AP MAC地址测试,看能不能返回正确位置。通过返回结果判断是否触发了IP fallback
看返回JSON里的accuracy字段:如果是MAC定位,精度通常在10-100米左右;如果是IP定位,精度一般在1000米以上(甚至几十公里)。要是你的返回精度很高,说明MAC定位已经生效,否则就是API没识别到MAC,用了IP兜底。
按照这几步排查,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Aldo

