我正在我的一个PHP脚本中使用Google Vision API。
当我通过终端执行脚本时,脚本运行良好:
php /var/www/html/my_script.php
但是当我想从浏览器执行它时,我收到错误 500:
PHP 致命错误:未捕获 Google\Cloud\Core\Exception\ServiceException: { "error": {
}}
"代码":401, "消息":"请求具有无效的身份验证 凭据。预期的 OAuth 2 访问令牌、登录 Cookie 或其他 有效的身份验证凭据。看 https://developers.google.com/identity/sign-in/web/devconsole-project.", "状态": "未通过身份验证">
我不明白为什么错误消息建议我使用 OAuth 2,我不需要我的用户登录他的谷歌帐户。
我的代码如下:
namespace GoogleCloudVisionVisionClient;
require('vendor/autoload.php');
use GoogleCloudVisionVisionClient;
$projectId = 'my_project_id';
$path = 'https://tedconfblog.files.wordpress.com/2012/08/back-to-school.jpg';
$vision = new VisionClient([
'projectId' => $projectId,
]);
$image = $vision->image(file_get_contents($path), ['WEB_DETECTION']);
$annotation = $vision->annotate($image);
$web = $annotation->web();
一般来说,在构建 Google Cloud 客户端时,您需要提供服务帐号密钥文件。例外情况是在计算引擎上运行,或者设置了应用程序默认凭据。由于您看到身份验证错误,因此这两种情况似乎都不是。
要获取服务帐户和密钥文件,请查看文档。
创建服务帐户并下载 json 密钥文件后,可以将其提供给客户端库构造函数:
<?php
use GoogleCloudVisionVisionClient;
$vision = new VisionClient([
'projectId' => $projectId,
'keyFilePath' => '/path/to/keyfile.json'
]);
提供有效的密钥文件后,您应该能够向视觉 API 发出经过身份验证的请求。
若要避免此步骤,可以在服务器或计算机上设置应用程序默认凭据。