通过IDE使用阿里云PHP SDK
本文以在Windows操作系统上,通过VS Code使用阿里云PHP SDK为例,帮助您了解如何快速使用阿里云PHP SDK。
前提条件
-
已安装PHP和Composer,如您未安装请参见安装PHP。
-
已安装了VS Code,如您未安装请参见在Windows搭建PHP开发环境。
使用SDK
使用OpenAPI门户提供的代码示例工程
可能会存在OpenAPI无法下载代码示例工程的情况,您可以查看在已有项目中使用阿里云PHP SDK的介绍。
-
搜索OpenAPI:在OpenAPI门户搜索您将要调用的接口。例如调用云服务器ECS的DescribeRegions接口,可在搜索栏中填入DescribeRegions,在搜索结果中单击API名称进入API调试页面。
-
查看OpenAPI参数信息:在参数配置页签中填写需要的参数信息。填写时请参考右侧文档页签,充分了解接口的说明和注意事项(尤其是费用相关信息),以及各个参数的具体含义和使用方法。
右侧文档页签中,请求参数表格列出了各参数的名称、类型、描述及示例值(如
InstanceChargeType、ResourceType、AcceptLanguage),下方展示返回参数信息。 -
下载示例工程:在右侧的SDK示例页签,下载SDK完整工程至本地并解压。
选择 SDK 版本为 V2.0(推荐),在语言页签中选择 PHP,单击 下载完整工程。
-
安装示例工程所需依赖:使用VS Code打开解压后的示例工程,在Terminal中执行
composer install命令。如果在执行
composer install命令时,出现以下报错。Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires alibabacloud/ecs-20140526 ^4.1.6 -> satisfiable by alibabacloud/ecs-20140526[4.1.6]. - alibabacloud/ecs-20140526 4.1.6 requires alibabacloud/tea-utils ^0.2.20 -> found alibabacloud/tea-utils[dev-master, 0.1.0, ..., 0.2.19] but it does not match the constraint.您可以在composer.json文件中,修改alibabacloud/ecs-20140526的依赖版本解决。
"alibabacloud/ecs-20140526": "^4.1" -
运行示例代码:在Terminal中执行
php src/Sample.php命令。如果返回结果中出现"statusCode":200,则表示调用成功。PS D:\xxx\download\e11baaaa2-4f02-4671-8432-2423be5a5a6f-PHP> php src/Sample.php [2024-07-03T09:59:56.716282+00:00] tea-console-log.INFO: {"headers":{"Date":["Wed, 03 Jul 2024 10:00:00 GMT"],"Content-Type":["application/json;charset=utf-8"],"Connection":["keep-alive"],"Keep-Alive":["timeout=25"],"Vary":["Accept-Encoding"],"Access-Control-Allow-Origin":["*"],"Access-Control-Expose-Headers":["*"],"x-acs-request-id":["3BA5A6C3-B296-5895-914A-8147910DE781"],"x-acs-trace-id":["086d8bd615f72d4d27daa5a7a7b4b89a"],"ETag":["22UU6WnEtZKE9S/VA80fvig"]},"statusCode":200,"body":{"Regions":{"Region":[{"LocalName":"华北1(青岛)","RegionEndpoint":"ecs.cn-qingdao.aliyuncs.com","RegionId":"cn-qingdao"},{"LocalName":"华北2(北京)","RegionEndpoint":"ecs.cn-beijing.aliyuncs.com","RegionId":"cn-beijing"},{"LocalName":"华北3(张家口)","RegionEndpoint":"ecs.cn-zhangjiakou.aliyuncs.com","RegionId":"cn-zhangjiakou"},{"LocalName":"华北5(呼和浩特)","RegionEndpoint":"ecs.cn-huhehaote.aliyuncs.com","RegionId":"cn-huhehaote"},{"LocalName":"华北6(乌兰察布)","RegionEndpoint":"ecs.cn-wulanchabu.aliyuncs.com","RegionId":"cn-wulanchabu"},{"LocalName":"华东1(杭州)","RegionEndpoint":"ecs.aliyuncs.com","RegionId":"cn-hangzhou"},{"LocalName":"华东2(上海)","RegionEndpoint":"ecs.cn-shanghai.aliyuncs.com","RegionId":"cn-shanghai"},...]},"RequestId":"3BA5A6C3-B296-5895-914A-8147910DE781"}} [] []
在已有项目中使用阿里云PHP SDK
-
获取SDK:访问SDK中心,选择您想要使用的SDK的云产品,这里以云服务器ECS为例。SDK版本选择V2.0,语言选择PHP。
进入 SDK 页面后,可查看环境要求为 PHP 5.6 及以上版本,需全局安装 Composer。通过 Packagist 安装 SDK 的命令为
composer require alibabacloud/ecs-20140526 4.1.7。如需使用阿里云 Composer 镜像,可执行composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/。 -
打开VS Code,在VS Code菜单栏,单击File->Open Folder,新建一个项目文件夹或者选择一个已有的项目文件夹。例如文件夹名称为phpprojects,然后选择该文件夹。
-
安装SDK:复制SDK安装方式,在Terminal中执行。
-
创建PHP文件:右键点击文件资源管理器空白处,选择New File...,命名为demo.php。
-
初始化客户端:调用阿里云OpenAPI需要先初始化客户端,以初始化ECS客户端为例。
重要初始化客户端时需要使用AccessKey完成身份验证,请提前获取AccessKey。获取方法请参见创建AccessKey。
获取RAM用户的AccessKey之后,还需要在环境变量中设置AccessKey,具体操作步骤请参见在Linux、macOS和Windows系统配置环境变量。
endpoint如何设置请参见服务接入点。
<?php use AlibabaCloud\Credentials\Credential\Config; use AlibabaCloud\SDK\Ecs\V20140526\Ecs; class Sample { /** * 创建一个ECS客户端实例 * 该方法用于初始化并返回一个ECS客户端对象,该对象可用于执行ECS相关操作。 * 它通过读取环境变量中的访问密钥ID和访问密钥秘密来配置客户端,确保了敏感信息的安全存储和访问。 * * @return Ecs 返回一个配置好的ECS客户端实例 */ public static function createClient() { // 创建配置对象 $config = new Config([ "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), // 获取环境变量中的RAM用户的Accesskey ID "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), // 获取环境变量中的RAM用户的Accesskey Secret "endpoint" => "ecs.cn-hangzhou.aliyuncs.com" // 设置ECS服务的接入点 ]); // 使用上述配置创建一个新的Ecs客户端实例 return new Ecs($config); } } -
调用API。在调用OpenAPI之前,您需要先了解OpenAPI的详细信息,请查看API文档,以调用ECS的DescribeRegions为例。
说明每个API都有独立的请求对象,命名规则为${API名称}${Request},例如DescribeRegionsRequest。
<?php require_once 'vendor/autoload.php'; use AlibabaCloud\SDK\Ecs\V20140526\Ecs; use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use Darabonba\OpenApi\Models\Config; class Sample { /** * 创建一个ECS客户端实例 * 该方法用于初始化并返回一个ECS客户端对象,该对象可用于执行ECS相关操作。 * 它通过读取环境变量中的访问密钥ID和访问密钥秘密来配置客户端,确保了敏感信息的安全存储和访问。 * * @return Ecs 返回一个配置好的ECS客户端实例 */ public static function createClient() { // 创建配置对象 $config = new Config([ "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), // 获取环境变量中的RAM用户的Accesskey ID "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), // 获取环境变量中的RAM用户的Accesskey Secret "endpoint" => "ecs.cn-hangzhou.aliyuncs.com" // 设置ECS服务的接入点 ]); // 使用上述配置创建一个新的Ecs客户端实例 return new Ecs($config); } /** * * 本函数旨在展示如何使用SDK客户端调用DescribeRegions接口。 * 它创建一个客户端实例,构造请求对象,并尝试调用接口。 * 如果调用失败,将捕获异常并输出错误信息。 */ public static function main() { // 创建SDK客户端实例 $client = self::createClient(); // 创建DescribeRegionsRequest请求对象,不传入任何参数 $describeRegionsRequest = new DescribeRegionsRequest([]); // 创建RuntimeOptions实例,不传入任何参数 $runtime = new RuntimeOptions([]); try { // 使用客户端的describeRegionsWithOptions方法调用接口 // 这里使用了try-catch结构来捕获可能的异常 $result = $client->describeRegionsWithOptions($describeRegionsRequest, $runtime); print_r($result); } catch (Exception $error) { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 var_dump($error->message); } } } Sample::main(); -
异常处理:请重视异常处理,切勿在项目中直接忽略异常。建议采取合理的措施来处理异常,比如合理地传播异常、记录日志、尝试恢复等,以确保系统的健壮性和稳定性。PHP SDK异常处理介绍请参见异常处理。
<?php require_once 'vendor/autoload.php'; use AlibabaCloud\SDK\Ecs\V20140526\Ecs; use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use Darabonba\OpenApi\Models\Config; class Sample { /** * 创建一个ECS客户端实例 * 该方法用于初始化并返回一个ECS客户端对象,该对象可用于执行ECS相关操作。 * 它通过读取环境变量中的访问密钥ID和访问密钥秘密来配置客户端,确保了敏感信息的安全存储和访问。 * * @return Ecs 返回一个配置好的ECS客户端实例 */ public static function createClient() { // 创建配置对象 $config = new Config([ "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), // 获取环境变量中的RAM用户的Accesskey ID "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), // 获取环境变量中的RAM用户的Accesskey Secret "endpoint" => "ecs.cn-hangzhou.aliyuncs.com" // 设置ECS服务的接入点 ]); // 使用上述配置创建一个新的Ecs客户端实例 return new Ecs($config); } /** * * 本函数旨在展示如何使用SDK客户端调用DescribeRegions接口。 * 它创建一个客户端实例,构造请求对象,并尝试调用接口。 * 如果调用失败,将捕获异常并输出错误信息。 */ public static function main() { // 创建SDK客户端实例 $client = self::createClient(); // 创建DescribeRegionsRequest请求对象,不传入任何参数 $describeRegionsRequest = new DescribeRegionsRequest([]); // 创建RuntimeOptions实例,不传入任何参数 $runtime = new RuntimeOptions([]); try { // 使用客户端的describeRegionsWithOptions方法调用接口 // 这里使用了try-catch结构来捕获可能的异常 $result = $client->describeRegionsWithOptions($describeRegionsRequest, $runtime); print_r($result); } catch (Exception $error) { if ($error instanceof TeaError) { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 print_r("message:" . $error->getMessage() . "\n"); print_r("code:" . $error->getCode() . "\n"); print_r($error->data); } elseif ($error instanceof TeaUnableRetryError) { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 print_r($error->getLastException()); } else { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 print_r("message:" . $error->getMessage()); } } } } Sample::main();
常见问题
-
在调用OpenAPI时提示“cURL error 60: SSL certificate problem: unable to get local issuer certificate”。
-
您需要下载一个受信任的CA证书,例如Mozilla的CA证书库。
-
配置PHP的SSL证书路径。在php.ini文件中搜索curl.cainfo,将值设置为CA证书的绝对路径,然后去掉前面配置项前的;。
-
重启PHP服务。
-