jiaPeiManager.m 15 KB

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