jiaPeiManager.m 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. //
  2. // jiaPeiManager.m
  3. // jiaPei
  4. //
  5. // Created by apple on 2016/12/26.
  6. // Copyright © 2016年 JCZ. All rights reserved.
  7. //
  8. #import "jiaPeiManager.h"
  9. #import "AFNetworking.h"
  10. #import "DES3Util.h"
  11. #import "DesUtil.h"
  12. #import "Tools.h"
  13. @implementation jiaPeiManager
  14. + (NSDictionary *)getDicWithArray:(NSArray *)array
  15. {
  16. // NSLog(@"数组转字典-----><>%@",array);
  17. NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:array.count];
  18. if (!array) {
  19. return dic;
  20. }
  21. for (NSDictionary *dict in array) {
  22. [dic setValue:[dict.allValues firstObject] forKey:[dict.allKeys firstObject]];
  23. }
  24. return dic;
  25. }
  26. //生成带有签名的URL
  27. + (NSString *)getURLWithDict:(NSDictionary *)dic urlPre:(NSString *)urlP
  28. {
  29. //生成带有签名的URL
  30. NSString *httpUrl = defaultHttp;
  31. if (!isOfficial) {
  32. httpUrl = defaultHttp2;
  33. }
  34. NSString *urlDefault = defaultHttpUrl;
  35. //公共请求
  36. NSArray *commonArray = @[@"getAppAdsNew", //广告
  37. @"getMyYuyueInfos", //获取自主预约
  38. @"getMessageInfos", //我的系统消息
  39. @"getTeachTypes", //获取日志类型
  40. @"getMyTeachLogs", //获取日志
  41. // @"stuXXList", //获取休学记录
  42. @"getMyReserveOrders", //获取订单
  43. @"getOrderComplaintsByClassId" //获取投诉内容
  44. ];
  45. if ([commonArray containsObject:urlP]) {
  46. urlDefault = defaultCommonUrl;
  47. }
  48. //计时相关
  49. NSArray *trainArray = @[@"getCoachSignForTrain", //获取教练当天签到状态
  50. @"getSignRecords", //获取教练签到记录
  51. @"getCoachSignStuRecords", //获取学员签到列表
  52. @"uploadSignOutOrClassRecord", //签退并上传学时汇总
  53. @"uploadAppTrain", //分钟学时及GPS点上传
  54. @"takePhoto", //学员签到/签退/随机拍照
  55. @"uploadStuSign", //学员签到
  56. @"doTeach", //我要带教
  57. @"saveCoachSignOut", //教练员签退
  58. @"saveCoachSignIn", //教练员签到
  59. @"doDeviceLogOut", //终端注销
  60. @"doDeviceReg", //终端注册
  61. @"getPrice", //获取学时价格
  62. @"doBindCoachImei", //绑定教练imei
  63. @"saveCoachGpsInfo", //上传教练GPS
  64. @"getCoachSignStatus",
  65. @"getCoachSignStuRecordsMn", //获取教练带教情况
  66. @"getStudentTrack", //查询轨迹
  67. @"trainClassRecordList", //电子教学日志
  68. @"trainClassRecordView", //电子教学日志详细
  69. @"getStudentTrainInfos", //终端带教信息
  70. @"getTrainFiles", //获取单条电子日志照片
  71. // @"getStuPhotos", //获取学员所有培训照片
  72. @"getTrainRecordMins" //获取分钟学时
  73. ];
  74. if ([trainArray containsObject:urlP]) {
  75. urlDefault = defaultTrainUrl;
  76. }
  77. //支付相关
  78. NSArray *payArray = @[@"ccbAppPay", //获取支付链接
  79. @"getOrderPayStatus", //获取订单状态
  80. @"aliSweepClose", //关闭支付宝状态
  81. @"wechatSweepClose" //关闭微信状态
  82. ];
  83. if ([payArray containsObject:urlP] || [urlP containsString:@"getOrderPayStatus"]) {
  84. urlDefault = defaultPayUrl;
  85. }
  86. //集中式理论学习
  87. NSArray *theArray = @[@"getStudentTheoryClassesList", //获取开班学员信息列表
  88. @"getStudentClassesList", //获取带班信息列表
  89. @"coachTheorySign", //集中培训签到签退接口
  90. @"getQrcode" //获取签到/签退/过程验证二维码信息
  91. ];
  92. if ([theArray containsObject:urlP]) {
  93. urlDefault = defaultTheoryUrl;
  94. }
  95. NSTimeInterval timeI = [[NSDate date] timeIntervalSince1970] * 1000;//获取时间戳 单位:s *1000毫秒
  96. NSString *urlS = @"";
  97. if (dic == nil) {
  98. urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&user=ios&v=ln",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI]];
  99. }else{
  100. //添加key字段
  101. NSMutableString *contentString = [NSMutableString stringWithString:[self getSignStringWithDictionary:dic]];
  102. [contentString appendFormat:@"key=%@", [NSString stringWithFormat:@"%.0f",timeI]];
  103. // NSString *strUrl1 = [contentString stringByReplacingOccurrencesOfString:@" " withString:@""];
  104. // // NSString *strUrl2 = [strUrl1 stringByReplacingOccurrencesOfString:@"\t" withString:@""];
  105. // NSString *strUrl3 = [strUrl1 stringByReplacingOccurrencesOfString:@"\n" withString:@""];
  106. urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&sign=%@&user=ios&v=ln",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI],[[contentString md5Encrypt] uppercaseString]];
  107. //NSLog(@"urlS----><>%@----><>%@",strUrl3,urlS);
  108. }
  109. return urlS;
  110. }
  111. + (NSString *)getSignStringWithDictionary:(NSDictionary *)dic
  112. {
  113. NSMutableString *contentString =[NSMutableString string];
  114. NSDictionary* dict = [NSDictionary dictionaryWithDictionary:dic];
  115. NSArray *keys = [dict allKeys];
  116. //按字母顺序排序
  117. NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  118. return [obj1 compare:obj2 options:NSNumericSearch];
  119. }];
  120. //拼接字符串
  121. for (NSString *categoryId in sortedArray) {
  122. if (![categoryId isEqualToString:@"sign"] && ![categoryId isEqualToString:@"timestamp"]){
  123. if([categoryId isEqualToString:@"biz_content"]){
  124. NSError *error = nil;
  125. NSDictionary* bizDict = [dict objectForKey:@"biz_content"];
  126. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:bizDict options:NSJSONWritingPrettyPrinted error: &error];
  127. NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
  128. NSString* jsonString1 = [[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding];
  129. NSString *jsonString2 = [jsonString1 stringByReplacingOccurrencesOfString:@" : " withString:@":"];
  130. [contentString appendFormat:@"biz_content=%@&",jsonString2];
  131. }else{
  132. [contentString appendFormat:@"%@=%@&", categoryId, [dict valueForKey:categoryId]];
  133. }
  134. }
  135. }
  136. return contentString;
  137. }
  138. //dic > string
  139. + (NSString *)dictionaryToJsonString:(NSDictionary *)dic
  140. {
  141. NSError *parseError = nil;
  142. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
  143. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  144. }
  145. //jsonString > dic
  146. + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
  147. if (jsonString == nil) {
  148. return nil;
  149. }
  150. NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
  151. NSError *err;
  152. if (jsonData == nil) {
  153. return nil;
  154. }
  155. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
  156. options:NSJSONReadingMutableContainers
  157. error:&err];
  158. if(err) {
  159. // NSLog(@"json解析失败:%@",err);
  160. ShowMsg([NSString stringWithFormat:@"数据解析失败,%@",err]);
  161. return nil;
  162. }
  163. return dic;
  164. }
  165. + (void)requestAnythingWithURL:(NSString *)urlString array:(NSArray *)aAarray data:(NSData *)uplownData completion:(MyBlockType)finishBlock
  166. {
  167. if (uplownData) {//有媒体数据上传的请求
  168. NSString *httpUrl = isOfficial == YES?defaultHttp:defaultHttp2;
  169. NSString *defaultUpload = defaultUploadUrl;
  170. NSString *urlS = [NSString stringWithFormat:@"%@%@%@",httpUrl,defaultUpload,urlString];
  171. [urlS stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  172. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  173. afSessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
  174. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  175. afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
  176. afSessionManager.requestSerializer.timeoutInterval = 60;
  177. [afSessionManager POST:urlS parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  178. int k = 0;
  179. for (NSData *uplownData in aAarray) {
  180. NSString *typeString = [Tools typeForImageData:uplownData];
  181. NSString *fileType = [NSString stringWithFormat:@"image.%@",typeString];
  182. NSString *mimeType = [NSString stringWithFormat:@"image/%@",typeString];
  183. k ++;
  184. [formData appendPartWithFileData:uplownData
  185. name:[NSString stringWithFormat:@"photo%d",k]
  186. fileName:fileType
  187. mimeType:mimeType];
  188. }
  189. } progress:^(NSProgress * _Nonnull uploadProgress) {
  190. //NSLog(@"uploadProgress----><>%@-----><>%@",urlS,uploadProgress);
  191. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  192. //如果返回空的data 返回失败好了
  193. if (responseObject == nil) {
  194. NSDictionary *dic = nil;
  195. finishBlock(dic);
  196. return;
  197. }
  198. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  199. options:NSJSONReadingMutableContainers
  200. error:nil];
  201. //请求成功
  202. // NSLog(@"上传图片-----><>%@----><>%@",urlS,dic);
  203. RemoveHUD();
  204. finishBlock(dic);
  205. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  206. //请求失败
  207. RemoveHUD();
  208. //失败的时候 要把失败的事情传输回去
  209. NSDictionary *dic = nil;
  210. finishBlock(dic);
  211. }];
  212. }else{
  213. //无媒体数据上传的请求
  214. NSDictionary *dic = [jiaPeiManager getDicWithArray:aAarray];
  215. if (aAarray == nil) {
  216. dic = nil;
  217. }
  218. //生成请求加密后的url
  219. NSString *urlS = [jiaPeiManager getURLWithDict:dic urlPre:urlString];
  220. NSLog(@"--------><>%@-------><>%@",urlS,dic);
  221. //设置请求管理器
  222. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  223. afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
  224. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  225. afSessionManager.requestSerializer.timeoutInterval = 15;
  226. [afSessionManager POST:urlS parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  227. //请求成功
  228. //如果返回空的data 返回失败好了
  229. if (responseObject == nil) {
  230. NSDictionary *dic = nil;
  231. finishBlock(dic);
  232. return;
  233. }
  234. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  235. options:NSJSONReadingMutableContainers
  236. error:nil];
  237. finishBlock(dic);
  238. NSLog(@"-Success-------><>%@------->%@",urlString,dic);
  239. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  240. //请求失败
  241. NSLog(@"-failure-------><>%@------->%@",urlString,error);
  242. RemoveHUD();
  243. //失败的时候 要把失败的事情传输回去
  244. NSDictionary *dic = nil;
  245. finishBlock(dic);
  246. }];
  247. }
  248. }
  249. + (void)requestGetAnythingWithURL:(NSString *)urlString completion:(MyBlockType)finishBlock
  250. {
  251. //生成请求加密后的url
  252. NSString *urlS = [jiaPeiManager getURLWithDict:nil urlPre:urlString];
  253. //NSLog(@"-----><>%@--------><>%@",urlString,urlS);
  254. //设置请求管理器
  255. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  256. afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
  257. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  258. [afSessionManager GET:urlS parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  259. //如果返回空的data 返回失败好了
  260. if (responseObject == nil) {
  261. NSDictionary *dic = nil;
  262. finishBlock(dic);
  263. return;
  264. }
  265. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  266. options:NSJSONReadingMutableContainers
  267. error:nil];
  268. finishBlock(dic);
  269. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  270. //请求失败
  271. //失败的时候 要把失败的事情传输回去 @{@"code":@"1",@"body":@"请求失败"}
  272. NSDictionary *dic = nil;
  273. finishBlock(dic);
  274. }];
  275. }
  276. @end