如何解决 You have exceeded your daily request quota for this API
结论
这个错误不一定说明请求量真的超过了限制。对于 Google Maps JavaScript API,更常见的原因是:浏览器当前使用的 API Key 所属项目没有有效的结算账户,或者结算状态、API 启用状态、配额、Key 限制最近发生了变化。
账户过去正常运行了 4 年,也不能排除结算失败、信用卡过期、项目绑定变更、API Key 被替换或配额被调整等情况。排查时,应以页面实际加载的 Key 及其所属 Google Cloud 项目为准,不能只确认某个账户已经开通 billing。
先确认报错来自哪个项目
在浏览器开发者工具的 Network 面板中找到 Maps JavaScript API 请求,例如:
https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places
确认请求中的 key 是预期使用的 Key,同时检查:
- 生产环境是否仍在引用旧 Key。
- CDN、缓存或环境变量中是否保留了旧配置。
- 页面是否重复加载了 Google Maps JavaScript API。
- 不同子域名是否使用了不同 Key。
- 前端构建产物中的 Key 是否与 Google Cloud Console 中检查的 Key 一致。
需要注意,billing 绑定的是 Google Cloud 项目,不是 Key。即使另一个项目已经启用结算,当前 Key 也不会因此自动获得结算能力。
检查结算账户状态
进入 Google Cloud Console,切换到 API Key 所属项目,然后打开 Billing 页面:
- 确认项目已经关联结算账户。
- 确认结算账户有效,没有关闭、暂停或处于待验证状态。
- 检查信用卡是否过期、扣款是否失败。
- 检查是否存在付款资料验证、消费上限或账户权限问题。
- 如果近期迁移过项目或结算账户,确认绑定关系没有丢失。
如果页面显示项目已经关联 billing,但错误仍然存在,可以尝试解除并重新关联结算账户。这个操作可能影响项目中的其他付费服务,因此需要先确认影响范围。结算异常也可能需要通过 Google Cloud Console 提交 Billing Support 工单。
检查相关 API 是否已启用
报错来自哪个接口,就要在同一个项目中启用对应的 API。地图和地点搜索通常会同时用到多个服务,例如:
- Maps JavaScript API
- Places API
- Places API (New)
- Geocoding API
- Directions API
不能只确认笼统的 “Google Locations API” 已经启用。Google Cloud Console 中的服务名称可能随产品调整而变化,需要根据实际调用的端点和前端使用的库逐项核对。
例如,页面使用 Places Library 时,可能会这样加载:
<script
async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places&callback=initMap">
</script>
此时至少要检查 Maps JavaScript API,并确认当前代码依赖的 Places 服务已在该 Key 所属项目中启用且可以计费。
检查每日配额和限制
在 Google Cloud Console 中进入:
APIs & Services → Enabled APIs & services → 对应 API → Quotas
重点检查:
- 每日请求配额是否被手动设得过低。
- 每分钟请求数或每用户每分钟请求数是否已经耗尽。
- 是否存在组织策略或管理员设置的配额上限。
- 当天流量是否突然增加。
- API Key 是否泄露并被其他网站使用。
- 是否刚提交过配额调整,导致限制发生变化。
如果配额页面显示实际使用量已经达到上限,应先查清流量来源,再申请提高配额。直接提高配额可能会增加 Key 泄露带来的费用风险。
检查 API Key 限制
浏览器端的 Maps JavaScript API 通常使用 HTTP referrers (web sites) 限制。确认允许列表覆盖当前域名和协议,例如:
https://example.com/*
https://www.example.com/*
https://*.example.com/*
下面这种配置经常导致网站上线后突然失败:
http://example.com/*
如果网站已经切换到 HTTPS,上面的规则就无法匹配,需要改为:
https://example.com/*
还要检查 API restrictions。如果选择了 “Restrict key”,需要将实际使用的 API 全部加入允许列表。不要把浏览器端 Key 配置为只允许服务器 IP,也不要使用仅允许 Maps JavaScript API 的 Key 调用服务器端 Places 或 Geocoding 接口。
排查时可以短暂移除 Key 限制,但只能用于受控测试。确认原因后应立即恢复限制,防止 Key 被滥用。
检查前端加载方式
确保 API 只加载一次,并在脚本加载完成后初始化地图:
<div id="map"></div>
<script>
function initMap() {
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 31.2304, lng: 121.4737 },
zoom: 12
});
}
</script>
<script
async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
如果项目使用 Places Library:
<script
async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places&callback=initMap">
</script>
不要同时通过主题、插件、标签管理器和业务代码加载多个不同的 Key。重复加载会让控制台信息混在一起。看起来页面使用的是已经启用结算的新 Key,实际报错的却可能是旧 Key。
查看更具体的错误信息
You have exceeded your daily request quota 是一条比较笼统的提示。控制台附近通常还会显示更具体的错误码,例如:
BillingNotEnabledMapErrorApiNotActivatedMapErrorInvalidKeyMapErrorRefererNotAllowedMapErrorOverQuotaMapError
具体错误码通常更有助于定位问题。建议同时查看:
- 浏览器 Console 中的完整错误信息。
- Network 面板中 Maps 请求的 URL 和响应。
- Google Cloud Console 中的 Metrics 与 Quotas。
- Billing 页面的异常通知。
- 项目的 Audit Logs,确认近期是否有人修改了 API、Key、配额或结算配置。
建议的排查顺序
按照下面的顺序处理通常更快:
- 在浏览器 Network 面板中确认页面实际使用的 API Key。
- 找到该 Key 所属的 Google Cloud 项目。
- 确认该项目绑定了有效的结算账户。
- 确认 Maps JavaScript API 及相关服务已经启用。
- 查看每日及每分钟配额是否耗尽或被调低。
- 检查 Key 的 referrer 和 API restrictions。
- 检查是否存在异常流量或 Key 泄露。
- 修正配置后清理 CDN、页面和浏览器缓存,然后重新测试。
- 如果所有配置均正常但错误仍然存在,携带项目 ID、具体错误码和发生时间联系 Google Maps Platform Support。
不要在工单、日志截图或公开页面中暴露完整的 API Key。如果确认 Key 已经泄露,应创建新 Key、更新生产配置,在验证新 Key 正常后撤销旧 Key,并为新 Key 配置正确的域名和 API 限制。
备注:内容仅供参考。
