我目前正在使用各種 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 上均有效。
這個問題有很多令人沮喪的地方。
雖然現在這在網路上似乎不是一個大問題,但我確實希望有一天這可以幫助其他人避免浪費時間。
~乾杯~