首页 阿里云SDK 开发参考 PHP SDK V2.0 PHP SDK SDK 客户端的初始化和请求方式

SDK 客户端的初始化和请求方式

更新时间: 2023-06-01 18:29:53

本节主要介绍升级版 SDK 对于客户端的初始化以及 OpenAPI 请求方式。

SDK 客户端初始化

升级版 SDK 中因为具备完整的参数处理、返回值处理以及请求逻辑,所以可以给不同云产品的 SDK 生成不同的 Client 并包含其产品下所有的 OpenAPI 请求方法,可以使不同云产品之间的身份及鉴权信息隔离,使用上更加安全,下面是产品 ECS 和短信服务的升级版 SDK 初始化示例:

依赖信息

说明

产品依赖在接入不同产品时需要不同的依赖声明,您可在OpenAPI门户各产品的SDK信息窗口查看。

ECS产品依赖:

composer require alibabacloud/ecs-20140526 3.0.6

短信服务产品依赖:

composer require alibabacloud/dysmsapi-20170525 2.0.23

代码示例

说明

本示例代码身份验证方案为配置环境变量,执行以下代码之前需先配置环境变量,了解更多请参见身份验证配置

export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id>

export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>

<?php

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi as DysmsAPI;

// composer 自动加载机制,require_once(vendor目录下autoload.php文件)
require_once('../vendor/autoload.php');

// 使用默认凭证初始化Credentials Client。
$credential = new Credential([]);
$config = new Config([
    // 使用 credential 配置凭证
    'credential'        => $credential,
    // 产品服务域名(endpoint)
    'endpoint'          => 'ecs.aliyuncs.com'
]);
// 初始化 ECS client
$ecsClient = new Ecs($config);
// 产品服务域名(endpoint)
$config->endpoint = 'dysmsapi.aliyuncs.com';
// 初始化dysmsapi产品包的Client类
$dysmsApiClient = new DysmsAPI($config);

OpenAPI 请求方式

升级版 SDK 中每个产品的 Client 包含了所有的 OpenAPI,所以可以指定 OpenAPI 请求方法来请求,其方法名对应 OpenAPI 首字母小写,一般有三个:

  1. 可以不用传入运行参数的请求方法。

代码示例

<?php

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;

// composer 自动加载机制,require_once(vendor目录下autoload.php文件)
require_once('../vendor/autoload.php');

// 使用默认凭证初始化Credentials Client。
$credential = new Credential([]);
$config = new Config([
    // 使用 credential 配置凭证
    'credential'        => $credential,
    // 产品服务域名
    'endpoint'          => 'ecs.aliyuncs.com'
]);

$request = new DescribeRegionsRequest();

$client = new Ecs($config);
$response = $client->describeRegions($request);
var_dump($response);

  1. 需要传入运行参数的请求方法。

代码示例

<?php

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;

// composer 自动加载机制,require_once(vendor目录下autoload.php文件)
require_once('../vendor/autoload.php');

// 使用默认凭证初始化Credentials Client。
$credential = new Credential([]);
$config = new Config([
    // 使用 credential 配置凭证
    'credential'        => $credential,
    // 产品服务域名
    'endpoint'          => 'ecs.aliyuncs.com'
]);

$request = new DescribeRegionsRequest();
$runtime = new RuntimeOptions();

$client = new Ecs($config);

try {
    $response = $client->describeRegionsWithOptions($request, $runtime);
    var_dump($response);
} catch (TeaUnableRetryError $e) {
    var_dump($e->getMessage());
    var_dump($e->getErrorInfo());
    var_dump($e->getLastException());
    var_dump($e->getLastRequest());
}

  1. 需要进行文件上传的请求方法,该方法默认需要传入运行时参数,这种方法只有需要用到文件上传的 OpenAPI 才会具备。

代码示例

composer require alibabacloud/facebody-20191230 3.0.9

<?php

use Darabonba\OpenApi\Models\Config;
use GuzzleHttp\Psr7\Stream;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\SDK\Facebody\V20191230\Facebody;
use AlibabaCloud\SDK\Facebody\V20191230\Models\DetectBodyCountAdvanceRequest;

// composer 自动加载机制,require_once(vendor目录下autoload.php文件)
require_once('../vendor/autoload.php');

$credential = new Credential([]);
$config = new Config([
    // 使用 credential 配置凭证
    'credential'        => $credential,
    // 产品服务域名
    'endpoint'          => 'facebody.cn-shanghai.aliyuncs.com'
]);

$request = new DetectBodyCountAdvanceRequest();
// 读取文件并将文件流配置给SDK请求对象
$request->imageURLObject = new Stream(fopen("<filepath>","rb"));

$runtime = new RuntimeOptions();
$client = new Facebody($config);

try {
    // 调用本地文件上传方法,将文件上传
    $response = $client->detectBodyCountAdvance($request, $runtime);
    var_dump($response);
} catch (TeaError $e) {
    var_dump($e->getMessage());
    var_dump($e->getErrorInfo());
    var_dump($e->getLastException());
    var_dump($e->getLastRequest());
}

阿里云首页 阿里云SDK 相关技术圈