本文以在Windows作業系統上,通過VS Code使用阿里雲PHP SDK為例,協助您瞭解如何快速使用阿里雲PHP SDK。
前提條件
-
已安裝PHP和Composer,如您未安裝請參見安裝PHP。
-
已安裝了VS Code,如您未安裝請參見在Windows搭建PHP開發環境。
使用SDK
使用OpenAPI門戶提供的程式碼範例工程
可能會存在OpenAPI無法下載程式碼範例工程的情況,您可以查看在已有專案中使用阿里雲PHP SDK的介紹。
-
搜尋OpenAPI:在OpenAPI門戶搜尋您將要調用的介面。例如調用Elastic Compute Service的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的雲產品,這裡以Elastic Compute Service為例。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服務。
-