PHP SDK使用說(shuō)明
物聯(lián)網(wǎng)平臺(tái)提供PHP語(yǔ)言的云端SDK供開(kāi)發(fā)人員使用。本文介紹云端PHP SDK的安裝和配置,及使用PHP SDK調(diào)用云端API的示例。
物聯(lián)網(wǎng)平臺(tái)云端PHP語(yǔ)言的升級(jí)版SDK中包含了接口參數(shù)處理,請(qǐng)求格式組裝及返回值處理等OpenAPI請(qǐng)求的主要邏輯,脫離了對(duì)SDK Core的依賴(lài),開(kāi)發(fā)者依賴(lài)物聯(lián)網(wǎng)平臺(tái)云端SDK包開(kāi)發(fā)即可。升級(jí)版SDK和原版SDK的詳細(xì)信息,請(qǐng)參見(jiàn)SDK信息中心。
安裝SDK
安裝PHP開(kāi)發(fā)環(huán)境。您需安裝PHP 5.6或更高版本。
訪問(wèn)PHP官網(wǎng)下載PHP安裝包,并完成安裝。
安裝Composer。
通過(guò)Composer管理IoT PHP SDK(推薦),因此需在系統(tǒng)中安裝Composer。
Windows系統(tǒng)用戶(hù),請(qǐng)?jiān)L問(wèn)getcomposer.org,下載安裝Composer-Setup.exe。
使用cURL命令安裝Composer。
curl -sS https://getcomposer.org/installer | php
說(shuō)明如果由于網(wǎng)絡(luò)問(wèn)題無(wú)法安裝,可以使用阿里云Composer全量鏡像。
安裝SDK核心庫(kù)OpenAPI。
如果已在系統(tǒng)上全局安裝Composer(具體內(nèi)容,請(qǐng)參見(jiàn)全局安裝Composer),請(qǐng)直接在項(xiàng)目目錄中運(yùn)行以下命令安裝Alibaba Cloud SDK for PHP作為依賴(lài)項(xiàng):
composer require alibabacloud/darabonba-openapi
重要執(zhí)行以上命令安裝SDK的PHP運(yùn)行版本要小于或等于實(shí)際運(yùn)行時(shí)的PHP版本。
例如,在PHP 7.2環(huán)境下安裝SDK后生成vendor目錄,只能在PHP 7.2或以上版本使用,如果拷貝到PHP 5.6環(huán)境下使用,會(huì)出現(xiàn)依賴(lài)版本不兼容問(wèn)題。
添加以下依賴(lài),安裝IoT PHP SDK。
composer require alibabacloud/iot-20180120
升級(jí)版SDK的命名方式為alibabacloud/${產(chǎn)品名}-${OpenAPI版本號(hào)}。PHP SDK詳情和使用指導(dǎo),請(qǐng)參見(jiàn)alibabacloud-php-sdk/iot-20180120/。
初始化SDK
創(chuàng)建對(duì)象$config,存放SDK初始化信息(AccessKey ID、AccessKey Secret、地域ID等)。
創(chuàng)建Iot對(duì)象實(shí)例$client,通過(guò)
Iot($iClientProfile)
方法,加載SDK信息,完成SDK客戶(hù)端初始化。
以華東2(上海)地域及其服務(wù)接入地址為例,初始代碼如下。實(shí)際場(chǎng)景設(shè)置中,需使用您的物聯(lián)網(wǎng)平臺(tái)服務(wù)所在地域。
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');
// 您的可用區(qū)ID。
$config->regionId = "cn-shanghai";
$client = new Iot($config);
參數(shù) | 說(shuō)明 |
accessKeyId | 您阿里云賬號(hào)的AccessKey ID。 您可在阿里云官網(wǎng)控制臺(tái)AccessKey管理中創(chuàng)建或查看您的AccessKey。 |
accessKeySecret | 您阿里云賬號(hào)的AccessKey Secret。 |
regionId | 您的物聯(lián)網(wǎng)平臺(tái)服務(wù)的地域ID,用于拼接服務(wù)接入地址,格式為:iot.${RegionId}.aliyuncs.com。 您可在物聯(lián)網(wǎng)平臺(tái)控制臺(tái)左上方,查看當(dāng)前服務(wù)所在地域。 地域ID的表達(dá)方法,請(qǐng)參見(jiàn)地域和可用區(qū)。 |
SDK客戶(hù)端的HTTP請(qǐng)求配置、代理配置、超時(shí)機(jī)制、重試機(jī)制等配置方式,請(qǐng)參見(jiàn)V2.0 PHP SDK(推薦)。
發(fā)起調(diào)用
物聯(lián)網(wǎng)平臺(tái)云端SDK為每個(gè)API封裝了一個(gè)類(lèi),命名為${API名稱(chēng)}+"Request"
,用于API的調(diào)用請(qǐng)求。
調(diào)用步驟
已完成SDK客戶(hù)端初始化。具體內(nèi)容,請(qǐng)參見(jiàn)初始化SDK。
創(chuàng)建對(duì)應(yīng)API的調(diào)用請(qǐng)求,生成
${API名稱(chēng)}+"Request"
類(lèi)對(duì)象實(shí)例$request。通過(guò)對(duì)象實(shí)例$request,使用"set"+${請(qǐng)求參數(shù)的名稱(chēng)}方法,設(shè)置API所需的請(qǐng)求參數(shù)值。
通過(guò)初始化SDK的對(duì)象實(shí)例$client,使用${API名稱(chēng)}($request)方法,返回API調(diào)用結(jié)果。
物聯(lián)網(wǎng)平臺(tái)云端API,請(qǐng)參見(jiàn)API列表。有關(guān)request中請(qǐng)求參數(shù)說(shuō)明,及response中返回參數(shù)說(shuō)明,請(qǐng)參見(jiàn)對(duì)應(yīng)API文檔。
本文以調(diào)用Pub接口發(fā)布消息到Topic為例。請(qǐng)求參數(shù)信息,請(qǐng)參見(jiàn)Pub。
以下代碼中iotInstanceId為實(shí)例ID。實(shí)例的詳細(xì)說(shuō)明,請(qǐng)參見(jiàn)實(shí)例概述。
購(gòu)買(mǎi)實(shí)例方法,請(qǐng)參見(jiàn)購(gòu)買(mǎi)企業(yè)版實(shí)例。
獲取實(shí)例ID方法,請(qǐng)參見(jiàn)物聯(lián)網(wǎng)平臺(tái)實(shí)例相關(guān)問(wèn)題。
$request = new PubRequest([
// 物聯(lián)網(wǎng)平臺(tái)實(shí)例ID。
"iotInstanceId" => "${iotInstanceId}",
// 產(chǎn)品ProductKey。
"productKey" => "${productKey}",
// 要發(fā)送的消息主體,hello world Base64 String。
"messageContent" => "eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0=",
// 要接收消息的設(shè)備的自定義Topic。
"topicFullName" => "/${productKey}/${deviceName}/user/get",
// 指定消息的發(fā)送方式,支持QoS0和QoS1。
"qos" => 0
]);
//調(diào)用pub接口。
$response = $client->pub($request);
print_r($response);
完整示例代碼
實(shí)際場(chǎng)景中,請(qǐng)參照上文的參數(shù)說(shuō)明,替換對(duì)應(yīng)參數(shù)值。
<?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');
// 您的可用區(qū)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([
// 物聯(lián)網(wǎng)平臺(tái)實(shí)例ID。
"iotInstanceId" => "${iotInstanceId}",
// 產(chǎn)品ProductKey。
"productKey" => "${productKey}",
// 要發(fā)送的消息主體,hello world Base64 String。
"messageContent" => "eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0=",
// 要接收消息的設(shè)備的自定義Topic。
"topicFullName" => "/${productKey}/${deviceName}/user/get",
// 指定消息的發(fā)送方式,支持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));
附錄:示例代碼
前往物聯(lián)網(wǎng)平臺(tái)云端SDK示例中心查看或下載API調(diào)用的示例代碼。示例代碼中包含Java、Python、PHP、Node.js、Go、C++和.NET等版本SDK示例。
阿里云OpenAPI開(kāi)發(fā)者門(mén)戶(hù)提供API在線調(diào)試工具。在API調(diào)試頁(yè)面,您可以快速檢索和體驗(yàn)調(diào)用API。系統(tǒng)會(huì)根據(jù)您輸入的參數(shù)同步生成各語(yǔ)言SDK的代碼示例。各語(yǔ)言SDK代碼示例顯示在頁(yè)面右側(cè)SDK示例頁(yè)簽下供您參考。在調(diào)用結(jié)果頁(yè)簽下,可查看API調(diào)用的真實(shí)請(qǐng)求URL和JSON格式的返回結(jié)果。