我目前正在与各种谷歌api工作。我已经批准了对Google Business API的访问,并成功地使用PHP SDK对其端点进行了几次调用;甚至调用业务验证API中的一些端点。然而,当我请求fetchVerificationOptions的一个定义的位置,我得到一个400错误。
GoogleServiceException
{
"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/
我已经多次阅读了我能找到的关于这个主题的所有文档。这个错误使我认为我发送的数据是错误的,但是文档非常清楚所期望的-语言代码和可选的上下文。在我当前的示例中,位置是一个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
是GoogleServiceMyBusinessVerificationsPostalAddress
的一个实例,它持有有效的地址详细信息。
我已经验证了上面代码中的$locationName
的值是正确的;我的位置ID,格式为"locations/
上面代码中的GoogleBusinessProfileApi::getVerificationService()
返回GoogleServiceMyBusinessVerifications
的实例,其中包含我的Google客户端和所有认证内容。我在所有的互动中都使用这种方法,而且效果非常正常。另外,这个错误并不表示这个部件有问题。
同样值得注意的是,在我的Google API Dev Console上,我可以看到这些请求进入并以400响应结束。不过,这些指标似乎也就到此为止了。我找不到更深入、更详细的请求信息。
我在寻找任何东西-方向,想法,想法。有人以前处理过这个问题吗?我错过了什么明显的东西吗?这是我的代码或API本身的问题?有谁知道我如何在Google控制台上更深入地挖掘这些错误吗?
谢谢!
解决方案:
将PostalAddress sublocality设置为null
细节:
在一位同事的帮助下,我们弄清楚发生了什么。我更改了代码以调用旧的、已弃用的API版本。这将返回一个更有用的错误消息,说明美国在其地址中不使用子位置。我在我的PostalAddress对象上设置它,所以我将它更改为始终为null,并且请求在新旧API上都有效。
在这个问题上有很多令人沮丧的地方。
- 错误消息。来自"新"one_answers"改进"的回应;API应该告诉我尽可能多,如果不是比旧版本更多。
- 文档。对于这个特殊的请求,我找不到任何关于美国次地区的说明。
- 帮助。在写这篇文章的时候,在谷歌上搜索关于这个话题的任何东西基本上都没有返回任何东西。
- Sublocalities。我的系统是这样设置的,我们实际上使用Google的位置查找来获得一个有效的PostalAddress,以确保我们发送给他们的数据是有效的。在这种情况下,我们使用的地址是从谷歌返回给我们的……有一个次局部性。这个小地方使用县名;这是我们在美国使用的。所以更没有理由认为这是问题所在。虽然我不同意错误信息的准确性,但我真的需要它来了解问题所在。
虽然现在这在网络上似乎不是一个大问题,但我确实希望这可以帮助其他人避免浪费时间。
~欢呼~