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