物联网平台提供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格式的返回结果。