本文以在Windows操作系统上,通过VS Code使用阿里云PHP SDK为例,帮助您了解如何快速使用阿里云PHP SDK。
前提条件
已安装PHP和Composer,如您未安装请参见在Windows安装PHP。
已安装了VS Code,如您未安装请参见在Windows搭建PHP开发环境。
使用SDK
使用OpenAPI门户提供的代码示例工程
可能会存在OpenAPI无法下载代码示例工程的情况,您可以查看在已有项目中使用阿里云PHP SDK的介绍。
搜索OpenAPI:在OpenAPI门户搜索您将要调用的接口。例如调用云服务器ECS的DescribeRegions接口,可在搜索栏中填入DescribeRegions,在搜索结果中单击API名称进入API调试页面。
查看OpenAPI参数信息:在参数配置页签中填写需要的参数信息。填写时请参考右侧文档页签,充分了解接口的说明和注意事项(尤其是费用相关信息),以及各个参数的具体含义和使用方法。
下载示例工程:在右侧的SDK示例页签,下载SDK完整工程至本地并解压。
安装示例工程所需依赖:使用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
,则表示调用成功。
在已有项目中使用阿里云PHP SDK
获取SDK:访问SDK中心,选择您想要使用的SDK的云产品,这里以云服务器ECS为例。SDK版本选择V2.0,语言选择PHP。
打开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服务。