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

调用Google REST API发送短信出现ADMIN_ONLY_OPERATION错误如何处理

错误原因

  • accounts:sendVerificationCode属于Google Identity Platform的管理员级操作接口,仅允许使用服务账号+管理员权限凭据调用,你当前直接拼接在URL中的普通Web API密钥没有调用该接口的权限,所以触发了管理员操作限制报错。
  • 额外可能触发该错误的原因:你使用的Google Cloud项目没有开启电话号码验证功能,或者API密钥配置了拦截规则导致请求被拒绝。

解决方法

  1. 更换鉴权方式
    不要用普通Web API密钥调用该接口,需要先在Google Cloud控制台创建对应项目的服务账号,给服务账号授予Firebase Authentication Admin角色,生成服务账号的JSON密钥文件,使用服务账号的OAuth 2.0凭据发起请求。

  2. 推荐使用官方Admin SDK替代手动cURL
    直接使用封装好的Firebase Admin SDK for PHP实现,避免手动处理鉴权、参数格式的错误,实现逻辑参考:

// 先通过composer安装依赖:composer require kreait/firebase-php
use Kreait\Firebase\Factory;

$factory = (new Factory)
    ->withServiceAccount('/path/to/你的服务账号密钥.json');
$auth = $factory->createAuth();

// 发送验证码
$phoneNumber = '+6512341234';
$sessionInfo = $auth->startPhoneNumberVerification($phoneNumber);
// sessionInfo可以存储下来,后续用户提交验证码后用于校验
var_dump($sessionInfo);
  1. 如果需要手动实现cURL请求,按以下规则调整代码
    首先获取服务账号的Access Token,权限范围设置为https://www.googleapis.com/auth/firebase,再调整请求参数格式和请求头:
$data = [
    'phoneNumber' => '+6512341234'
];
$accessToken = '你获取到的服务账号Access Token';

$verify = curl_init();
curl_setopt($verify, CURLOPT_URL, "https://identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode");
curl_setopt($verify, CURLOPT_POST, true);
curl_setopt($verify, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($verify, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $accessToken,
    'Content-Type: application/json'
]);
curl_setopt($verify, CURLOPT_SSL_VERIFYPEER, true); // 生产环境不要关闭SSL验证
curl_setopt($verify, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($verify);

var_dump($response);
  1. 检查后台配置
    进入对应Firebase项目的Authentication控制台,在「登录方式」页开启「电话号码」登录提供商,确认你的服务账号权限、API密钥的访问限制配置无误。

内容的提问来源于stack exchange,提问作者4 Leave Cover

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:57:03