| | |
| | | #import "EZPlaybackViewController.h" |
| | | #import "EZDeviceTableViewController.h" |
| | | #import "EZHCNetDeviceSDK.h" |
| | | #import "AFNetworking.h" |
| | | #import <Foundation/Foundation.h> |
| | | #import <CommonCrypto/CommonDigest.h> |
| | | |
| | | #define API_POST_EZ_AddDevice @"/home-wisdom/platform/child/device/add" |
| | | #define API_POST_EZ_GetChildToken @"/home-wisdom/platform/childToken" |
| | | |
| | | |
| | | #define APP_KEY @"HDL-HOME-APP-TEST" |
| | | #define SECRET_KEY @"WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss" |
| | | |
| | | |
| | | |
| | | @implementation EZSDK |
| | |
| | | [EZOPENSDK setAccessToken:accessToken]; |
| | | } |
| | | |
| | | |
| | | /** |
| | | 设置HDLSDK的accessToken |
| | | */ |
| | | +(void)setHDlAccessToken:(NSString *) accessToken refreshToken:(NSString *) refreshToken |
| | | { |
| | | [[GlobalKit shareKit] setHdlAccessToken:accessToken]; |
| | | [[GlobalKit shareKit] setHdlRefreshToken:refreshToken]; |
| | | } |
| | | |
| | | //获取当前屏幕显示的viewcontroller (这里面获取的相当于rootViewController) |
| | | +(UINavigationController *)getCurrentVC |
| | |
| | | // } |
| | | //} |
| | | |
| | | #pragma mark -接口请求部分 |
| | | /** |
| | | * @since 河东获取子账号token的接口 |
| | | * |
| | | * @param block 回调block |
| | | */ |
| | | + (NSURLSessionDataTask *)getChildToken:(void (^)(NSString *accessToken))block{ |
| | | //1,创建你得请求url |
| | | NSString *URL = @""; |
| | | if([GlobalKit shareKit].GlobalRequestHttpsHost == NULL){ |
| | | URL = @"https://test-gz.hdlcontrol.com"; |
| | | } |
| | | URL = [NSString stringWithFormat:@"%@%@", URL, API_POST_EZ_GetChildToken]; |
| | | |
| | | //2.设置请求参数 |
| | | NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; |
| | | parameters = [self GetSignRequestDictionary:parameters]; |
| | | |
| | | NSURLSessionDataTask*task=nil; |
| | | AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; |
| | | AFHTTPResponseSerializer *responseSerializer = [AFHTTPResponseSerializer serializer]; |
| | | manager.responseSerializer = responseSerializer; |
| | | |
| | | NSMutableURLRequest * request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"post" URLString:URL parameters:parameters error:nil]; |
| | | [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; |
| | | [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; |
| | | [request setValue:GlobalKit.shareKit.hdlAccessToken forHTTPHeaderField:@"Authorization"]; |
| | | |
| | | [[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { |
| | | |
| | | //4.解析拿到的响应数据 |
| | | NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]); |
| | | |
| | | if (block) { |
| | | NSString * token = @""; |
| | | block (token); |
| | | } |
| | | }]resume]; |
| | | return task; |
| | | |
| | | |
| | | } |
| | | /** |
| | | * @since 河东添加设备的接口 |
| | | * 根据设备序列号和设备验证码添加设备接口 |
| | | * |
| | | * @param deviceSerial 设备序列号 |
| | | * @param verifyCode 设备验证码 |
| | | * @param completion 回调block,error为空时表示添加成功 |
| | | * |
| | | * @return operation |
| | | */ |
| | | + (NSURLSessionDataTask *)addDeviceByHDL:(NSString *)deviceSerial |
| | | verifyCode:(NSString *)verifyCode |
| | | completion:(void (^)(NSError *error))completion{ |
| | | |
| | | //1,创建你得请求url |
| | | NSString *URL = @""; |
| | | if([GlobalKit shareKit].GlobalRequestHttpsHost == NULL){ |
| | | URL = @"https://test-gz.hdlcontrol.com"; |
| | | } |
| | | URL = [NSString stringWithFormat:@"%@%@",URL, @"/smart-footstone/region/regionByAccount"]; |
| | | |
| | | //2.设置请求参数 |
| | | NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; |
| | | // [parameters setValue:deviceSerial forKey:@"deviceSerial"]; |
| | | // [parameters setValue:verifyCode forKey:@"verifyCode"]; |
| | | // parameters[@"deviceSerial"] = deviceSerial; |
| | | // parameters[@"verifyCode"] = verifyCode; |
| | | parameters[@"account"] = @"18824864143"; |
| | | |
| | | // parameters = [self GetSignRequestDictionary:parameters]; |
| | | |
| | | NSURLSessionDataTask*task=nil; |
| | | AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; |
| | | AFHTTPResponseSerializer *responseSerializer = [AFHTTPResponseSerializer serializer]; |
| | | manager.responseSerializer = responseSerializer; |
| | | |
| | | NSMutableURLRequest * request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"post" URLString:URL parameters:parameters error:nil]; |
| | | [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; |
| | | [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; |
| | | |
| | | [[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { |
| | | |
| | | // //拿到响应头信息 |
| | | // NSHTTPURLResponse *res = (NSHTTPURLResponse *)response; |
| | | |
| | | //4.解析拿到的响应数据 |
| | | NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]); |
| | | |
| | | if (completion) { |
| | | // error.code = 105002; |
| | | completion (error); |
| | | } |
| | | }]resume]; |
| | | return task; |
| | | } |
| | | |
| | | #pragma mark HttpUtil |
| | | /** |
| | | * 基础服务的接口都要校验sign |
| | | */ |
| | | +(NSMutableDictionary *)GetSignRequestDictionary:(NSMutableDictionary *)params{ |
| | | if(params == NULL){ |
| | | params =[NSMutableDictionary dictionary]; |
| | | } |
| | | UInt64 recordTime = [[NSDate date] timeIntervalSince1970]*1000; |
| | | [params setValue:APP_KEY forKey:@"appKey"]; |
| | | [params setValue:[NSString stringWithFormat:@"%llu",recordTime] forKey:@"timestamp"]; |
| | | //1.对KEY升序 |
| | | NSArray *keyArray = [params allKeys]; |
| | | NSArray *sortKeyArray = [keyArray sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { |
| | | return [obj1 compare:obj2 options:NSNumericSearch]; |
| | | }]; |
| | | //2.2 拼接按URL键值对 |
| | | NSString *newString = @""; |
| | | for(NSString *key in sortKeyArray){ |
| | | if(params[key] != NULL){ |
| | | NSString *valueStr = params[key]; |
| | | //检测当前参数是否需要参与校验 |
| | | if([self IfValueNeedSign:valueStr]){ |
| | | newString = [newString stringByAppendingString:[NSString stringWithFormat:@"%@=%@&", key,valueStr]]; |
| | | } |
| | | } |
| | | } |
| | | //2.3 拼接SECRET_KEY |
| | | newString = [newString substringToIndex:[newString length] - 1]; |
| | | newString = [newString stringByAppendingString: SECRET_KEY]; |
| | | //2.4 MD5转换+转小写 |
| | | if(newString == nil || newString == NULL){ |
| | | newString = @""; |
| | | } |
| | | NSString* signstr = [self signMD5Encrypt:newString]; |
| | | [params setValue:signstr forKey:@"sign"]; |
| | | |
| | | return params; |
| | | } |
| | | |
| | | /** |
| | | MD5转换+转小写 |
| | | */ |
| | | + (NSString*)signMD5Encrypt:(NSString *)str |
| | | { |
| | | const char *cStr = [str UTF8String]; |
| | | unsigned char digest[CC_MD5_DIGEST_LENGTH]; |
| | | CC_MD5( cStr, strlen(cStr),digest ); |
| | | NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; |
| | | for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) |
| | | [result appendFormat:@"%02x", digest[i]]; |
| | | return result; |
| | | |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 判断当前值是否需要参与签名,保持跟云端一致 |
| | | /// 空字符串不参与 |
| | | /// 数组,集合,对象不参与 |
| | | /// </summary> |
| | | /// <param name="valueStr"></param> |
| | | /// <returns></returns> |
| | | +(bool)IfValueNeedSign:(NSString *)valueStr{ |
| | | if (( (valueStr == nil || [valueStr isKindOfClass:[NSNull class]] || valueStr.length == 0))//判空字符 |
| | | || ([[valueStr substringToIndex:1] isEqual:@"{"])//判断是否为对象 |
| | | || ([[valueStr substringToIndex:1] isEqual:@"["])//判断是否为数组 |
| | | ) { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | @end |