You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中Google Places API返回200却提示INVALID_REQUEST问题

解决Google Places API迭代调用时的INVALID_REQUEST问题

我之前也碰到过一模一样的坑!第一次请求顺利拿到20条数据,但用next_page_token发起后续请求就报INVALID_REQUEST,直接在浏览器敲URL又完全正常,当时折腾了好一阵子才找到原因。结合我的踩坑经验,给你几个排查和解决方向:

  • 最可能的原因:请求发送时机太早
    Google Places API的next_page_token并不是生成后立刻就能用的,官方文档里隐晦提到过——token需要2-3秒的时间同步到他们的全球服务器集群。如果你的Laravel代码在拿到token后立刻发起下一次请求,服务器还没同步这个token,自然就返回无效请求了。

    解决方法很简单,在两次请求之间加个延迟:

    $response = Http::get('https://maps.googleapis.com/maps/api/place/nearbysearch/json', [
        'location' => '你的坐标',
        'radius' => 5000,
        'key' => env('GOOGLE_PLACES_API_KEY'),
    ]);
    
    $nextPageToken = $response->json('next_page_token');
    if ($nextPageToken) {
        // 强制等待3秒,给Google服务器同步token的时间
        sleep(3);
        // 发起下一页请求,只需要传pagetoken和key即可
        $nextResponse = Http::get('https://maps.googleapis.com/maps/api/place/nearbysearch/json', [
            'pagetoken' => $nextPageToken,
            'key' => env('GOOGLE_PLACES_API_KEY'),
        ]);
    }
    
  • 检查请求参数的一致性
    虽然你说浏览器访问没问题,但要确认后续请求的参数是否合规:后续请求不需要再传location、radius这些初始参数,只需要pagetoken和key。如果你的代码不小心重复传了和第一次不一致的参数(比如radius改了),也可能触发INVALID_REQUEST。

  • 排查HTTP客户端的头信息差异
    Laravel的Http客户端默认带的头信息可能和浏览器不一样,你可以尝试模拟浏览器的User-Agent发起请求:

    $nextResponse = Http::withHeaders([
        'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    ])->get('https://maps.googleapis.com/maps/api/place/nearbysearch/json', [
        'pagetoken' => $nextPageToken,
        'key' => env('GOOGLE_PLACES_API_KEY'),
    ]);
    

其中第一个延迟的方法是我当时解决问题的关键,你可以先试试这个方案,大概率能解决你的问题。

内容的提问来源于stack exchange,提问作者Nathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:22:40