From 3698c13aba988cd3e41b91b255e1c682c057e565 Mon Sep 17 00:00:00 2001
From: chenqiyang <1406175257@qq.com>
Date: 星期四, 23 三月 2023 11:49:58 +0800
Subject: [PATCH] 1.新增历史记录相关页面及功能 2.修改配网为热点配网 3.设备列表增加过滤门锁功能 4.增加添加设备通知功能

---
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/EZHttpUtil.m |  337 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 329 insertions(+), 8 deletions(-)

diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/EZHttpUtil.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/EZHttpUtil.m
index d969a2e..d87504f 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/EZHttpUtil.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/EZHttpUtil.m
@@ -9,19 +9,313 @@
 #import "EZHttpUtil.h"
 #import <Foundation/Foundation.h>
 #import <CommonCrypto/CommonDigest.h>
+#import "AFNetworking.h"
+#import "YYModel.h"
 
+#define TestRequestHttpsHost @"https://test-gz.hdlcontrol.com"
+#pragma mark API
+#define API_POST_EZ_AddDevice @"/home-wisdom/platform/yingshi/child/addDevice"
+#define API_POST_EZ_GetChildToken @"/home-wisdom/platform/yingshi/child/token"
+#define API_POST_EZ_ChildDelDevice @"/home-wisdom/platform/yingshi/child/deleteDevice"
+#define API_POST_EZ_RefreshToken @"/smart-footstone/member/oauth/login"
+
+#define API_POST_EZ_GetAlarmList @"/home-wisdom/platform/yingshi/alarm/records"//鑾峰彇鎶ヨ娑堟伅
+#define API_POST_EZ_DeleteAlarmMes @"/home-wisdom/platform/yingshi/alarm/delete"//鍒犻櫎鎶ヨ娑堟伅
+#define API_POST_EZ_ReadAlarmMes @"/home-wisdom/platform/yingshi/alarm/updateChecked"//鏍囪鎶ヨ娑堟伅宸茶
+
+#pragma mark APP_KEY
 #define APP_KEY @"HDL-HOME-APP-TEST"
 #define SECRET_KEY @"WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss"
 
+
+#define TIME_OUT 15.0f
+
 @implementation EZHttpUtil
 
+#pragma mark -鎺ュ彛璇锋眰閮ㄥ垎
 
-+(NSMutableDictionary *)GetSignRequestDictionary:(NSMutableDictionary *)params{
+
+/// sharedManager
++ (id)sharedManager {
+    static dispatch_once_t once;
+    static id instance;
+    dispatch_once(&once, ^{
+        instance = [self new];
+    });
+    return instance;
+}
+
+/**
+ *  @since 娌充笢鑾峰彇瀛愯处鍙穞oken鐨勬帴鍙�
+ *
+ *  @param block 鍥炶皟block
+ */
+- (void)getChildToken:(void (^)(NSString *accessToken))block{
+    
+    //2.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue: [NSString stringWithFormat:@"%d", [GlobalKit shareKit].hdlPlatform] forKey:@"platform"];
+    [parameters setValue:[GlobalKit shareKit].hdlHomeId forKey:@"homeId"];
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    [self requestHttpsPost:API_POST_EZ_GetChildToken parameters:parameters completion:^(ResponseData *responseData) {
+        if (block) {
+            NSString * token = @"";
+            if(responseData.success){
+//                token = responseData.data[@"accessToken"];
+                token = [NSString stringWithFormat:@"%@",responseData.data];
+            }
+            block(token);
+        }
+        
+    }];
+    
+//    return task;
+}
+/**
+ *  @since 娌充笢娣诲姞璁惧鐨勬帴鍙�
+ *  鏍规嵁璁惧搴忓垪鍙峰拰璁惧楠岃瘉鐮佹坊鍔犺澶囨帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param verifyCode   璁惧楠岃瘉鐮�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *
+ */
+- (void)addDeviceByHDL:(NSString *)deviceSerial
+                              verifyCode:(NSString *)verifyCode
+                              completion:(void (^)(ResponseData *responseData))completion{
+
+    //2.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:deviceSerial forKey:@"deviceSerial"];
+    [parameters setValue:verifyCode forKey:@"validateCode"];
+    [parameters setValue: [NSString stringWithFormat:@"%d",[GlobalKit shareKit].hdlPlatform] forKey:@"platform"];
+    [parameters setValue:[GlobalKit shareKit].hdlHomeId forKey:@"homeId"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    [self requestHttpsPost:API_POST_EZ_AddDevice parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+    
+//    return task;
+}
+
+/**
+ *  @since 娌充笢鍒犻櫎璁惧鐨勬帴鍙�
+ *  鏍规嵁璁惧搴忓垪鍙峰垹闄よ澶囨帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *
+ */
+- (void)deleteDeviceByHDL:(NSString *)deviceSerial completion:(void (^)(ResponseData *responseData))completion{
+    //1.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:deviceSerial forKey:@"deviceSerial"];
+    [parameters setValue: [NSString stringWithFormat:@"%d",[GlobalKit shareKit].hdlPlatform] forKey:@"platform"];
+    [parameters setValue:[GlobalKit shareKit].hdlHomeId forKey:@"homeId"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    [self requestHttpsPost:API_POST_EZ_ChildDelDevice parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+    
+//    return task;
+}
+
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栧憡璀︿俊鎭垪琛�
+ */
+- (void)getAlarmList:(NSString *)deviceSerial
+              pageNo:(NSInteger)pageNo
+            pageSize:(NSInteger)pageSize
+          completion:(void (^)(ResponseData *responseData))completion{
+    
+    //1.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:deviceSerial forKey:@"deviceSerial"];
+    [parameters setValue:[GlobalKit shareKit].hdlHomeId forKey:@"homeId"];
+    [parameters setValue:[NSString stringWithFormat:@"%ld",(long)pageSize] forKey:@"pageSize"];
+    [parameters setValue:[NSString stringWithFormat:@"%ld",(long)pageNo] forKey:@"pageNo"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    NSLog(@"HDLpageNo:%ld",(long)pageNo);
+    [self requestHttpsPost:API_POST_EZ_GetAlarmList parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+}
+
+/**
+ * 鎵归噺鍒犻櫎鎶ヨ璁板綍
+ */
+- (void)deleteAlarmMessage:(NSArray *)alarmIds
+          completion:(void (^)(ResponseData *responseData))completion{
+    
+    //1.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:[alarmIds yy_modelToJSONObject] forKey:@"alarmIds"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    [self requestHttpsPost:API_POST_EZ_DeleteAlarmMes parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+}
+
+
+/**
+ * 鎵归噺鏍囪鎶ヨ璁板綍宸茶
+ */
+- (void)readAlarmMessage:(NSArray *)alarmIds
+          completion:(void (^)(ResponseData *responseData))completion{
+    
+    //1.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:@"1" forKey:@"isChecked"];
+    [parameters setValue:[alarmIds yy_modelToJSONObject] forKey:@"alarmIds"];
+   
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    [self requestHttpsPost:API_POST_EZ_ReadAlarmMes parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+}
+
+
+/// 鍒锋柊token
+/// @param block 缁撴灉
+- (void)refreshHDLToken:(void (^)(BOOL isSuccess))block{
+
+    //1.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:GlobalKit.shareKit.hdlRefreshToken forKey:@"refreshToken"];
+    [parameters setValue:@"refresh_token" forKey:@"grantType"];
+    [parameters setValue:@"APP" forKey:@"platform"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    [self requestHttpsBase:API_POST_EZ_RefreshToken parameters:parameters completion:^(ResponseData *responseData) {
+        if (block) {
+            if (responseData) {
+                if(responseData.success){
+                    [[EZSDK sharedInstance] setHDlAccessToken:
+                     [NSString stringWithFormat:@"%@%@",responseData.data[@"headerPrefix"], responseData.data[@"accessToken"]]
+                                refreshToken:responseData.data[@"refreshToken"]];
+
+                    block(YES);
+                    return;
+                }
+            }
+            block(NO);
+        }
+    }];
+    
+  
+//    return task;
+}
+
+
+#pragma mark HttpUtil
+
+/// 閫氱敤  璇锋眰鏈嶅姟鍣ㄦ柟娉�
+/// @param apiPath 鎺ュ彛鍦板潃
+/// @param parameters 璇锋眰鍙傛暟
+/// @param completion 璇锋眰鍝嶅簲鍙傛暟
+- (void)requestHttpsPost:(NSString *)apiPath
+                                parameters:(NSMutableDictionary *)parameters
+              completion:(void (^)(ResponseData *responseData))completion{
+    
+    [self requestHttpsBase:apiPath parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            if([responseData.code isEqual:@"10001"]){
+                //鍒锋柊token
+                [self refreshHDLToken:^(BOOL isSuccess) {
+                    if (isSuccess) {
+                        //鍒锋柊token鎴愬姛锛岄噸鏂拌姹備竴娆�
+                        [self requestHttpsBase:apiPath parameters:parameters completion:^(ResponseData *responseData) {
+                            completion(responseData);
+                            return;
+                        }];
+                    }
+                }];
+            }
+            
+            completion(responseData);
+        }
+    }];
+}
+
+/// 閫氱敤  璇锋眰鏈嶅姟鍣ㄦ柟娉�
+/// @param apiPath 鎺ュ彛鍦板潃
+/// @param parameters 璇锋眰鍙傛暟
+/// @param completion 璇锋眰鍝嶅簲鍙傛暟
+- (void)requestHttpsBase:(NSString *)apiPath
+                                parameters:(NSMutableDictionary *)parameters
+                                completion:(void (^)(ResponseData *responseData))completion{
+    
+    //1,鍒涘缓浣犲緱璇锋眰url
+    NSString *URL = [GlobalKit shareKit].GlobalRequestHttpsHost;
+    if([self stringIsNullOrEmpty:URL]){
+        URL = TestRequestHttpsHost;
+    }
+    URL = [NSString stringWithFormat:@"%@%@", URL, apiPath];
+    
+//    NSURLSessionDataTask * task=nil;
+    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
+    AFHTTPResponseSerializer *responseSerializer = [AFHTTPResponseSerializer serializer];
+    manager.responseSerializer = responseSerializer;
+      
+    //3.request
+    NSMutableURLRequest * request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"post" URLString:URL parameters:parameters error:nil];
+    request.timeoutInterval = TIME_OUT;
+    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
+    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
+    [request setValue:GlobalKit.shareKit.hdlAccessToken forHTTPHeaderField:@"Authorization"];
+    //4.dataTaskWithRequest
+    [[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
+        if (completion) {
+            ResponseData *responseData = [[ResponseData alloc] init];
+            responseData.code = @"-1";
+            
+            if(responseObject != NULL){
+                //4.瑙f瀽鎷垮埌鐨勫搷搴旀暟鎹�
+                NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
+                NSDictionary * outDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
+                responseData = [[ResponseData alloc] initWithDictionary:outDic];
+            }
+            
+            if (!responseData) {
+                responseData = [[ResponseData alloc] init];
+            }
+            completion(responseData);
+        }
+    }]resume];
+//    return task;
+}
+
+/**
+ *  鍩虹鏈嶅姟鐨勬帴鍙i兘瑕佹牎楠宻ign
+ */
+-(NSMutableDictionary *)GetSignRequestDictionary:(NSMutableDictionary *)params{
     if(params == NULL){
         params =[NSMutableDictionary dictionary];
     }
+    UInt64 recordTime = [[NSDate date] timeIntervalSince1970]*1000;
     [params setValue:APP_KEY forKey:@"appKey"];
-    [params setValue:@"" forKey:@"timestamp"];
+    [params setValue:[NSString stringWithFormat:@"%llu",recordTime] forKey:@"timestamp"];
     //1.瀵筀EY鍗囧簭
     NSArray *keyArray = [params allKeys];
     NSArray *sortKeyArray = [keyArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
@@ -31,7 +325,8 @@
     NSString *newString = @"";
     for(NSString *key in sortKeyArray){
         if(params[key] != NULL){
-            NSString *valueStr = params[key];
+            //Key瀵瑰簲鐨剉alue寮鸿浆涓篘SString
+            NSString *valueStr = [NSString stringWithFormat:@"%@",[params objectForKey:key]];
             //妫�娴嬪綋鍓嶅弬鏁版槸鍚﹂渶瑕佸弬涓庢牎楠�
             if([self IfValueNeedSign:valueStr]){
                 newString = [newString stringByAppendingString:[NSString stringWithFormat:@"%@=%@&", key,valueStr]];
@@ -40,9 +335,9 @@
     }
     //2.3 鎷兼帴SECRET_KEY
     newString = [newString substringToIndex:[newString length] - 1];
-    newString = [ newString stringByAppendingString: SECRET_KEY];
+    newString = [newString stringByAppendingString: SECRET_KEY];
     //2.4 MD5杞崲+杞皬鍐�
-    if(newString == nil || newString == NULL){
+    if([self stringIsNullOrEmpty:newString]){
         newString = @"";
     }
     NSString* signstr = [self signMD5Encrypt:newString];
@@ -51,7 +346,23 @@
     return params;
 }
 
-+ (NSString*)signMD5Encrypt:(NSString *)str
+
+/// 瀛楃涓插垽绌�
+/// @param valueStr 浼犲叆鍒ゆ柇瀛楃
+- (BOOL)stringIsNullOrEmpty:(NSString *)valueStr
+{
+    if((valueStr == nil || [valueStr isKindOfClass:[NSNull class]] || valueStr.length == 0)){
+        return YES;
+    }else{
+        return NO;
+    }
+    
+}
+
+/**
+ MD5杞崲+杞皬鍐�
+ */
+- (NSString*)signMD5Encrypt:(NSString *)str
 {
     const char *cStr = [str UTF8String];
     unsigned char digest[CC_MD5_DIGEST_LENGTH];
@@ -71,14 +382,24 @@
 /// </summary>
 /// <param name="valueStr"></param>
 /// <returns></returns>
-+(bool)IfValueNeedSign:(NSString *)valueStr{
-    if (( (valueStr == nil || [valueStr isKindOfClass:[NSNull class]] || valueStr.length == 0))//鍒ょ┖瀛楃
+-(bool)IfValueNeedSign:(NSString *)valueStr{
+    if (( [self stringIsNullOrEmpty:valueStr])//鍒ょ┖瀛楃
         || ([[valueStr substringToIndex:1] isEqual:@"{"])//鍒ゆ柇鏄惁涓哄璞�
         || ([[valueStr substringToIndex:1] isEqual:@"["])//鍒ゆ柇鏄惁涓烘暟缁�
+        || ([[valueStr substringToIndex:1] isEqual:@"("])//鍒ゆ柇鏄惁涓烘暟缁�
         ) {
+        
+//        HDLSDKLog(@"涓嶆牎楠�: %@",valueStr);
         return false;
     }
     return true;
 }
 
+
 @end
+
+
+#pragma mark - 淇敼璁板綍
+//2021-07-07
+//V1.1.3
+//1.鏇挎崲涓烘柊鎺ュ彛锛屾牴鎹甴omeId娉ㄥ唽钀ょ煶瀛愯处鍙锋柟妗堛��

--
Gitblit v1.8.0