Я пытаюсь взаимодействовать с API Google Cloud с помощью пакетов https://github.com/googleapis/google-cloud-php.
Например, здесь я отправляю запрос на учетные записи:
$client = new CloudBillingClient();
$accounts = $client->listBillingAccounts();
foreach ($accounts as $account) {
print('Billing account: ' . $account->getName() . PHP_EOL);
}
Это, очевидно, не работает, так как нет учетных данных, и выдает ошибку:
Google\ApiCore\ValidationException
Could not construct ApplicationDefaultCredentials
Итак, как мне пройти аутентификацию, чтобы заставить работать запрос на выставление счетов? Чтобы было ясно, я могу использовать другую библиотеку OAuth2 для получения access_token, никаких проблем. Например, в этом Laravel контроллере:
use League\OAuth2\Client\Provider\Google as GoogleProvider;
class GoogleAuthController extends Controller
{
public function index()
{
$provider = new GoogleProvider([
'clientId' => $clientId,
'clientSecret' => $clientSecret,
'redirectUri' => $redirectUri // will use this same url 'index'
]);
$authUrl = $provider->getAuthorizationUrl([
'scope' => [
'https://www.googleapis.com/auth/cloud-platform'
]
]);
// This is the first request for authorization
if (empty($_GET['code']))
{
session()->put('oauth2state', $provider->getState());
return redirect($authUrl);
}
// This is the returned request from Google
else
{
$token = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
// I HAVE A TOKEN NOW! I can do a request using Guzzle, like below, and it works fine.
// But surely Google's package should allow me to do this?!?!?
$response = Http::get('https://cloudresourcemanager.googleapis.com/v1/projects', [
'access_token' => $token
]);
return $response;
}
}
}
Однако я хотел бы использовать возможности уже созданных библиотек Google.
Просмотр пакета Google Auth для PHP (https://github.com/googleapis/google-auth-library-php) Я вижу много упоминаний об OAuth, и кажется возможным использовать учетные данные, сгенерированные этой библиотекой, с пакетами Google Cloud (https://github.com/googleapis/google-cloud-php), как и BillingClient выше. Но я борюсь с как .
Редактировать
В дополнение к этому: в ответе jdp ниже он использует ключ конфигурации 'credentials'. Обратите внимание на этот комментарий в источнике CloudBillingGapicClient: «Кроме того, этот параметр также может принимать предварительно созданный объект \ Google \ Auth \ FetchAuthTokenInterface или объект \ Google \ ApiCore \ CredentialsWrapper}". Когда я смотрю на класс OAuth2 в пакете Google Auth, я вижу, что он реализует FetchAuthTokenInterface. Таким образом, кажется, что это можно использовать для передачи учетных данных OAuth. Я просто потерян, как.