J'utilise actuellement diverses API Google. J'ai approuvé l'accès à l'API Google Business et effectué avec succès plusieurs appels à ses points de terminaison à l'aide du SDK PHP, appelant même certains points de terminaison dans l'API d'authentification commerciale ; Cependant, lorsque je demande fetchVerificationOptions avec l'emplacement défini, je reçois une erreur 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" } ] } }
J'ai vérifié que la localisation transmise est correcte, au format "locations/<LOCATION_ID>". J'ai utilisé la même clé dans de nombreux autres appels réussis.
J'ai lu à plusieurs reprises toute la documentation que je peux trouver sur ce sujet. L'erreur me fait penser que les données que j'envoie sont fausses, mais la documentation est très claire sur ce à quoi s'attendre - le code de langue et le contexte facultatif. Dans mon cas actuel, l'emplacement est un type d'entreprise CUSTOMER_LOCATION_ONLY et l'objet PostalAddress doit être fourni dans cette demande via le contexte. Le SDK rend cela plus facile en fournissant des objets pour chaque pièce du puzzle.
Voici mon code PHP pertinent :
$options = new FetchVerificationOptionsRequest; $options->languageCode = 'en-US'; $context = new ServiceBusinessContext; $context->setAddress($postalAddress); $options->setContext($context); $verificationOptions = GoogleBusinessProfileApi::getVerificationService()->locations->fetchVerificationOptions($locationName, $options);
J'ai vérifié que l'instance de $postalAddress
是 GoogleServiceMyBusinessVerificationsPostalAddress
dans le code ci-dessus contient des informations d'adresse valides.
J'ai vérifié que $locationName
dans le code ci-dessus a la valeur correcte ; mon identifiant de localisation au format "locations/<LOCATION_ID>".
L'instance GoogleBusinessProfileApi::getVerificationService()
返回一个 GoogleServiceMyBusinessVerifications
dans le code ci-dessus, qui contient mon client Google et tous les éléments d'authentification. J'utilise cette méthode pour toutes mes interactions et elles fonctionnent parfaitement. De plus, cette erreur n’indique pas un problème avec la pièce.
Il convient également de noter que sur ma console de développement d'API Google, je peux voir ces requêtes arriver et se terminer par une réponse de 400. Cependant, ce n’est que ce à quoi ressemble l’indicateur. Je ne trouve pas d'informations plus approfondies et plus détaillées sur la demande.
Je recherche tout et n'importe quoi - une direction, des idées, des idées. Quelqu'un d'autre a-t-il déjà eu affaire à ce problème ? Est-ce que j'ai raté quelque chose d'évident ? Est-ce un problème avec mon code ou avec l'API elle-même ? Quelqu'un sait-il comment approfondir ces erreurs sur la console Google ?
Merci !
Solution :
Définissez la sous-région PostalAddress sur null.
Détails :
Avec l'aide de collègues, nous avons compris ce qui se passait. J'ai modifié le code pour appeler l'ancienne version obsolète de l'API. Cela renvoie un message d'erreur plus utile indiquant que les États-Unis n'utilisent pas de sous-zones dans leurs adresses. Je l'ai défini sur l'objet PostalAddress, je l'ai donc modifié pour qu'il soit toujours nul et la requête a fonctionné à la fois sur l'ancienne et la nouvelle API.
Il y a beaucoup de choses frustrantes dans ce problème.
Bien que cela ne semble pas être un gros problème sur le Web pour le moment, j'espère qu'un jour cela pourra aider les autres à éviter de perdre leur temps.
~Bravo~