You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用Google Text-to-Speech API凭证及IAM权限问题求助

问题根因

Could not load the default credentials 报错的直接原因是你初始化TextToSpeechClient时,没有传入任何认证配置。你前面单独实例化Google\Client做的认证配置,根本没有绑定到TTS客户端实例上,TTS客户端启动时会自动从环境变量、系统默认路径查找凭证,找不到就直接抛错。
另外你注释里写的OAuth授权码跳转逻辑,是给需要获取用户私人资源授权的场景(比如访问用户个人Drive文件)用的,调用Text-to-Speech这类公共云服务API完全不需要走这套流程。

解决方案

方案1:API密钥认证(优先匹配你的需求)

注意:Google Cloud PHP客户端默认的gRPC传输通道不支持API密钥认证,必须显式指定REST传输方式才能正常用API密钥调用,操作步骤:

  • 先到Google Cloud控制台确认你生成的API密钥已经开通Text-to-Speech API的访问权限,没有设置严格的IP/应用限制拦截本地请求
  • 直接在初始化TTS客户端时传入API密钥和传输配置,不需要单独初始化Google\Client,代码参考:
require __DIR__ . '/vendor/autoload.php';

use Google\Cloud\TextToSpeech\V1\AudioConfig;
use Google\Cloud\TextToSpeech\V1\AudioEncoding;
use Google\Cloud\TextToSpeech\V1\SynthesisInput;
use Google\Cloud\TextToSpeech\V1\TextToSpeechClient;
use Google\Cloud\TextToSpeech\V1\VoiceSelectionParams;

// 初始化时直接传入认证配置
$textToSpeechClient = new TextToSpeechClient([
    'key' => '替换为你自己的API密钥',
    'transport' => 'rest' // 必须指定REST传输,否则API密钥认证不生效
]);

// 后续正常编写语音合成逻辑即可,参考示例:
// $input = (new SynthesisInput())->setText('测试语音合成内容');
// $voice = (new VoiceSelectionParams())
//     ->setLanguageCode('cmn-CN')
//     ->setName('cmn-CN-Standard-A');
// $audioConfig = (new AudioConfig())->setAudioEncoding(AudioEncoding::MP3);
// $response = $textToSpeechClient->synthesizeSpeech($input, $voice, $audioConfig);
// file_put_contents('output.mp3', $response->getAudioContent());
// $textToSpeechClient->close();

方案2:服务账号JSON凭证认证

如果需要用性能更好的gRPC传输,推荐用服务账号凭证认证,注意你当前的googleAuthorization.json如果是OAuth2客户端ID凭证是不能用的——这类凭证是给用户授权流程用的,不能作为服务端调用云API的凭证,需要重新生成服务账号密钥:

  • 进入Google Cloud控制台「IAM与管理-服务账号」页面,新建服务账号,给该账号分配Cloud Text-to-Speech API User角色,然后为这个服务账号生成JSON格式的密钥,下载后替换你本地原有的凭证文件
  • 初始化TTS客户端时显式传入凭证路径即可,代码参考:
require __DIR__ . '/vendor/autoload.php';

use Google\Cloud\TextToSpeech\V1\AudioConfig;
use Google\Cloud\TextToSpeech\V1\AudioEncoding;
use Google\Cloud\TextToSpeech\V1\SynthesisInput;
use Google\Cloud\TextToSpeech\V1\TextToSpeechClient;
use Google\Cloud\TextToSpeech\V1\VoiceSelectionParams;

$textToSpeechClient = new TextToSpeechClient([
    'credentials' => __DIR__ . '/googleAuthorization.json' // 建议用正斜杠写路径,避免Windows下反斜杠转义导致的路径识别问题
]);
// 后续语音合成逻辑和方案1示例一致

付费技术支持IAM报错说明

这个报错是因为你当前使用的账号,在对应项目所属的组织下没有Support Account Administrator角色。如果是你个人创建的未绑定组织的云项目,直接进入项目IAM页面,给你当前使用的账号绑定该角色即可;如果是公司/他人创建的组织下的项目,你没有权限自行修改IAM配置,需要找组织的超级管理员给你分配对应角色才能继续申请付费支持。

内容的提问来源于stack exchange,提问作者Dennis H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:48:39