NetWorkManager.m 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764
  1. //
  2. // NetWorkManager.m
  3. // BuguLive
  4. //
  5. // Created by xfg on 2017/7/26.
  6. // Copyright © 2017年 xfg. All rights reserved.
  7. //
  8. #import "NetWorkManager.h"
  9. #import "AFNetworking.h"
  10. #import "ApiLinkModel.h"
  11. #import "GTMBase64.h"
  12. #import "AFHTTPSessionManager+Singlton.h"
  13. #define kOvertime 30 // 请求超时时间
  14. @implementation NetWorkManager
  15. #pragma mark - ----------------------- 相关配置 -----------------------
  16. #pragma mark 判断当前网络状态
  17. + (BOOL)isExistenceNetwork
  18. {
  19. BOOL isExistenceNetwork = YES;
  20. switch ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus)
  21. {
  22. case AFNetworkReachabilityStatusUnknown:
  23. isExistenceNetwork = YES;
  24. break;
  25. case AFNetworkReachabilityStatusNotReachable:
  26. isExistenceNetwork = NO;
  27. break;
  28. case AFNetworkReachabilityStatusReachableViaWWAN:
  29. isExistenceNetwork = YES;
  30. break;
  31. case AFNetworkReachabilityStatusReachableViaWiFi:
  32. isExistenceNetwork = YES;
  33. break;
  34. default:
  35. break;
  36. }
  37. return isExistenceNetwork;
  38. }
  39. #pragma mark 非指定url时,获取url
  40. + (NSString *)getUrlStr:(NSMutableDictionary *)parmDict
  41. {
  42. GlobalVariables *BuguLive = [GlobalVariables sharedInstance];
  43. NSString *urlString = BuguLive.currentDoMianUrlStr;
  44. if (BuguLive.appModel.api_link)
  45. {
  46. if ([BuguLive.appModel.api_link count])
  47. {
  48. for (ApiLinkModel *apiLinkModel in BuguLive.appModel.api_link)
  49. {
  50. NSString *ctl_act = [NSString stringWithFormat:@"%@_%@",[parmDict toString:@"ctl"],[parmDict toString:@"act"]];
  51. if ([ctl_act isEqualToString:apiLinkModel.ctl_act])
  52. {
  53. urlString = apiLinkModel.api;
  54. }
  55. }
  56. }
  57. }
  58. return urlString;
  59. }
  60. +(void)tryAddLangParamDict:(NSMutableDictionary *)paramDict
  61. {
  62. if(![[paramDict allKeys] containsObject:@"language"])
  63. {
  64. NSString *language = [[NSUserDefaults standardUserDefaults] objectForKey:KAppLanguage];
  65. if([language isEqualToString:@"zh-Hans"]){
  66. [paramDict setObject:@"zh-cn" forKey:@"language"];
  67. }else if([language isEqualToString:@"th"]){
  68. //泰语
  69. [paramDict setObject:@"th" forKey:@"language"];
  70. }else if([language isEqualToString:@"zh-Hant"]){
  71. //中文繁体
  72. [paramDict setObject:@"tc" forKey:@"language"];
  73. }else if([language isEqualToString:@"vi"]){
  74. //越南语
  75. [paramDict setObject:@"vi" forKey:@"language"];
  76. }else if([language isEqualToString:@"ja"]){
  77. //日语
  78. [paramDict setObject:@"ja" forKey:@"language"];
  79. }else if([language isEqualToString:@"ar"]){
  80. //阿拉伯语
  81. [paramDict setObject:@"ar" forKey:@"language"];
  82. }else{
  83. //默认英语
  84. [paramDict setObject:@"zh-en" forKey:@"language"];
  85. }
  86. }
  87. }
  88. +(NSMutableDictionary *)tryAddLangParamDict2:(NSDictionary *)par
  89. {
  90. NSMutableDictionary *paramDict = [NSMutableDictionary dictionaryWithDictionary:par];
  91. {
  92. if(![[paramDict allKeys] containsObject:@"language"])
  93. {
  94. NSString *language = [[NSUserDefaults standardUserDefaults] objectForKey:KAppLanguage];
  95. if([language isEqualToString:@"zh-Hans"]){
  96. [paramDict setObject:@"zh-cn" forKey:@"language"];
  97. }else if([language isEqualToString:@"th"]){
  98. //泰语
  99. [paramDict setObject:@"th" forKey:@"language"];
  100. }else if([language isEqualToString:@"zh-Hant"]){
  101. //中文繁体
  102. [paramDict setObject:@"tc" forKey:@"language"];
  103. }else if([language isEqualToString:@"vi"]){
  104. //越南语
  105. [paramDict setObject:@"vi" forKey:@"language"];
  106. }else if([language isEqualToString:@"ja"]){
  107. //日语
  108. [paramDict setObject:@"ja" forKey:@"language"];
  109. }else if([language isEqualToString:@"ar"]){
  110. //阿拉伯语
  111. [paramDict setObject:@"ar" forKey:@"language"];
  112. }else{
  113. //默认英语
  114. [paramDict setObject:@"zh-en" forKey:@"language"];
  115. }
  116. }
  117. }
  118. return paramDict;
  119. }
  120. #pragma mark 底层参数等
  121. + (NSMutableDictionary *)getLocalParm:(NSMutableDictionary *)parmDict url:(NSString *)urlStr
  122. {
  123. [self tryAddLangParamDict:parmDict];
  124. GlobalVariables *BuguLive = [GlobalVariables sharedInstance];
  125. if([GlobalVariables sharedInstance].openinstallDic != nil)
  126. {
  127. // [parmDict setDictionary:[GlobalVariables sharedInstance].openinstallDic];
  128. [parmDict addEntriesFromDictionary:[GlobalVariables sharedInstance].openinstallDic];
  129. }
  130. #if kSupportH5Shopping
  131. [parmDict setObject:@"sdk" forKey:@"itype"];
  132. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  133. NSString *docDir = [paths objectAtIndex:0];
  134. NSString *filePath = [docDir stringByAppendingPathComponent:@"session_id"];
  135. NSArray *array = [[NSArray alloc]initWithContentsOfFile:filePath];
  136. if (array.count)
  137. {
  138. [parmDict setObject:array[0] forKey:@"session_id"];
  139. }
  140. #endif
  141. [parmDict setObject:VersionNum forKey:@"sdk_version_name"];
  142. [parmDict setObject:@"ios" forKey:@"sdk_type"];
  143. [parmDict setObject:VersionTime forKey:@"sdk_version"];
  144. // [parmDict setObject:[NSString stringWithFormat:@"%f",kScreenW] forKey:@"kScreenW"];
  145. // [parmDict setObject:[NSString stringWithFormat:@"%f",kScreenHeight] forKey:@"kScreenH"];
  146. if (BuguLive.longitude && BuguLive.latitude)
  147. {
  148. [parmDict setObject:[NSString stringWithFormat:@"%f",BuguLive.longitude] forKey:@"xpoint"]; // 经度
  149. [parmDict setObject:[NSString stringWithFormat:@"%f",BuguLive.latitude] forKey:@"ypoint"]; // 经度
  150. [parmDict setObject:[NSString stringWithFormat:@"%f",BuguLive.longitude] forKey:@"lat"]; // 经度
  151. [parmDict setObject:[NSString stringWithFormat:@"%f",BuguLive.latitude] forKey:@"lng"]; // 经度
  152. }
  153. #if kAppStoreVersion
  154. #else
  155. #ifdef DEBUG
  156. //=======================================此段代码只是用于打印URL============================================================
  157. /*调试代码 */
  158. NSInteger count = parmDict.count;
  159. NSString *str = [NSString stringWithFormat:@"%@?",urlStr];
  160. for (int i = 0;i < count;i++)
  161. {
  162. NSString *tmpStr = [NSString stringWithFormat:@"%@=%@&",parmDict.allKeys[i],parmDict.allValues[i]];
  163. if (tmpStr && ![tmpStr isEqualToString:@""])
  164. {
  165. str = [str stringByAppendingString:tmpStr];
  166. }
  167. }
  168. NSLog(ASLocalizedString(@"请求链接-----------------------------------------------------\n%@"),str);
  169. NSLog(@"-----------------------------------------------------------------------\n");
  170. //========================================此段代码只是用于打印URL============================================================
  171. #endif
  172. #endif
  173. if ([IsNeedAES isEqualToString:@"YES"])
  174. {
  175. // if (BuguLive.aesKeyStr.length != 16)
  176. // {
  177. // [FanweMessage alert:ASLocalizedString(@"您的AES加密密码长度不是16位!")];
  178. // }
  179. // AES加密
  180. NSData *data = [NSJSONSerialization dataWithJSONObject:parmDict options:NSJSONWritingPrettyPrinted error:nil];
  181. if (data)
  182. {
  183. NSString *parmStr = [data AES256EncryptWithKey:BuguLive.aesKeyStr];
  184. if (![BGUtils isBlankString:parmStr])
  185. {
  186. NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary];
  187. [tmpDict setObject:[parmDict toString:@"act"] forKey:@"act"];
  188. [tmpDict setObject:[parmDict toString:@"ctl"] forKey:@"ctl"];
  189. if ([parmDict objectForKey:@"itype"])
  190. {
  191. [tmpDict setObject:[parmDict toString:@"itype"] forKey:@"itype"];
  192. }
  193. [tmpDict setObject:VersionNum forKey:@"sdk_version_name"];
  194. // [parmDict removeAllObjects];
  195. // parmDict = tmpDict;
  196. [parmDict setObject:parmStr forKey:@"requestData"];
  197. // [parmDict setObject:@"lib" forKey:@"i_type"];
  198. [parmDict setObject:@"1" forKey:@"i_type"];
  199. }
  200. }
  201. }
  202. return parmDict;
  203. }
  204. #pragma mark 保存cookie
  205. + (void)myCookieStorage
  206. {
  207. NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:kMyCookies];
  208. if([cookiesdata length])
  209. {
  210. NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata];
  211. NSHTTPCookie *cookie;
  212. for (cookie in cookies)
  213. {
  214. if (![BGUtils isBlankString:cookie.name] && ![BGUtils isBlankString:cookie.value])
  215. {
  216. [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
  217. }
  218. }
  219. }
  220. }
  221. #pragma mark - ----------------------- 请求网络方法 -----------------------
  222. /**
  223. POST异步请求方法一
  224. @param act act、ctl组合起来就是一个接口
  225. @param ctl act、ctl组合起来就是一个接口
  226. @param paramDict 请求参数
  227. @param successBlock 成功回调
  228. @param failureBlock 失败回调
  229. */
  230. + (void)asyncPostWithAct:(NSString*)act ctl:(NSString*)ctl paramDict:(NSMutableDictionary *)paramDict successBlock:(SuccessBlock2)successBlock failureBlock:(FailureBlock2)failureBlock
  231. {
  232. NSMutableDictionary* postdic = NSMutableDictionary.new;
  233. if(paramDict)
  234. {
  235. [postdic setDictionary:paramDict];
  236. }
  237. [postdic setObject:act forKey:@"act"];
  238. [postdic setObject:ctl forKey:@"ctl"];
  239. [NetWorkManager asyncPostWithParameters:postdic successBlock:successBlock failureBlock:failureBlock];
  240. }
  241. /**
  242. POST异步请求方法二
  243. @param paramDict 请求参数
  244. @param successBlock 成功回调
  245. @param failureBlock 失败回调
  246. */
  247. + (void)asyncPostWithParameters:(NSMutableDictionary *)paramDict successBlock:(SuccessBlock2)successBlock failureBlock:(FailureBlock2)failureBlock
  248. {
  249. [NetWorkManager asyncPostWithUrl:[NetWorkManager getUrlStr:paramDict] paramDict:paramDict successBlock:successBlock failureBlock:failureBlock];
  250. }
  251. /**
  252. POST异步请求方法三
  253. @param urlStr 请求的链接
  254. @param paramDict 请求参数
  255. @param successBlock 成功回调
  256. @param failureBlock 失败回调
  257. */
  258. + (void)asyncPostWithUrl:(NSString *)urlStr paramDict:(NSMutableDictionary *)paramDict successBlock:(SuccessBlock2)successBlock failureBlock:(FailureBlock2)failureBlock
  259. {
  260. [NetWorkManager asyncPostWithFileUrl:nil url:urlStr paramDict:paramDict successBlock:successBlock failureBlock:failureBlock];
  261. }
  262. /**
  263. POST异步请求方法四
  264. @param fileUrlStr 文件的url,流传输方式
  265. @param urlStr 请求的链接,传nil则表示用底层默认的
  266. @param paramDict 请求参数
  267. @param successBlock 成功回调
  268. @param failureBlock 失败回调
  269. */
  270. + (void)asyncPostWithFileUrl:(NSURL *)fileUrlStr url:(NSString *)urlStr paramDict:(NSMutableDictionary *)paramDict successBlock:(SuccessBlock2)successBlock failureBlock:(FailureBlock2)failureBlock
  271. {
  272. if ([BGUtils isBlankString:urlStr])
  273. {
  274. urlStr = [NetWorkManager getUrlStr:paramDict];
  275. }
  276. paramDict = [self getLocalParm:paramDict url:urlStr];
  277. if (![NetWorkManager isExistenceNetwork])
  278. {
  279. NSLog(ASLocalizedString(@"请检查当前网络"));
  280. }
  281. else
  282. {
  283. [self myCookieStorage];
  284. AFHTTPSessionManager *manager = [AFHTTPSessionManager defaultNetManager];
  285. [manager POST:urlStr parameters:paramDict headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData){
  286. if (fileUrlStr)
  287. {
  288. [formData appendPartWithFileURL:fileUrlStr name:@"file" error:nil];
  289. }
  290. } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject){
  291. if (successBlock)
  292. {
  293. [NetWorkManager doResult:responseObject url:urlStr paramDict:paramDict successBlock:successBlock failureBlock:failureBlock];
  294. }
  295. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  296. if (failureBlock)
  297. {
  298. [NetWorkManager updateErrorToServiceWithUrl:urlStr paramDict:paramDict errorString:[NSString stringWithFormat:@"%@",error]];
  299. failureBlock(error, [AppNetWorkModel manager]);
  300. }
  301. }];
  302. }
  303. }
  304. /**
  305. GET异步请求方法
  306. @param urlStr 请求的链接
  307. @param headers headers
  308. @param successBlock 成功回调
  309. @param failureBlock 失败回调
  310. */
  311. + (void)asyncGetWithUrl:(NSString *)urlStr headers:(NSMutableDictionary *)headers successBlock:(SuccessBlock2)successBlock failureBlock:(FailureBlock2)failureBlock
  312. {
  313. if (![NetWorkManager isExistenceNetwork])
  314. {
  315. NSLog(ASLocalizedString(@"请检查当前网络"));
  316. }
  317. else
  318. {
  319. AFHTTPSessionManager *manager;
  320. NSURL *baseURL = [NSURL URLWithString:urlStr];
  321. if (headers)
  322. {
  323. //设置和加入头信息
  324. NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
  325. [config setHTTPAdditionalHeaders:headers];
  326. manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL sessionConfiguration:config];
  327. }
  328. else
  329. {
  330. manager = [[AFHTTPSessionManager alloc]initWithBaseURL:baseURL];
  331. }
  332. manager.requestSerializer = [AFHTTPRequestSerializer serializer];
  333. manager.responseSerializer =[AFHTTPResponseSerializer serializer];
  334. manager.requestSerializer.timeoutInterval = kOvertime;
  335. manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/xml", @"text/plain", nil];
  336. [manager GET:urlStr parameters:[self getLocalParm:[NSMutableDictionary dictionary] url:urlStr] headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {
  337. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  338. if (successBlock)
  339. {
  340. [NetWorkManager doResult:responseObject url:urlStr paramDict:nil successBlock:successBlock failureBlock:failureBlock];
  341. }
  342. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  343. if (failureBlock)
  344. {
  345. failureBlock(error, [AppNetWorkModel manager]);
  346. }
  347. }];
  348. }
  349. }
  350. /**
  351. POST同步请求方法
  352. @param urlStr 请求的链接
  353. @param paramDict 请求的链接,传nil则表示用底层默认的
  354. @param successBlock 成功回调
  355. @param failureBlock 失败回调
  356. */
  357. + (void)syncPostWithUrl:(NSString *)urlStr paramDict:(NSMutableDictionary *)paramDict successBlock:(SuccessBlock2)successBlock failureBlock:(FailureBlock2)failureBlock
  358. {
  359. if ([BGUtils isBlankString:urlStr])
  360. {
  361. urlStr = [NetWorkManager getUrlStr:paramDict];
  362. }
  363. NSURL *url = [NSURL URLWithString:urlStr];
  364. dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //创建信号量
  365. //(1)构造Request
  366. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
  367. //(2)设置为POST请求
  368. [request setHTTPMethod:@"POST"];
  369. //(3)超时
  370. [request setTimeoutInterval:kOvertime];
  371. //(4)设置请求头
  372. //[request setAllHTTPHeaderFields:nil];
  373. //(5)设置请求体
  374. NSMutableString *params = nil;
  375. if(nil != paramDict)
  376. {
  377. params = [[NSMutableString alloc] init];
  378. for(id key in paramDict)
  379. {
  380. NSString *encodedkey = [key stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  381. CFStringRef value = (__bridge CFStringRef)[[paramDict objectForKey:key] copy];
  382. CFStringRef encodedValue = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, value,NULL,(CFStringRef)@";/?:@&=+$", kCFStringEncodingUTF8);
  383. [params appendFormat:@"%@=%@&", encodedkey, encodedValue];
  384. CFRelease(value);
  385. CFRelease(encodedValue);
  386. }
  387. [params deleteCharactersInRange:NSMakeRange([params length] - 1, 1)];
  388. }
  389. NSData *bodyData = [params dataUsingEncoding:NSUTF8StringEncoding];
  390. // if (bodyData)
  391. // {
  392. // [request setValue:[NSString stringWithFormat:@"%ld",(long)[bodyData length]] forHTTPHeaderField:@"Content-Length"];
  393. // [request setHTTPMethod:@"POST"];
  394. // [request setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
  395. // [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
  396. [request setHTTPBody:bodyData];
  397. // }
  398. //(6)构造Session
  399. NSURLSession *session = [NSURLSession sharedSession];
  400. //(7)task
  401. __block NSData *resposeNSData = nil;
  402. __block NSError *tmperror = nil;
  403. NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
  404. resposeNSData = data;
  405. tmperror = error;
  406. dispatch_semaphore_signal(semaphore); //发送信号
  407. }];
  408. [task resume];
  409. dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER); //等待
  410. dispatch_async(dispatch_get_main_queue(), ^{
  411. if (!tmperror)
  412. {
  413. if (resposeNSData)
  414. {
  415. if (successBlock)
  416. {
  417. [NetWorkManager doResult:resposeNSData url:urlStr paramDict:paramDict successBlock:successBlock failureBlock:failureBlock];
  418. }
  419. }
  420. else
  421. {
  422. if (failureBlock)
  423. {
  424. failureBlock(nil, [AppNetWorkModel manager]);
  425. }
  426. }
  427. }
  428. else
  429. {
  430. if (failureBlock)
  431. {
  432. failureBlock(nil, [AppNetWorkModel manager]);
  433. }
  434. }
  435. });
  436. }
  437. #pragma mark - ----------------------- 请求网络结果处理 -----------------------
  438. #pragma mark 请求网络成功结果处理
  439. + (void)doResult:(id)responseObject url:(NSString *)urlStr paramDict:(NSMutableDictionary *)paramDict successBlock:(SuccessBlock2)successBlock failureBlock:(FailureBlock2)failureBlock
  440. {
  441. [NetWorkManager doResult:responseObject url:urlStr paramDict:paramDict successBlock:nil successBlock2:successBlock failureBlock:nil failureBlock2:failureBlock];
  442. }
  443. + (void)doResult:(id)responseObject url:(NSString *)urlStr paramDict:(NSMutableDictionary *)paramDict successBlock:(SuccessBlock)successBlock successBlock2:(SuccessBlock2)successBlock2 failureBlock:(FailureBlock)failureBlock failureBlock2:(FailureBlock2)failureBlock2
  444. {
  445. if (!responseObject)
  446. {
  447. if (failureBlock2)
  448. {
  449. failureBlock2(nil, [AppNetWorkModel manager]);
  450. }
  451. else if (failureBlock)
  452. {
  453. failureBlock(nil);
  454. }
  455. }
  456. GlobalVariables *BuguLive = [GlobalVariables sharedInstance];
  457. NSHTTPCookie *sessinCookie;
  458. NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  459. NSArray *cookies = [sharedHTTPCookieStorage cookiesForURL:[NSURL URLWithString:urlStr]];
  460. NSEnumerator *enumerator = [cookies objectEnumerator];
  461. NSHTTPCookie *cookie;
  462. while (cookie = [enumerator nextObject])
  463. {
  464. if (![cookie.name isEqualToString:@""] && ![cookie.value isEqualToString:@""])
  465. {
  466. [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
  467. if ([cookie.name isEqualToString:@"PHPSESSID2"])
  468. {
  469. sessinCookie = cookie;
  470. }
  471. }
  472. }
  473. if ([IsNeedAES isEqualToString:@"YES"] && [responseObject isKindOfClass:[NSData class]])
  474. {
  475. // 获取加密串
  476. NSError * error = nil;
  477. NSDictionary *tmpResposeJson = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:&error];
  478. if (error) {
  479. NSLog(@"error parsing json:%@",error.localizedDescription);
  480. }
  481. if (tmpResposeJson && [tmpResposeJson isKindOfClass:[NSDictionary class]])
  482. {
  483. NSString *tmpJsonStr = [tmpResposeJson toString:@"output"];
  484. if (![BGUtils isBlankString:tmpJsonStr])
  485. {
  486. // base64解密
  487. NSData *decodeData = [GTMBase64 decodeString:tmpJsonStr];
  488. // AES解密
  489. NSString *resultStr = [decodeData AES256DecryptWithKey:AppAESKey];
  490. // NSString *resultStr = [decodeData AES256DecryptWithKey:BuguLive.aesKeyStr];
  491. // 如果解密失败,重新请求aeskey
  492. if ([BGUtils isBlankString:resultStr])
  493. {
  494. [[BGIMLoginManager sharedInstance] obtainAesKeyFromFullGroup:nil error:nil];
  495. NSLog(ASLocalizedString(@"===================:解密失败,请检查AES加密的KEY等!"));
  496. if (failureBlock2)
  497. {
  498. failureBlock2(nil, [AppNetWorkModel manager]);
  499. }
  500. else if (failureBlock)
  501. {
  502. failureBlock(nil);
  503. }
  504. return;
  505. }
  506. responseObject = [resultStr dataUsingEncoding:NSUTF8StringEncoding];
  507. }
  508. else
  509. {
  510. // responseObject = tmpJsonStr;
  511. [[BGIMLoginManager sharedInstance] obtainAesKeyFromFullGroup:nil error:nil];
  512. }
  513. }
  514. else
  515. {
  516. NSLog(@"%@", ASLocalizedString(@"===================:获取加密串失败!"));
  517. }
  518. }
  519. NSDictionary *resposeJson = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
  520. NSLog(@"Response: \n%@", resposeJson);
  521. if (resposeJson && [resposeJson isKindOfClass:[NSDictionary class]])
  522. {
  523. if([resposeJson count])
  524. {
  525. // 判断当前是否有业务上的错误,有则把错误显示出来
  526. BGBaseModel *tmpModel = [BGBaseModel mj_objectWithKeyValues:resposeJson];
  527. if (![BGUtils isBlankString:tmpModel.errorStr])
  528. {
  529. if (tmpModel.status != 1 && ![tmpModel.act isEqualToString:@"firebase_login"])
  530. {
  531. if (![[paramDict objectForKey:@"act"] isEqualToString:@"request_end_pk"] && ![[paramDict objectForKey:@"act"] isEqualToString:@"mix_stream"]) {
  532. [FanweMessage alertHUD:tmpModel.errorStr];
  533. }
  534. NSLog(ASLocalizedString(@"===================:错误信息:接口名为 ctl=%@,act=%@,弹出错误信息:%@"),tmpModel.ctl,tmpModel.act,tmpModel.errorStr);
  535. }
  536. else
  537. {
  538. NSLog(ASLocalizedString(@"===================:正确信息:接口名为 ctl=%@,act=%@,弹出正确信息:%@"),tmpModel.ctl,tmpModel.act,tmpModel.errorStr);
  539. }
  540. }
  541. if ([[resposeJson allKeys] containsObject:@"user_login_status"])
  542. { // 判断字典中是否含有这个key
  543. if ([resposeJson toInt:@"user_login_status"] == 1)
  544. { // 判断是否登录状态
  545. if (successBlock2)
  546. {
  547. successBlock2(resposeJson, [AppNetWorkModel manager]);
  548. }
  549. else if (successBlock)
  550. {
  551. successBlock(resposeJson);
  552. }
  553. }
  554. else
  555. {
  556. if (failureBlock2)
  557. {
  558. failureBlock2(nil, [AppNetWorkModel manager]);
  559. }
  560. else if (failureBlock)
  561. {
  562. failureBlock(nil);
  563. }
  564. #if kSupportH5Shopping
  565. #else
  566. [AppDelegate sharedAppDelegate].isTabBarShouldLoginIMSDK = NO;
  567. [[IMAPlatform sharedInstance] logout:^{
  568. [[AppDelegate sharedAppDelegate] enterLoginUI];
  569. } fail:^(int code, NSString *msg) {
  570. [[AppDelegate sharedAppDelegate] enterLoginUI];
  571. }];
  572. #endif
  573. }
  574. }
  575. else
  576. {
  577. if (successBlock2)
  578. {
  579. successBlock2(resposeJson, [AppNetWorkModel manager]);
  580. }
  581. else if (successBlock)
  582. {
  583. successBlock(resposeJson);
  584. }
  585. }
  586. if ([[resposeJson allKeys] containsObject:@"init_version"])
  587. {
  588. if ([[resposeJson toString:@"init_version"] longLongValue] > BuguLive.appModel.init_version)
  589. {
  590. [AppViewModel loadInit];
  591. }
  592. }
  593. }
  594. else
  595. {
  596. [self updateErrorToServiceWithUrl:urlStr paramDict:paramDict errorString:ASLocalizedString(@"返回的数据为空")];
  597. if (failureBlock2)
  598. {
  599. failureBlock2(nil, [AppNetWorkModel manager]);
  600. }
  601. else if (failureBlock)
  602. {
  603. failureBlock(nil);
  604. }
  605. }
  606. }
  607. else
  608. {
  609. [self updateErrorToServiceWithUrl:urlStr paramDict:paramDict errorString:ASLocalizedString(@"返回的数据为空")];
  610. if (failureBlock2)
  611. {
  612. failureBlock2(nil, [AppNetWorkModel manager]);
  613. }
  614. else if (failureBlock)
  615. {
  616. failureBlock(nil);
  617. }
  618. }
  619. }
  620. #pragma mark 数据请求失败请求网络
  621. + (void)updateErrorToServiceWithUrl:(NSString *)urlStr paramDict:(NSMutableDictionary *)paramDict errorString:(NSString *)errorString
  622. {
  623. if (!paramDict)
  624. {
  625. return;
  626. }
  627. if (![NetWorkManager isExistenceNetwork])
  628. {
  629. NSLog(ASLocalizedString(@"请检查当前网络"));
  630. }
  631. else
  632. {
  633. [self myCookieStorage];
  634. AFHTTPSessionManager *manager = [AFHTTPSessionManager defaultNetManager];
  635. NSMutableDictionary *errorDict = [NSMutableDictionary new];
  636. NSString *valueString = [NSString stringWithFormat:@"act=%@ctl=%@%@",[paramDict toString:@"act"],[paramDict toString:@"ctl"],errorString];
  637. [errorDict setObject:valueString forKey:@"desc"];
  638. [manager POST:urlStr parameters:errorDict headers:nil progress:^(NSProgress * _Nonnull uploadProgress) {
  639. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  640. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  641. }];
  642. }
  643. }
  644. @end