# PHP SDK调用示例
本文以调用DWS的**查询规格信息** **（ListNodeTypes）**接口为例，介绍华为云PHP SDK的使用方法。
#### 前提条件
- 已获取华为云账号对应的Access Key（AK）和Secret Access Key（SK），具体操作请参见[新增访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_05_0003.html#section1)。
- 运行SDK的环境已安装[PHP 5.6](https://www.php.net/downloads.php)及以上版本。
 
#### 安装SDK
推荐通过Composer安装华为云PHP SDK。Composer是PHP的依赖管理工具，允许在项目中声明依赖关系并安装这些依赖。
在命令终端执行以下命令安装Composer和华为云PHP SDK。以3.1.203版本的PHP SDK为例，最新的SDK版本信息可通过[SDK中心](https://console.huaweicloud.com/apiexplorer/#/sdkcenter?language=PHP)查看获取。
```
# 安装Composer。如果已安装，可跳过此命令。 
curl -sS https://getcomposer.org/installer | php 
 
# 安装PHP SDK。 
composer require huaweicloud/huaweicloud-sdk-php:3.1.203
```
#### 使用SDK
以下是一个完整的PHP示例，演示如何使用华为云PHP SDK调用**查询规格信息** **（ListNodeTypes** **）**接口。
- 如果需要获取其他接口的SDK示例，请参见[获取SDK示例代码](https://support.huaweicloud.com/sdkreference-dws/dws_sdk_0002.html)。
- 本示例中仅提供了基本的接口参数配置说明，更多的进阶配置请参见SDK的[用户手册](https://github.com/huaweicloud/huaweicloud-sdk-php-v3/blob/master/README_CN.md#用户手册-top)。
- 如果把认证用的AK/SK直接写到代码中会有较大的安全风险，建议在配置文件或环境变量中以密文存放AK/SK，使用时解密，确保安全。本示例中把AK和SK保存为环境变量CLOUD_SDK_AK和CLOUD_SDK_SK，具体操作请参见[环境变量](https://github.com/huaweicloud/huaweicloud-sdk-java-v3/blob/master/README_CN.md#251-环境变量-top)。
```
<?php
namespace HuaweiCloud\SDK\Dws\V2\Model;
require_once "vendor/autoload.php";
use HuaweiCloud\SDK\Core\Auth\BasicCredentials;
use HuaweiCloud\SDK\Core\Http\HttpConfig;
use HuaweiCloud\SDK\Core\Exceptions\ConnectionException;
use HuaweiCloud\SDK\Core\Exceptions\RequestTimeoutException;
use HuaweiCloud\SDK\Core\Exceptions\ServiceResponseException;
use HuaweiCloud\SDK\Dws\V2\DwsClient;
// ==================== 初始化客户端 ==================== 
// 从环境变量获取AK/SK，运行前需要提前把AK/SK设置为环境变量 
$ak = getenv('CLOUD_SDK_AK');
$sk = getenv('CLOUD_SDK_SK');
$endpoint = "https://dws.af-north-1.myhuaweicloud.com";
$projectId = "8d6c92e4e2d14ae685a697adfe259256";
// 配置认证凭证
$credentials = new BasicCredentials($ak,$sk,$projectId);
$config = HttpConfig::getDefaultConfig();
$config->setIgnoreSslVerification(true);
// 初始化客户端
$client = DwsClient::newBuilder(new DwsClient)
  ->withHttpConfig($config)
  ->withEndpoint($endpoint)
  ->withCredentials($credentials)
  ->build();
// ==================== 构造请求对象 ==================== 
// 使用SDK中提供的Request对象封装请求参数
$request = new ListNodeTypesRequest();
// ==================== 发起请求并处理响应 ==================== 
// 通过客户端调用对应API发起请求，调用成功将返回Response对象，调用失败将抛出对应异常
try {
  $response = $client->ListNodeTypes($request);
  echo "\n";
  echo $response;
} catch (ConnectionException $e) {
  $msg = $e->getMessage();
  echo "\n". $msg ."\n";
} catch (RequestTimeoutException $e) {
  $msg = $e->getMessage();
  echo "\n". $msg ."\n";
} catch (ServiceResponseException $e) {
  echo "\n";
  echo $e->getHttpStatusCode(). "\n";
  echo $e->getRequestId(). "\n";
  echo $e->getErrorCode() . "\n";
  echo $e->getErrorMsg() . "\n";
}
```
