Как я могу аутентифицировать Google Cloud Translate из PHP? - PullRequest
1 голос
/ 22 октября 2019

Я пытаюсь использовать библиотеку google / cloud-translate (v ^ 1.5) в Laravel (v ^ 6.0).

В GoogleController.php:

public function translate(Request $request) {
    $request->validate([
        'source' => 'required|string|min:2|max:5',
        'target' => 'required|string|min:2|max:5',
        'q' => 'required|string',
    ]);

    $translate = new TranslateClient([
        'keyFile' => base_path(config('services.google.json_path')),
        'projectId' => config('services.google.project_id'),
        'suppressKeyFileNotice' => true,
    ]);

    // Translate text from english to french.
    $result = $translate->translate($request->q, [
        'target' => explode($request->target, '-')[0],
        'source' => explode($request->source, '-')[0],
    ]);

    return $result;
}

Но вызов маршрута в Почтальоне выдает ошибку:

Argument 2 passed to Google\Auth\CredentialsLoader::makeCredentials() must be of the type array, string given, called in /[...]/vendor/google/cloud-core/src/RequestWrapperTrait.php on line 155

Я проверил, что идентификатор проекта и путьк ключевому файлу правильно. Может кто-нибудь пролить свет на то, как обойти эту ошибку?

1 Ответ

2 голосов
/ 22 октября 2019

Вы указываете путь к файлу ключа, поэтому вместо него следует использовать параметр keyFilePath.

Попробуйте:

$translate = new TranslateClient([
    'keyFilePath' => base_path(config('services.google.json_path')),
    ...
]);

Из TranslateClient.__construct документы:

  • keyFile. Содержимое файла учетных данных службы .json, полученного из консоли разработчика Google. Пример: json_decode(file_get_contents($path), true).
  • keyFilePath: полный путь к файлу учетных данных учетной записи службы .json, полученный из консоли разработчиков Google.
...