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

云端服务调用的前置条件

  • 云端API使用的AppKey与App使用的AppKey不一致,但是访问环境一致,当需要获取正式环境用户数据时,需要使用云端的正式AppKey。
  • 基于安全考虑,所有用户云端接口的调用仅限于HTTPS方式,不支持HTTP方式。
  • 所有的API均为POST调用,使用SDK调用的用户可以直接使用API中的postBody方法。

云端服务调用流程

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

主要流程如下。

流程

获取云端唯一身份Appkey

进入项目设置中获取云云AppKey。

  1. 选择项目名称,单击项目设置
    项目设置
  2. 在弹出的权限授权许可对话框中,单击确认
    权限授权
  3. 单击同意授权
    云资源访问授权
  4. 选择设置数据同步,在云端接口调用中,显示线上环境的AppKey和测试环境的AppKey。
    设备数据同步

调用示例

以下给出Java和PHP两种语言的API调用示例demo,其他语言请参照示例demo中的逻辑和加签算法自行实现。

  • 调用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的版本
        //调用/cloud/token接口时,不需要传CloudToken,请参见云端资源服务/cloud/token接口的代码示例
        //调用其他接口(除/cloud/token接口外),都需要先调用/cloud/token接口获取到token,再传入ApiVer和CloudToken,才可以正常调用
        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();