安装PHP SDK

本文以调用Function AI的查询项目接口GetProject为例,介绍PHP SDK的安装和使用。关于GetProject接口的API文档,请参见GetProject - 查询项目

前提条件

  • 创建AccessKey

    调用阿里云OpenAPI通常需要设置访问密钥(AccessKey),由于阿里云账号(主账号)拥有资源的所有权限,AccessKey一旦泄露风险巨大,所以建议您使用满足最小化权限需求的RAM用户的AccessKey。

  • 在环境变量中配置AccessKey

    具体操作步骤,请参见Linux、macOSWindows系统配置环境变量

环境要求

1.最低要求PHP 5.6

2.必须在系统上全局安装Composer

重要

执行 composer 安装 SDK 的 PHP 版本要小于或等于实际运行时的 PHP 版本。 例如,在 PHP7.2 环境下安装 SDK 后生成 vendor 目录,只能在 PHP7.2 以上版本使用,如果拷贝到 PHP5.6 环境下使用,会出现依赖版本不兼容问题。

一些用户可能由于网络问题无法安装,可以通过以下命令使用阿里云 Composer 全量镜像。

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

安装方式

复制下方提供的安装命令在Terminal中执行,以完成Function AI SDK的安装:

composer require alibabacloud/devs-20230714

使用SDK

1.初始化客户端

SDK中,所有的OpenAPI均通过SDK提供的请求客户端(Client)发起调用。因此,在调用OpenAPI之前,需要先对请求客户端进行初始化。请求客户端支持多种方式初始化,本示例以通过AccessKey初始化客户端为例。更多初始化方式请参见管理访问凭据

<?php

require_once 'vendor/autoload.php';
use AlibabaCloud\SDK\Devs\V20230714\Devs;
use Darabonba\OpenApi\Models\Config;

class Sample
{
    public static function createClient()
    {
        $config = new Config([
            // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            // 必填,Devs服务的Endpoint,详情请参考 https://api.aliyun.com/product/Devs
            "endpoint" => "devs.cn-hangzhou.aliyuncs.com",
        ]);
        return new Devs($config);
    }
}

2.构建接口的请求对象

在发起调用前,请查看该接口的API文档获取参数信息

说明

与部分需要构建复杂Request对象的接口不同,GetProject接口的主要参数projectName是直接作为字符串传入的。

// 准备要查询的项目名称
$projectName = "my-devs-project"; // 请将此处替换为您的真实项目名称

// 创建运行时配置对象
$runtime = new RuntimeOptions();

3.发起调用

通过客户端调用OpenAPI时,支持设置运行时参数,例如超时配置、代理配置等,更多信息请查看进阶配置

说明

接口返回对象命名规则:{API名称}Response,例如GetProject该接口的返回对象为GetProjectResponse。

// 发起请求  
$response = $client->getProjectWithOptions($projectName, $headers, $runtime);

// 打印返回结果
echo json_encode($response->body, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n";

4.异常处理

PHP SDK将异常进行了细致的分类,在调用API时,建议采取合理的措施来处理可能发生的异常,以确保程序的健壮性。

  • TeaError:在SDK的请求中,主要以API返回的业务报错为主,例如参数错误、资源不存在等。可以通过 getCode()getMessage()获取服务端返回的明确错误信息来调试。

  • Exception:其他可能发生的异常,例如网络问题。

更多关于异常处理的介绍,请参见异常处理

重要

建议采取合理的措施来处理异常,比如合理地传播异常、记录日志、尝试恢复等,以确保系统的健壮性和稳定性。

5.完整示例

<?php

// 引入Composer的自动加载文件
require_once __DIR__ . '/vendor/autoload.php';

// 引入所有必需的类
use AlibabaCloud\SDK\Devs\V20230714\Devs;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Dara\Models\RuntimeOptions;
use AlibabaCloud\Tea\Exception\TeaError;

/**
 * 使用 Alibaba Cloud Devs SDK 查询项目信息的示例
 */
class GetProjectSample
{
    public static function main()
    {
        try {
            // 1. 初始化客户端
            // SDK会通过环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET 自动获取凭证
            $config = new Config([
                "accessKeyId"     => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                "endpoint"        => "devs.cn-hangzhou.aliyuncs.com",
            ]);
            
            $client = new Devs($config);

            // 2. 准备API调用参数
            $projectName = "my-devs-project"; // 请将此处替换为您的真实项目名称
            $runtime = new RuntimeOptions();
            $headers = [];

            // 3. 发起API调用
            $response = $client->getProjectWithOptions($projectName, $headers, $runtime);
            
            // 4. 处理成功响应
            echo " API 调用成功!\n";
            // 使用PHP标准的 json_encode() 函数来打印对象,并使用 JSON_PRETTY_PRINT 美化输出
            echo json_encode($response->body, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n";

        } catch (Exception $error) {
            // 5. 处理异常情况
            echo " API 调用失败!\n";
            if ($error instanceof TeaError) {
                echo "  错误码 (Code): " . $error->getCode() . "\n";
                echo "  错误信息 (Message): " . $error->getMessage() . "\n";
                echo "  请求ID (RequestId): " . ($error->data['RequestId'] ?? 'N/A') . "\n";
            } else {
                echo "  发生未知异常: " . $error->getMessage() . "\n";
            }
        }
    }
}

// 执行主函数
GetProjectSample::main();

更多内容

除了使用上述调用方式外,您还可以使用泛化调用方式调用Function AIOpenAPI,详细介绍请参见泛化调用