Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential.
上記のようなエラーが出た場合、認証エラーである。
アクセストークンがついてなかったり、期限切れだったり、Client ScretやClient Idが違うものだった李が原因である。
しかし、今回LaravelでHttpファサードを使った場合でも同様のエラーとなった。
PHPのGoogle Ads ライブラリでは、
OAuth2認証: Google\Auth\OAuth2
クラスを使用して認証を行い、
GuzzleHttp\Client
を使用してリクエスト送信される。
今回のLaravelのHttpファサードも、GoogleCloudApiにとっては、Guzzleを使った送信のヘッダーと同様だったのかもしれない。
結局、OAuth2クラスを使った認証も、アクセストークンを取得するだけだが。
Laravelでもライブラリを使わずに、REST APIとして送信するのであれば、Httpファサードを使わずに、curlで送信しないとダメだということが分かった。
LaravelでHttpファサードを使った送信
$response = Http::withHeaders($headers)->post($url, ['query' => $query]);
↓
'error' =>
array (
'code' => 401,
'message' => 'Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.',
'status' => 'UNAUTHENTICATED',
curlで送信した場合
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $query);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 120);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 60);
$response = curl_exec($curl);