阿里云官方PHP SDK的Composer包名已更新为alibabacloud/client及各产品线独立包(如alibabacloud/ecs),旧包aliyun-openapi-php-sdk已停止维护;需同时安装client与对应服务包,凭证通过credentials数组显式传入,特殊region须手动指定endpoint。

阿里云 SDK 的 Composer 包名是什么
阿里云官方 PHP SDK 的 Composer 包名是 aliyun-openapi-php-sdk,但注意:这个包已**停止维护**,不推荐用于新项目。当前应使用各产品线独立发布的 SDK 包,例如 ECS、OSS、RAM 等均有单独的 aliyun-openapi-xxx 包,且全部托管在 alibabacloud 命名空间下。
最常用的是统一入口包:alibabacloud/client,它提供统一的客户端初始化、签名、重试、凭证管理能力;具体服务则通过按需安装子包接入,比如:
-
alibabacloud/ecs(云服务器) -
alibabacloud/oss(对象存储) -
alibabacloud/sts(临时令牌)
安装 client + 具体服务 SDK 的正确命令
不要只装 alibabacloud/client 就以为能调用所有服务——它只是运行时核心,不带任何 API 定义。必须同时安装对应服务的 SDK 包,否则会报错 Class not found: AlibabaCloud\Ecs\Ecs 或类似提示。
以 ECS 为例,执行:
composer require alibabacloud/client alibabacloud/ecs
若还需 OSS,则追加:
composer require alibabacloud/oss
注意:所有 alibabacloud/* 包都要求 PHP >= 7.2,且依赖 guzzlehttp/guzzle(Composer 会自动解决)。如果你的项目已锁死 Guzzle 版本(如 ^6.0),而新版阿里云 SDK 要求 ^7.0,就会冲突——此时需升级 Guzzle 或降级 SDK(不推荐)。
初始化客户端时 credentials 怎么传
阿里云 SDK 不再支持全局 AlibabaCloud::accessKeyClient() 静态方式(旧版 SDK 风格),必须显式构造 Client 实例,并通过 credentials 数组传入凭证。
常见写法:
$client = \AlibabaCloud\Client\AlibabaCloud::accessKeyClient('your-access-key-id', 'your-access-key-secret')
->regionId('cn-hangzhou')
->asDefaultClient();
但更推荐显式构造,避免污染默认实例:
- 从环境变量读取(推荐):
ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET - 从配置文件或数据库加载后传入数组:
['accessKeyId' => $id, 'accessKeySecret' => $secret] - 使用 STS 临时凭证时,必须额外传
'securityToken' => $token
漏传 securityToken 会导致 InvalidAccessKeyId.NotFound 错误,即使 AK/SK 正确。
调用 ECS 接口时 regionId 和 endpoint 的关系
regionId 是必填项,但不是所有 region 都支持所有服务。比如 cn-shenzhen-finance-1 是金融云 region,普通 ECS SDK 默认不支持,需手动指定 endpoint。
错误示例(直接设金融云 region):
$client->regionId('cn-shenzhen-finance-1');
结果:抛出 InvalidRegionId.NotFound。
正确做法是跳过 regionId,直接设 endpoint:
$client->endpoint('https://ecs.cn-shenzhen-finance-1.aliyuncs.com');
Endpoint 格式固定为 https://,可在阿里云[API 文档](https://help.aliyun.com/document_detail/25545.html)查到每个 region 支持的服务列表。别硬套 regionId,尤其涉及金融云、政务云等特殊 region 时。










