Ich verwende derzeit verschiedene Google APIs. Ich habe den Zugriff auf die Google Business API genehmigt und mithilfe des PHP SDK mehrere Endpunkte erfolgreich aufgerufen. Außerdem habe ich einige Endpunkte in der Business Authentication API aufgerufen. Wenn ich jedoch fetchVerificationOptions mit dem definierten Speicherort anfordere, erhalte ich einen 400-Fehler.
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" } ] } }
Ich habe überprüft, dass der eingegebene Standort im Format „Standorte/<LOCATION_ID>“ korrekt ist. Ich habe denselben Schlüssel bei vielen anderen erfolgreichen Anrufen verwendet.
Ich habe die gesamte Dokumentation, die ich zu diesem Thema finden kann, mehrmals gelesen. Der Fehler lässt mich denken, dass die Daten, die ich sende, falsch sind, aber die Dokumentation zeigt sehr deutlich, was mich erwartet – den Sprachcode und den optionalen Kontext. In meinem aktuellen Fall ist der Standort ein Geschäftstyp CUSTOMER_LOCATION_ONLY und das PostalAddress-Objekt muss in dieser Anfrage über den Kontext bereitgestellt werden. Das SDK macht dies einfacher, indem es Objekte für jedes Puzzleteil bereitstellt.
Das ist mein relevanter PHP-Code:
$options = new FetchVerificationOptionsRequest; $options->languageCode = 'en-US'; $context = new ServiceBusinessContext; $context->setAddress($postalAddress); $options->setContext($context); $verificationOptions = GoogleBusinessProfileApi::getVerificationService()->locations->fetchVerificationOptions($locationName, $options);
Ich habe überprüft, dass die Instanz von $postalAddress
是 GoogleServiceMyBusinessVerificationsPostalAddress
im obigen Code gültige Adressdetails enthält.
Ich habe überprüft, dass $locationName
im obigen Code den richtigen Wert hat; meine Standort-ID im Format „Standorte/<LOCATION_ID>“.
Die GoogleBusinessProfileApi::getVerificationService()
返回一个 GoogleServiceMyBusinessVerifications
-Instanz im obigen Code, die meinen Google-Client und alle Authentifizierungsmaterialien enthält. Ich verwende diese Methode für alle meine Interaktionen und sie funktioniert einwandfrei. Außerdem weist dieser Fehler nicht auf ein Problem mit dem Teil hin.
Bemerkenswert ist auch, dass ich auf meiner Google API-Entwicklungskonsole sehen kann, wie diese Anfragen eingehen und mit einer 400-Antwort enden. Allerdings sieht der Indikator nur so aus. Ich kann keine tiefergehenden, detaillierteren Informationen zu der Anfrage finden.
Ich bin auf der Suche nach allem und jedem – Richtung, Ideen, Ideen. Hat sich sonst noch jemand damit beschäftigt? Übersehe ich etwas Offensichtliches? Ist das ein Problem mit meinem Code oder der API selbst? Weiß jemand, wie man diese Fehler in der Google Console genauer untersuchen kann?
Danke!
解决方案:
将 PostalAddress 子区域设置为 null。
详细信息:
在同事的帮助下,我们弄清楚了发生了什么。我更改了代码以调用旧的、已弃用的 API 版本。这返回了一条更有用的错误消息,指出美国在其地址中不使用子区域。我在 PostalAddress 对象上进行了设置,因此我将其更改为始终为 null,并且该请求在旧 API 和新 API 上均有效。
这个问题有很多令人沮丧的地方。
虽然现在这在网络上似乎不是一个大问题,但我确实希望有一天这可以帮助其他人避免浪费时间。
~干杯~