物聯網平台提供PHP語言的雲端SDK供開發人員使用。本文介紹雲端PHP SDK的安裝和配置,及使用PHP SDK調用雲端API的樣本。
物聯網平台雲端PHP語言的升級版SDK中包含了介面參數處理,請求格式組裝及傳回值處理等OpenAPI請求的主要邏輯,脫離了對SDK Core的依賴,開發人員依賴物聯網平台雲端SDK包開發即可。升級版SDK和原版SDK的詳細資料,請參見SDK資訊中心。
安裝SDK
安裝PHP開發環境。您需安裝PHP 5.6或更高版本。
訪問PHP官網下載PHP安裝包,並完成安裝。
安裝Composer。
通過Composer管理IoT PHP SDK(推薦),因此需在系統中安裝Composer。
Windows系統使用者,請訪問getcomposer.org,下載安裝Composer-Setup.exe。
使用cURL命令安裝Composer。
curl -sS https://getcomposer.org/installer | php
說明如果由於網路問題無法安裝,可以使用阿里雲Composer全量鏡像。
安裝SDK核心庫OpenAPI。
如果已在系統上全域安裝Composer(具體內容,請參見全域安裝Composer),請直接在專案目錄中運行以下命令安裝Alibaba Cloud SDK for PHP作為依賴項:
composer require alibabacloud/darabonba-openapi
重要執行以上命令安裝SDK的PHP運行版本要小於或等於實際運行時的PHP版本。
例如,在PHP 7.2環境下安裝SDK後產生vendor目錄,只能在PHP 7.2或以上版本使用,如果拷貝到PHP 5.6環境下使用,會出現依賴版本不相容問題。
添加以下依賴,安裝IoT PHP SDK。
composer require alibabacloud/iot-20180120
升級版SDK的命名方式為alibabacloud/${產品名}-${OpenAPI版本號碼}。PHP SDK詳情和使用指導,請參見alibabacloud-php-sdk/iot-20180120/。
初始化SDK
建立對象$config,存放SDK初始化資訊(AccessKey ID、AccessKey Secret、地區ID等)。
建立Iot對象執行個體$client,通過
Iot($iClientProfile)
方法,載入SDK資訊,完成SDK用戶端初始化。
以華東2(上海)地區及其服務接入地址為例,初始代碼如下。實際情境設定中,需使用您的物聯網平台服務所在地區。
use AlibabaCloud\SDK\Iot\V20180120\Iot;
use AlibabaCloud\Tea\Config;
$config = new Config([]);
// 您的AccessKey ID。
$config->accessKeyId = getenv('ACCESS_KEY_ID');
// 您的AccessKey Secret。
$config->accessKeySecret = getenv('ACCESS_KEY_SECRET');
// 您的可用性區域ID。
$config->regionId = "cn-shanghai";
$client = new Iot($config);
參數 | 說明 |
accessKeyId | 您阿里雲帳號的AccessKey ID。 您可在阿里雲官網控制台AccessKey管理中建立或查看您的AccessKey。 |
accessKeySecret | 您阿里雲帳號的AccessKey Secret。 |
regionId | 您的物聯網平台服務的地區ID,用於拼接服務接入地址,格式為:iot.${RegionId}.aliyuncs.com。 您可在物聯網平台控制台左上方,查看當前服務所在地區。 地區ID的表達方法,請參見地區和可用性區域。 |
發起調用
物聯網平台雲端SDK為每個API封裝了一個類,命名為${API名稱}+"Request"
,用於API的調用請求。
調用步驟
已完成SDK用戶端初始化。具體內容,請參見初始化SDK。
建立對應API的調用請求,產生
${API名稱}+"Request"
類對象執行個體$request。通過對象執行個體$request,使用"set"+${請求參數的名稱}方法,設定API所需的請求參數值。
通過初始化SDK的對象執行個體$client,使用${API名稱}($request)方法,返回API調用結果。
物聯網平台雲端API,請參見API列表。有關request中請求參數說明,及response中返回參數說明,請參見對應API文檔。
本文以調用Pub介面發布訊息到Topic為例。請求參數資訊,請參見Pub。
$request = new PubRequest([
// 物聯網平台執行個體ID。
"iotInstanceId" => "${iotInstanceId}",
// 產品ProductKey。
"productKey" => "${productKey}",
// 要發送的訊息主體,hello world Base64 String。
"messageContent" => "eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0=",
// 要接收訊息的裝置的自訂Topic。
"topicFullName" => "/${productKey}/${deviceName}/user/get",
// 指定訊息的發送方式,支援QoS0和QoS1。
"qos" => 0
]);
//調用pub介面。
$response = $client->pub($request);
print_r($response);
完整範例程式碼
實際情境中,請參照上文的參數說明,替換對應參數值。
<?php
namespace AlibabaCloud\SDK\Sample;
use AlibabaCloud\SDK\Iot\V20180120\Iot;
use AlibabaCloud\Tea\Tea;
use AlibabaCloud\Tea\Utils\Utils;
use AlibabaCloud\Tea\Console\Console;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Iot\V20180120\Models\PubRequest;
class Sample {
/**
* 使用AK&SK初始化Client
*/
public static function createClient() {
$config = new Config([]);
// 您的AccessKey ID。
$config->accessKeyId = getenv('ACCESS_KEY_ID');
// 您的AccessKey Secret。
$config->accessKeySecret = getenv('ACCESS_KEY_SECRET');
// 您的可用性區域ID。
$config->regionId = "cn-shanghai";
return new Iot($config);
}
}
/**
* @param string[] $args
* @return void
*/
public static function main($args){
try {
$client = self::createClient("${accessKey}", "${accessKeySecret}");
$request = new PubRequest([
// 物聯網平台執行個體ID。
"iotInstanceId" => "${iotInstanceId}",
// 產品ProductKey。
"productKey" => "${productKey}",
// 要發送的訊息主體,hello world Base64 String。
"messageContent" => "eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0=",
// 要接收訊息的裝置的自訂Topic。
"topicFullName" => "/${productKey}/${deviceName}/user/get",
// 指定訊息的發送方式,支援QoS0和QoS1。
"qos" => 0
]);
$response = $client->pub($request);
Console::log(Utils::toJSONString(Tea::merge($response)));
}
catch (Exception $error) {
if (!($error instanceof TeaError)) {
$error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
}
Console::log($error->message);
}
}
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
Sample::main(array_slice($argv, 1));
附錄:範例程式碼
前往物聯網平台雲端SDK樣本中心查看或下載API調用的範例程式碼。範例程式碼中包含Java、Python、PHP、Node.js、Go、C++和.NET等版本SDK樣本。
阿里雲OpenAPI開發人員門戶提供API線上調試工具。在API調試頁面,您可以快速檢索和體驗調用API。系統會根據您輸入的參數同步產生各語言SDK的程式碼範例。各語言SDK程式碼範例顯示在頁面右側SDK樣本頁簽下供您參考。在調用結果頁簽下,可查看API調用的真實請求URL和JSON格式的返回結果。