通過IDE使用阿里云PHP SDK
本文以在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服務。