// // jiaPeiManager.m // jiaPei // // Created by apple on 2016/12/26. // Copyright © 2016年 JCZ. All rights reserved. #import "jiaPeiManager.h" #import "AFNetworking.h" #import "DES3Util.h" #import "DesUtil.h" @implementation jiaPeiManager + (NSDictionary *)getDicWithArray:(NSArray *)array { NSMutableDictionary *questDic = [NSMutableDictionary dictionaryWithCapacity:array.count]; if (!array) { return questDic; } for (NSDictionary *dict in array) { //其实这个判断跟自定义addpro里面重复了,但是鉴于项目有些参数的添加没有使用addpro过滤。所以此处再次判断 if (dict && dict.allValues.count != 0) { [questDic setValue:[dict.allValues firstObject] forKey:[dict.allKeys firstObject]]; } } return questDic; } + (NSString *)getURLWithDict:(NSDictionary *)dic urlPre:(NSString *)urlP { //生成带有签名的URL NSString *httpUrl = defaultHttp; NSString *urlDefault = defaultHttpUrl; //公共请求 NSArray *commonArray = @[@"getAppAdsNew", //广告 @"getMyYuyueInfos", //获取自主预约 @"getMessageInfos", //我的系统消息 @"getTeachTypes", //获取日志类型 @"getMyTeachLogs", //获取日志 @"stuXXList", //获取休学记录 @"getMyReserveOrders", //获取订单 // @"uploadReserveComplaints", //获取投诉 @"getOrderComplaintsByClassId" //根据课堂ID和投诉用户ID查询投诉 ]; if ([commonArray containsObject:urlP]) { urlDefault = defaultCommonUrl; } //计时相关 NSArray *trainArray = @[@"getCoachSignForTrain", //获取教练当天签到状态 @"getSignRecords", //获取教练签到记录 @"getCoachSignStuRecords", //获取学员签到列表 @"uploadSignOutOrClassRecord", //签退并上传学时汇总 @"uploadAppTrainSingle", //分钟学时及GPS点上传 @"uploadAppTrainPl", //分钟学时批量上传 @"comparisonPhoto", //学员签到/签退/随机拍照 @"uploadStuSign", //学员签到 @"doTeach", //我要带教 @"saveCoachSignOut", //教练员签退 @"saveCoachSignIn", //教练员签到 @"doDeviceLogOut", //终端注销 @"doDeviceReg", //终端注册 @"getPrice", //培训价格 @"delLogStudent", //霸王签退 @"uploadReserveOrder", //计划生成订单 @"delReserveOrder", //删除计划订单 @"uploadBindStuImei", //学员手机设备绑定 @"getEvaluationCoachList", //教练获得的评价栏目数 @"doComplaint", //学时投诉 @"doEvaluation", //学时评论 @"getTrainFinish", //获取已完成学时 @"getTrainFinishNew", //获取已完成学时新 @"getEvaluationList", //查看学时评论 @"getStuSignFlag", //获取当前学员签到状态 @"forceSignOut", //用classid直接汇总 @"uploadMnStuLogin", //模拟计时签到 @"uploadMnSignOut", //模拟计时签退 @"getStudentTrack", //查询轨迹 @"getSchPlaces", //查询驾校训练点信息 @"getSchPlaceCoachs", //查询训练场下所有教练 @"updateReserveEnd" //预约订单签退 ]; if ([trainArray containsObject:urlP]) { urlDefault = defaultTrainUrl; } if ([urlP isEqualToString:@"comparisonPhoto"] || [urlP isEqualToString:@"takePhoto"]) { urlDefault = defaultUploadUrl; } //模拟计时 NSArray *imitate1Array = @[@"userLogin", @"userLoginOut", @"getUserLearnRecord" ]; if ([imitate1Array containsObject:urlP]) { urlDefault = defaultImitateUrl1; } //模拟计时 NSArray *imitate2Array = @[@"getTrainInsList", @"getDeviceMnList", @"getExamQuota", @"getReserveMnByDevId", @"getReserveMnList", @"getOrderMnList", @"getDiscountHalfHour", @"uploadReserveMn", @"deteleReserveMn" ]; if ([imitate2Array containsObject:urlP]) { urlDefault = defaultImitateUrl2; } NSTimeInterval timeI = [[NSDate date] timeIntervalSince1970] * 1000;//获取时间戳 单位:s *1000毫秒 NSString *urlS = @""; if (dic == nil) { urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&user=ios&v=jsjp",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI]]; }else{ //添加key字段 NSMutableString *contentString = [NSMutableString stringWithString:[self getSignStringWithDictionary:dic]]; [contentString appendFormat:@"key=%@", [NSString stringWithFormat:@"%.0f",timeI]]; // NSString *strUrl1 = [contentString stringByReplacingOccurrencesOfString:@" " withString:@""]; // NSString *strUrl2 = [strUrl1 stringByReplacingOccurrencesOfString:@"\t" withString:@""]; // NSString *strUrl3 = [strUrl1 stringByReplacingOccurrencesOfString:@"\n" withString:@""]; urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&sign=%@&user=ios&v=jsjp",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI],[[contentString md5Encrypt] uppercaseString]]; //NSLog(@"urlS----><>%@----><>%@",strUrl3,urlS); } return urlS; } + (NSString *)getSignStringWithDictionary:(NSDictionary *)dic { NSMutableString *contentString =[NSMutableString string]; NSDictionary* dict = [NSDictionary dictionaryWithDictionary:dic]; NSArray *keys = [dict allKeys]; //按字母顺序排序 NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }]; //拼接字符串 for (NSString *categoryId in sortedArray) { if (![categoryId isEqualToString:@"sign"] && ![categoryId isEqualToString:@"timestamp"]){ if([categoryId isEqualToString:@"biz_content"]){ NSError *error = nil; NSDictionary* bizDict = [dict objectForKey:@"biz_content"]; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:bizDict options:NSJSONWritingPrettyPrinted error: &error]; NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData]; NSString* jsonString1 = [[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]; NSString *jsonString2 = [jsonString1 stringByReplacingOccurrencesOfString:@" : " withString:@":"]; [contentString appendFormat:@"biz_content=%@&",jsonString2]; }else{ [contentString appendFormat:@"%@=%@&", categoryId, [dict valueForKey:categoryId]]; } } } return contentString; } //dic > string + (NSString *)dictionaryToJsonString:(NSDictionary *)dic { NSError *parseError = nil; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError]; return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; } //jsonString > dic + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString { if (jsonString == nil) { return nil; } NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *err; if (jsonData == nil) { return nil; } NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err]; if(err) { // NSLog(@"json解析失败:%@",err); ShowMsg([NSString stringWithFormat:@"数据解析失败,%@",err]); return nil; } return dic; } + (void)requestAnythingWithURL:(NSString *)urlString array:(NSArray *)aAarray data:(NSData *)uplownData completion:(MyBlockType)finishBlock { if (uplownData) {//有媒体数据上传的请求 NSString *httpUrl = defaultHttp; NSString *defaultUpload = defaultUploadUrl; NSString *urlS = [NSString stringWithFormat:@"%@%@%@",httpUrl,defaultUpload,urlString]; [urlS stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager]; afSessionManager.requestSerializer = [AFHTTPRequestSerializer serializer]; afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; afSessionManager.requestSerializer.timeoutInterval = 30; [afSessionManager POST:urlS parameters:nil headers:nil constructingBodyWithBlock:^(id _Nonnull formData) { int k = 0; for (NSData *uplownData in aAarray) { NSString *typeString = [Tools typeForImageData:uplownData]; NSString *fileType = [NSString stringWithFormat:@"image.%@",typeString]; NSString *mimeType = [NSString stringWithFormat:@"image/%@",typeString]; k ++; [formData appendPartWithFileData:uplownData name:[NSString stringWithFormat:@"photo%d",k] fileName:fileType mimeType:mimeType]; } } progress:^(NSProgress * _Nonnull uploadProgress) { //NSLog(@"uploadProgress----><>%@-----><>%@",urlS,uploadProgress); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if (responseObject == nil) { NSDictionary *dic = nil; finishBlock(dic); return; } NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; //请求成功 //NSLog(@"上传图片-----><>%@----><>%@",urlS,dic); RemoveHUD(); finishBlock(dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //请求失败 // NSLog(@"上传---><>%@",error); RemoveHUD(); //失败的时候 要把失败的事情传输回去 NSDictionary *dic = nil; finishBlock(dic); }]; }else{//无媒体数据上传的请求 NSDictionary *dic = [jiaPeiManager getDicWithArray:aAarray]; if (aAarray == nil) { dic = nil; }else { NSArray *keyArr = @[@"userOutId", @"stuOutId", @"queryValue", @"outId", @"stuId"]; NSPredicate * filterPredicate = [NSPredicate predicateWithFormat:@"SELF IN %@",keyArr]; NSArray * filter = [[dic allKeys] filteredArrayUsingPredicate:filterPredicate]; if (filter.count > 0) { if (!dic[filter.firstObject] || [dic[filter.firstObject] length] < 1) { ShowMsg(@"未绑定运管账号,无法进行此操作"); return; } } } //生成请求加密后的url NSString *urlS = [jiaPeiManager getURLWithDict:dic urlPre:urlString]; if (![urlString isEqualToString:@"getSchInfoListByTujian"]) { NSLog(@"发起请求---urlString---><>%@--->\n%@",urlS,dic); } //设置请求管理器 AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager]; afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer]; afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; afSessionManager.requestSerializer.timeoutInterval = 15; [afSessionManager POST:urlS parameters:dic headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //请求成功 if (responseObject == nil) { NSDictionary *dic = nil; finishBlock(dic); return; } NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; if (![urlString isEqualToString:@"getSchInfoListByTujian"]) { NSLog(@"请求成功123---urlString---><>%@--->\n%@",urlS,dic); } finishBlock(dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //请求失败 // NSLog(@"请求失败123----><>%@",error); RemoveHUD(); //失败的时候 要把失败的事情传输回去 NSDictionary *dic = nil; finishBlock(dic); }]; } } + (void)requestGetAnythingWithURL:(NSString *)urlString completion:(MyBlockType)finishBlock { //生成请求加密后的url NSString *urlS = [jiaPeiManager getURLWithDict:nil urlPre:urlString]; // NSLog(@"-----><>%@--------><>%@",urlString,urlS); //设置请求管理器 AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager]; afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer]; afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; [afSessionManager GET:urlS parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //NSLog(@"请求返回123-------><>%@",responseObject); if (responseObject == nil) { NSDictionary *dic = nil; finishBlock(dic); return; } NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; //NSLog(@"请求返回123---------><>%@",dic); finishBlock(dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //请求失败 // NSLog(@"请求失败123----><>%@",error); //失败的时候 要把失败的事情传输回去 @{@"code":@"1",@"body":@"请求失败"} NSDictionary *dic = nil; finishBlock(dic); }]; } #pragma mark 公共请求 +(void)requestADImage { if (![Util connectedToNetWork]) { NSString *filePath = [Tools getPathWithFileName:@"ads.plist"]; if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { NSArray *arr = [NSArray arrayWithContentsOfFile:filePath]; myDelegate.adArray = arr; } } NSMutableArray *arr=[NSMutableArray array]; [arr addPro:@"type" Value:@"4"]; NSString* method = @"getAppAdsNew"; [jiaPeiManager requestAnythingWithURL:method array:arr data:nil completion:^(NSDictionary *root) { RemoveHUD(); if (!root || [root[@"code"] isEqualToString:@"1"]) { //如果没广告图片 就从这里获取 NSString *filePath = [Tools getPathWithFileName:@"ads.plist"]; if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { NSArray *arr = [NSArray arrayWithContentsOfFile:filePath]; myDelegate.adArray = arr; } }else{ //有广告 就更新本地广告 if ([root[@"body"] count] > 0) { myDelegate.adArray = root[@"body"]; NSString *filePath = [Tools getPathWithFileName:@"ads.plist"]; [root[@"body"] writeToFile:filePath atomically:YES]; } } //这个判断是否可以在广告加载钱接收到广告 其实和放另一个地方是一样的效果 NSMutableArray *array = [NSMutableArray array]; for (NSDictionary *dic in myDelegate.adArray) { if ([dic[@"LOCATION"] isEqualToString:@"100"]) { [array addObject:dic[@"IMG"]]; } } defUser.adPaths = array; [[NSNotificationCenter defaultCenter] postNotificationName:@"updateAD" object:@"isSuccess"]; }]; } /**主要是为了更新用户数据. 比如上传头像后 */ +(void)reLoginWithCompletion:(BlockTypeVo)finishBlcok { NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSMutableArray *arr=[NSMutableArray array]; NSDictionary *udDic = [ud objectForKey:@"jiaPeiLoginTest"]; if ([udDic[@"loginType"] isEqualToString:@"1"]) { [arr property:defUser.sfzmhm forKey:@"loginCode"]; [arr property:defUser.userDict[@"password"] forKey:@"password"]; [arr property:@"" forKey:@"openId"]; //如果是第三方登录 填写token nickName [arr property:@"" forKey:@"nickName"]; //如果是第三方登录 填写获取到的昵称 [arr property:@"" forKey:@"photo"]; //如果是第三方登录 填写获取到的照片全路径 [arr property:@"" forKey:@"sex"]; //如果是第三方登录 填写获取到的用户性别 }else{ [arr property:@"" forKey:@"loginCode"]; [arr property:@"" forKey:@"password"]; [arr property:udDic[@"openId"] forKey:@"openId"]; //如果是第三方登录 填写token [arr property:udDic[@"nickName"] forKey:@"nickName"]; //如果是第三方登录 填写获取到的昵称 [arr property:udDic[@"photo"] forKey:@"photo"]; //如果是第三方登录 填写获取到的照片全路径 [arr property:udDic[@"sex"] forKey:@"sex"]; //如果是第三方登录 填写获取到的用户性别 } [arr property:udDic[@"loginType"] forKey:@"loginType"];//登录类型 [arr property:@"2" forKey:@"appType"]; NSString *systemName = [[UIDevice currentDevice] systemName]; NSString *systemVersion = [[UIDevice currentDevice] systemVersion]; [arr property:[NSString stringWithFormat:@"%@%@",systemName,systemVersion] forKey:@"systemVersion"]; NSString *identifier = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]; NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; [arr property:[NSString stringWithFormat:@"%@%@",identifier,currentVersion] forKey:@"version"]; NSString* method = @"stuLogin"; [jiaPeiManager requestAnythingWithURL:method array:arr data:nil completion:^(NSDictionary *dict) { RemoveHUD(); //NSLog(@"更新数据-->%@-----%@",arr,dict); if (!dict) { return; } if ( [dict[@"code"] isEqualToString:@"1"]) { return ; } if ( [dict[@"code"] isEqualToString:@"0"]) { } //更新信息 defUser.userDict = [NSMutableDictionary dictionaryWithDictionary:dict[@"body"]]; if ([defUser.userDict[@"schInfo"] isKindOfClass:[NSDictionary class]]) { defUser.userSchDict = [NSMutableDictionary dictionaryWithDictionary:defUser.userDict[@"schInfo"]]; }else{ defUser.userSchDict = nil; } myDelegate.isLogin = YES; if (finishBlcok) { finishBlcok(); } }]; } @end void DubugLog(NSString *logString) { if (!isOfficial) { NSLog(@"%@",logString); } }