代码之家  ›  专栏  ›  技术社区  ›  woshitom

Google API PHP错误500

  •  0
  • woshitom  · 技术社区  · 8 年前

    我在一个PHP脚本中使用google vision API。

    当我通过终端执行脚本时,它运行良好:

    php /var/www/html/my_script.php
    

    但当我想从浏览器执行时,我得到一个错误500:

    PHP致命错误:未捕获 Google\Cloud\Core\Exception\ServiceException:{\n“错误”:{\n
    “code”:401,\n“message”:“请求的身份验证无效 资格证书需要OAuth 2访问令牌、登录cookie或其他 有效的身份验证凭据。看见 https://developers.google.com/identity/sign-in/web/devconsole-project .“,\n” “status”:“UNAUTHENTICATED”\n}\n}\n

    我不明白为什么错误消息建议我使用OAuth 2,我不需要我的用户登录到他的google帐户。

    我的代码如下:

        namespace Google\Cloud\Vision\VisionClient;
        require('vendor/autoload.php');
        use Google\Cloud\Vision\VisionClient;
    
        $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();
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   jdp    8 年前

    一般来说,在构建Google云客户端时,需要提供服务帐户密钥文件。例外情况是,如果您正在计算引擎上运行,或者您有应用程序默认凭据设置。因为您看到了身份验证错误,所以这两种情况似乎都不是这样。

    要获取服务帐户和密钥文件,请查看 documentation .

    创建服务帐户并下载json密钥文件后,可以将其提供给客户端库构造函数:

    <?php
    
    use Google\Cloud\Vision\VisionClient;
    
    $vision = new VisionClient([
        'projectId' => $projectId,
        'keyFilePath' => '/path/to/keyfile.json'
    ]);
    

    一旦提供了有效的密钥文件,就应该能够向Vision API发出经过身份验证的请求。

    要避免此步骤,可以设置 Application Default Credentials 在服务器或计算机上。