// // 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" #import "Tools.h" @implementation jiaPeiManager + (NSDictionary *)getDicWithArray:(NSArray *)array { // NSLog(@"数组转字典-----><>%@",array); NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:array.count]; if (!array) { return dic; } for (NSDictionary *dict in array) { [dic setValue:[dict.allValues firstObject] forKey:[dict.allKeys firstObject]]; } return dic; } //生成带有签名的URL + (NSString *)getURLWithDict:(NSDictionary *)dic urlPre:(NSString *)urlP { //生成带有签名的URL NSString *httpUrl = defaultHttp; if (!isOfficial) { httpUrl = defaultHttp2; } NSString *urlDefault = defaultHttpUrl; //公共请求 NSArray *commonArray = @[@"getAppAdsNew", //广告 @"getMyYuyueInfos", //获取自主预约 @"getMessageInfos", //我的系统消息 @"getTeachTypes", //获取日志类型 @"getMyTeachLogs", //获取日志 // @"stuXXList", //获取休学记录 @"getMyReserveOrders", //获取订单 @"getOrderComplaintsByClassId" //获取投诉内容 ]; if ([commonArray containsObject:urlP]) { urlDefault = defaultCommonUrl; } //计时相关 NSArray *trainArray = @[@"getCoachSignForTrain", //获取教练当天签到状态 @"getSignRecords", //获取教练签到记录 @"getCoachSignStuRecords", //获取学员签到列表 @"uploadSignOutOrClassRecord", //签退并上传学时汇总 @"uploadAppTrain", //分钟学时及GPS点上传 @"takePhoto", //学员签到/签退/随机拍照 @"uploadStuSign", //学员签到 @"doTeach", //我要带教 @"saveCoachSignOut", //教练员签退 @"saveCoachSignIn", //教练员签到 @"doDeviceLogOut", //终端注销 @"doDeviceReg", //终端注册 @"getPrice", //获取学时价格 @"doBindCoachImei", //绑定教练imei @"saveCoachGpsInfo", //上传教练GPS @"getCoachSignStatus", @"getCoachSignStuRecordsMn", //获取教练带教情况 @"getStudentTrack", //查询轨迹 @"trainClassRecordList", //电子教学日志 @"trainClassRecordView", //电子教学日志详细 @"getStudentTrainInfos", //终端带教信息 @"getTrainFiles", //获取单条电子日志照片 // @"getStuPhotos", //获取学员所有培训照片 @"getTrainRecordMins" //获取分钟学时 ]; if ([trainArray containsObject:urlP]) { urlDefault = defaultTrainUrl; } //支付相关 NSArray *payArray = @[@"ccbAppPay", //获取支付链接 @"getOrderPayStatus", //获取订单状态 @"aliSweepClose", //关闭支付宝状态 @"wechatSweepClose" //关闭微信状态 ]; if ([payArray containsObject:urlP] || [urlP containsString:@"getOrderPayStatus"]) { urlDefault = defaultPayUrl; } //集中式理论学习 NSArray *theArray = @[@"getStudentTheoryClassesList", //获取开班学员信息列表 @"getStudentClassesList", //获取带班信息列表 @"coachTheorySign", //集中培训签到签退接口 @"getQrcode" //获取签到/签退/过程验证二维码信息 ]; if ([theArray containsObject:urlP]) { urlDefault = defaultTheoryUrl; } NSTimeInterval timeI = [[NSDate date] timeIntervalSince1970] * 1000;//获取时间戳 单位:s *1000毫秒 NSString *urlS = @""; if (dic == nil) { urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&user=ios&v=ln",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=ln",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 = isOfficial == YES?defaultHttp:defaultHttp2; NSString *defaultUpload = defaultUploadUrl; NSString *urlS = [NSString stringWithFormat:@"%@%@%@",httpUrl,defaultUpload,urlString]; [urlS stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager]; afSessionManager.requestSerializer = [AFHTTPRequestSerializer serializer]; afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; afSessionManager.requestSerializer.timeoutInterval = 60; [afSessionManager POST:urlS parameters: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) { //如果返回空的data 返回失败好了 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) { //请求失败 RemoveHUD(); //失败的时候 要把失败的事情传输回去 NSDictionary *dic = nil; finishBlock(dic); }]; }else{ //无媒体数据上传的请求 NSDictionary *dic = [jiaPeiManager getDicWithArray:aAarray]; if (aAarray == nil) { dic = nil; } //生成请求加密后的url NSString *urlS = [jiaPeiManager getURLWithDict:dic urlPre:urlString]; NSLog(@"--------><>%@-------><>%@",urlS,dic); //设置请求管理器 AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager]; afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer]; afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; afSessionManager.requestSerializer.timeoutInterval = 15; [afSessionManager POST:urlS parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //请求成功 //如果返回空的data 返回失败好了 if (responseObject == nil) { NSDictionary *dic = nil; finishBlock(dic); return; } NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; finishBlock(dic); NSLog(@"-Success-------><>%@------->%@",urlString,dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //请求失败 NSLog(@"-failure-------><>%@------->%@",urlString,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 progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //如果返回空的data 返回失败好了 if (responseObject == nil) { NSDictionary *dic = nil; finishBlock(dic); return; } NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; finishBlock(dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //请求失败 //失败的时候 要把失败的事情传输回去 @{@"code":@"1",@"body":@"请求失败"} NSDictionary *dic = nil; finishBlock(dic); }]; } @end