我目前正在使用各种 Google API。我已经批准了对 Google Business API 的访问,并成功使用 PHP SDK 对其端点进行了多次调用;甚至调用业务验证 API 中的某些端点。但是,当我请求已定义位置的 fetchVerificationOptions 时,收到 400 错误。
Google\Service\Exception { "error": { "code": 400, "message": "Request contains an invalid argument.", "errors": [ { "message": "Request contains an invalid argument.", "domain": "global", "reason": "badRequest" } ], "status": "INVALID_ARGUMENT", "details": [ { "@type": "type.googleapis.com/google.rpc.BadRequest" } ] } }
我已验证传入的位置正确,格式为“locations/<LOCATION_ID>”。我在许多其他成功的调用中使用了相同的密钥。
我已经多次阅读了我能找到的关于这个主题的所有文档。该错误让我认为我发送的数据是错误的,但文档对于预期的内容非常清楚 - 语言代码和可选的上下文。在我当前的情况下,该位置是 CUSTOMER_LOCATION_ONLY 业务类型,并且需要通过上下文在此请求中提供 PostalAddress 对象。 SDK 通过为拼图的每一部分提供对象,使这一切看起来更加容易。
这是我的相关 PHP 代码:
$options = new FetchVerificationOptionsRequest; $options->languageCode = 'en-US'; $context = new ServiceBusinessContext; $context->setAddress($postalAddress); $options->setContext($context); $verificationOptions = GoogleBusinessProfileApi::getVerificationService()->locations->fetchVerificationOptions($locationName, $options);
我已验证上述代码中的 $postalAddress
是 Google\Service\MyBusinessVerifications\PostalAddress
的实例,其中包含有效的地址详细信息。
我已验证上述代码中的 $locationName
具有正确的值;我的位置 ID,格式为“locations/<LOCATION_ID>”。
上面代码中的 GoogleBusinessProfileApi::getVerificationService()
返回一个 Google\Service\MyBusinessVerifications
实例,其中包含我的 Google 客户端和所有身份验证内容。我在所有交互中都使用这种方法,并且它们工作得非常正常。另外,该错误并不表明该部件存在问题。
还值得注意的是,在我的 Google API 开发控制台上,我可以看到这些请求传入并以 400 响应结束。不过,这只是指标看起来的情况。我找不到有关请求的更深入、更详细的信息。
我正在寻找任何东西——方向、想法、想法。以前还有其他人处理过这个吗?我错过了一些明显的东西吗?这是我的代码还是 API 本身的问题?有人知道如何在 Google 控制台上更深入地查找这些错误吗?
谢谢!
解决方案:
将 PostalAddress 子区域设置为 null。
详细信息:
在同事的帮助下,我们弄清楚了发生了什么。我更改了代码以调用旧的、已弃用的 API 版本。这返回了一条更有用的错误消息,指出美国在其地址中不使用子区域。我在 PostalAddress 对象上进行了设置,因此我将其更改为始终为 null,并且该请求在旧 API 和新 API 上均有效。
这个问题有很多令人沮丧的地方。
虽然现在这在网络上似乎不是一个大问题,但我确实希望有一天这可以帮助其他人避免浪费时间。
~干杯~