介绍用户云端调用阿里生活物联网云端的API流程,获取云端唯一身份AppKey的示例。

云端服务调用协议

基于安全考虑,所有用户云端接口的调用仅限于HTTPS方式,不提供HTTP方式的支持。

云端服务调用流程

云端接口调用需要资源令牌(cloud token)来做身份鉴权访问。该令牌可通过“云端资源服务”获取。令牌的授权以项目(Project)为粒度,不同的项目会生成不同的令牌,相互之间不能通用。详细参见云端资源服务(云端资源服务默认开通)。

主要流程如下。

流程

获取云端唯一身份Appkey

API服务入口如下。

API服务

用户数据中添加服务器地址。

新增API地址

调用API的Java示例

// https://github.com/aliyun/iotx-api-gateway-client
public static void main(String[] args) throws UnsupportedEncodingException {
    IoTApiClientBuilderParams ioTApiClientBuilderParams = 
      new IoTApiClientBuilderParams();
    ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
    ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
    SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);

    IoTApiRequest request = new IoTApiRequest();
    //设置api的版本
    request.setApiVer("1.0.0");
    request.setCloudToken("CloudTokenXXXXX");

    //设置接口的参数
    request.putParam("grantType", "project");
    request.putParam("res", "xxxxx");

    //请求参数域名、path、request
    //host地址  中国站:api.link.aliyun.com  国际站:api-iot.ap-southeast-1.aliyuncs.com
    ApiResponse response = syncClient.postBody("api.link.aliyun.com",
        "/cloud/token", request, true);
    System.out.println( "response code = " + response.getCode() 
                       + " response = " + new String(response.getBody(), "UTF-8"));
}
			

调用API的PHP示例

//https://github.com/aliyun/api-gateway-demo-sign-php (第三方php库)

<?php
include_once 'Util/Autoloader.php';

//host地址  中国站:api.link.aliyun.com  国际站:api-iot.ap-southeast-1.aliyuncs.com
function example() {
    $path      = "/cloud/token";
    $host      = "https://api.link.aliyun.com";
    $appKey    = "你的<AppKey>";
    $appSecret = "你的<AppSecret>"; 

    $request = new HttpRequest($host, $path, HttpMethod::POST, $appKey, $appSecret);
    //设置api版本和参数
    $body = '{"id":"xxx","version":"1.0","request":{"apiVer":"1.0.0"},' . 
            '"params":{"grantType":"project","res":"xxx"}}';

    //设定Content-Type
    $request->setHeader(HttpHeader::HTTP_HEADER_CONTENT_TYPE, 
                        ContentType::CONTENT_TYPE_JSON);

    //设定Accept
    $request->setHeader(HttpHeader::HTTP_HEADER_ACCEPT, 
                        ContentType::CONTENT_TYPE_JSON);

    if (strlen($body) > 0) {
        $request->setHeader(HttpHeader::HTTP_HEADER_CONTENT_MD5, 
                            base64_encode(md5($body, true)));
        $request->setBodyString($body);
    }

    //指定参与签名的header
    $request->setSignHeader(SystemHeader::X_CA_TIMESTAMP);

    $response = HttpClient::execute($request);
    var_dump($response);    
}

example();