OAuth2.0对接易微联的开发平台(酷宅开放平台)
作者:admin 来源:原创 2023/5/8 17:32:28

    一、易微联WIFI智能开关控制器模块

    买了一个单火版易微联的wifi智能双控开关,如图:

    先提一下优点:

    易微联合支持HuaWei HiLink,智慧生活APP可以直接控制设备。

    支持语音控制,小艺、小度、小爱、天猫精灵等。

    支持智能定时。

    有单独的易微联APP,也可以通过第三方平台分享设备至华为的智慧生活app。

    单单这些还不足以让我青睐,还有一点是,易微联有开发平台,允许个人开发者自由接入,但是有效期是1年

    二、易微联开发者平台

    易微联的开发者平台叫做“酷宅开发平台”,网址是:https://ewelink.gitee.io/ewelink-api/#/

    目前对个人:暂时免费,仅提供 OAuth2.0 授权登录方式,包含 1 个 1 年有效期的接口调用凭证,无技术支持,有限的文档资料,有限的接口数量,有限的接口调用次数,接口不保证稳定性。

    对企业:¥ 12000/年

    三、对接流程

    登录易微联开发者平台,提交认证资料,等待审核完成。接着创建1个应用,个人用户仅可以创建1个应用,且有效期是1年。

    

    支持的接口清单一览表:

    

(1)这件事情的开端最重要是要获取到accessToken的值。流程图如下(来自官网):

    

    首先是根据应用信息生成一个易微联的授权链接,用户打开该链接,进入易微联的授权页面,输入账号和密码,易微联后台校验成功后调用回调接口,并传输code。

    该回调接口是我们自定义开发的,拿到code后,调用/v2/user/oauth/token接口,最终得到token值。

    有了token值,就可以调用其他的接口了。

    (2)、生成授权链接

    主要是签名的计算,签名计算方式:

    算法:HMAC(Hash-based Message Authentication Code)SHA256
    密钥:{clientSecret} 消息:{clientId}_{seq}
    结果:HMAC 计算返回原始二进制数据后进行 Base64 编码
    示例:此处假设 clientId = ABC,seq = 123,clientSecret = abc
    实际算出的签名是:v1+mfNY2ukxswM8sZOTg99srZsVnUVv9DGXeav1096M=

            //生成授权链接
            string nonce = Guid.NewGuid().ToString().Replace("-", string.Empty).Substring(0, 8);
            string clientId = "APPID";
            string clientSecret = "APPID";
            string seq = GetTimeStampLong().ToString();
            string redirectUrl = "XXX";//回调接口
            string message = $"{clientId}_{seq}";
            string authorization = CreateSign(message,clientSecret);
            string url = $"https://c2ccdn.coolkit.cc/oauth/index.html?state=lwd&clientId={clientId}&authorization={authorization}&seq={seq}&redirectUrl={redirectUrl}&nonce={nonce}&grantType=authorization_code";

            // System.Diagnostics.Process.Start(url);

            Console.WriteLine(url);
     其中redirectUrl是回调地址,与创建应用信息跳转地址一栏一样。


    (3)回调地址

    回调地址或者或者叫跳转地址,是用户在易微联授权页登录成功后,易微联自动调用的一个网址,其实是一个get http web api 接口。

    需要创建一个web api项目,并部署在服务器中,这里不再展开。

        [HttpGet]
        public string Login(string code, string region, string state)
        {
            string clientId = "APPID";
            string clientSecret = "APPID";
            string redirectUrl = "XXX";//回调接口
            string baseUrl = "https://cn-apia.coolkit.cn";

            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("code", code);
            dic.Add("redirectUrl", redirectUrl);
            dic.Add("grantType", "authorization_code");
            string url = $"{baseUrl}/v2/user/oauth/token";
            string a = JsonConvert.SerializeObject(dic);
            string sign = CreateSign(a, clientSecret);

            Dictionary<string, string> header = new Dictionary<string, string>();
            header.Add("X-CK-Appid", clientId);
            header.Add("Authorization", $"Sign {sign}");

            string ContentType = "application/json";
            string host = "cn-apia.coolkit.cn";
            string json = HttpWebResponseUtility.CreateJSONPost(url, ContentType, a, header);

            return "OK";
        }

  (4)获取设备列表


//授权完成,获取到token值后,调用其他接口
            string token = "***";
            //获取设备列表
            Dictionary<string, string> header = new Dictionary<string, string>();
            header.Add("Authorization", $"Bearer {token}");
            url = $"{baseUrl}/v2/device/thing";
            string json = HttpWebResponseUtility.CreateGetHttpResponse(url,header);
            Console.WriteLine(json);


    

    (5)获取设备状态

            //获取设备状态
            Dictionary<string, string> header = new Dictionary<string, string>();
            header.Add("Authorization", $"Bearer {token}");
            url = $"{baseUrl}/v2/device/thing/status?type=1&id=10016726cc&params=switch";
            string json = HttpWebResponseUtility.CreateGetHttpResponse(url, header);
            Console.WriteLine(json);


    (6)设置设备状态


            //控制设备
            Dictionary<string, string> header = new Dictionary<string, string>();
            header.Add("Authorization", $"Bearer {token}");
            url = $"{baseUrl}/v2/device/thing/status";
            setStatus setStatus = new setStatus();
            setStatus.type = 1;
            setStatus.id = "10016726cc";
            setStatus.@params.@switch="off";
            string a = JsonConvert.SerializeObject(setStatus);
            string json = HttpWebResponseUtility.CreateJSONPost(url,a, header);
            Console.WriteLine(json);

    注意:代码中使用到了第三方序列化库:Newtonsoft.Json。


    我已将代码上传,下载码是:73A0619205

    下载码是啥?如何下载=》点击查看


称      呼:
联系方式:
您的评论:
技术支持:l.w.dong@qq.com www.luweidong.cn
广州市   wx:lwdred
Copyright © 2014 三味书屋 All Rights Reserved
技术支持:l.w.dong@qq.com  sitemap xml  sitemap html

粤公网安备44010602011869号

粤ICP备13031080号-1