Google My Business API调用始终返回Invalid Request问题求助
问题排查与解决办法
1. 先确认Discovery文件没问题
你是靠Discovery File生成的本地gem,首先得确保这个JSON文件是Google My Business API V4的最新有效版本。私有API的Discovery文件容易有版本差异,或者你下载的文件本身有格式问题。
- 重新从官方指定渠道获取V4版本的Discovery JSON
- 对比你生成的
lib/google-apis-mybusiness_v4里的服务定义,和官方公开的accountmanagement API结构,重点看请求路径、必填参数这些地方有没有差异
2. 换种授权方式试试
官方gem的授权逻辑和你本地生成的可能不一样,试试这两种写法:
写法一:直接用UserRefreshCredentials
跳过ClientSecrets的封装,直接给service配置授权:
require "google/apis/mybusiness_v4" service = Google::Apis::MybusinessV4::MyBusinessService.new service.authorization = Google::Auth::UserRefreshCredentials.new( client_id: secrets.client_id, client_secret: secrets.client_secret, refresh_token: user.refresh_token, # 有refresh token的话加上 access_token: user.token, scope: "https://www.googleapis.com/auth/business.manage" ) response = service.list_accounts
写法二:手动加请求头
如果上面的不行,直接给请求塞Authorization头:
service = Google::Apis::MybusinessV4::MyBusinessService.new service.client_options.default_headers["Authorization"] = "Bearer #{user.token}" response = service.list_accounts
3. 检查生成的方法需要的参数
本地生成的list_accounts可能有必填参数你没传。去lib/google-apis-mybusiness_v4/generated/google/apis/mybusiness_v4/service.rb里看list_accounts的定义,确认是不是要传page_size、page_token这类参数。比如:
# 假设需要page_size参数 service.list_accounts(page_size: 10)
4. 开调试日志看具体错误
Google API的Invalid request一般藏着更详细的错误信息,开调试日志看完整请求响应:
require "logger" service = Google::Apis::MybusinessV4::MyBusinessService.new service.logger = Logger.new(STDOUT) service.logger.level = Logger::DEBUG # 再执行请求 service.list_accounts
日志会输出完整的请求URL、头信息、响应内容,能看到具体错在哪(比如权限不够、参数缺了、API版本不对)
5. 再核对API权限
虽然你用了business.manage范围,但Google My Business API有些操作可能需要更细的权限,或者你的项目没拿到API访问权限。再确认:
- 你的Google Cloud项目已经被批准访问My Business V4 API
- 用户授权时确实请求了正确的scope,检查授权流程里的scope和代码里的一致
内容的提问来源于stack exchange,提问作者Maxim
相关产品推荐
相关产品推荐

