BogoNetwork.m 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491
  1. //
  2. // BogoNetwork.m
  3. // BogoNetworkKit
  4. //
  5. // Created by bogokj on 2020/3/13.
  6. //
  7. #import "BogoNetwork.h"
  8. #import <AFNetworking/AFNetworking.h>
  9. #import "BogoNetworkResponseModel.h"
  10. #import <MJExtension/MJExtension.h>
  11. #import "BogoNetworkInitModel.h"
  12. #define AESKey @"1400031571000000"
  13. #define sdk_version_name @"6.14.08"
  14. #define sdk_type @"ios"
  15. #define sdk_version @"2020042701"
  16. #import "NSData+AES.h"
  17. #define cookiesKey @"mycookies"
  18. @implementation BogoNetwork
  19. + (BogoNetwork *)shareInstance{
  20. static BogoNetwork *shareInstance = nil;
  21. static dispatch_once_t predicate;
  22. dispatch_once(&predicate, ^{
  23. shareInstance = [[self alloc] init];
  24. });
  25. shareInstance.requestContentType = RequestContentTypeJSON;
  26. shareInstance.timeoutInterval = 30;
  27. shareInstance.indexModel = [[BogoNetworkInitModel alloc] init];
  28. // shareInstance.url_prefix = @"http://intl.live.bogokj.com/shopapi/";
  29. shareInstance.url_prefix = [NSString stringWithFormat:@"%@/shopapi/",ADMIN_API_URL];
  30. // shareInstance.urlV2_prefix = @"http://intl.live.bogokj.com/mapi/";
  31. shareInstance.urlV2_prefix = [NSString stringWithFormat:@"%@/mapi/",ADMIN_API_URL];
  32. // shareInstance.urlV3_prefix = @"http://intl.liveapi.bogokj.com/mapi/index.php";
  33. shareInstance.urlV3_prefix = [NSString stringWithFormat:@"%@/mapi/index.php",AppDoMainUrlArray[0]];
  34. shareInstance.token = @"";
  35. return shareInstance;
  36. }
  37. - (void)cookieSave{
  38. NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  39. NSArray<NSHTTPCookie *> *cookies = [cookieStorage cookiesForURL:[NSURL URLWithString:[BogoNetwork shareInstance].url_prefix]];
  40. NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookies];
  41. [[NSUserDefaults standardUserDefaults] setObject:data forKey:cookiesKey];
  42. [[NSUserDefaults standardUserDefaults] synchronize];
  43. }
  44. - (void)cookieLoad{
  45. NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:cookiesKey];
  46. if (data) {
  47. NSArray<NSHTTPCookie *> *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:data];
  48. NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  49. for (NSHTTPCookie *cookie in cookies) {
  50. [cookieStorage setCookie:cookie];
  51. }
  52. }
  53. }
  54. - (void)setToken:(NSString *)token{
  55. if (token.length) {
  56. [[NSUserDefaults standardUserDefaults] setObject:token forKey:@"BogoNetworkToken"];
  57. [[NSUserDefaults standardUserDefaults] synchronize];
  58. }
  59. }
  60. - (NSString *)token{
  61. NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@"BogoNetworkToken"];
  62. return token.length ? token : @"";
  63. }
  64. - (void)saveIndexModel:(BogoNetworkInitModel *)indexModel{
  65. if (indexModel) {
  66. NSLog(@"设置初始化model完成:%@",indexModel.mj_keyValues);
  67. [[NSUserDefaults standardUserDefaults] setObject:indexModel.mj_keyValues forKey:@"BogoNetworkIndexModel"];
  68. [[NSUserDefaults standardUserDefaults] synchronize];
  69. }
  70. }
  71. - (BogoNetworkInitModel *)indexModel{
  72. NSDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"BogoNetworkIndexModel"];
  73. if (dict) {
  74. BogoNetworkInitModel *model = [BogoNetworkInitModel mj_objectWithKeyValues:dict];
  75. return model;
  76. }
  77. return nil;
  78. }
  79. - (void)GET:(NSString *)URLString param:(NSDictionary *)param success:(void (^)(id _Nonnull))success failure:(void (^)(NSString * _Nonnull))failure{
  80. //创建网络请求管理对象
  81. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  82. //申明请求的数据是json类型
  83. manager.requestSerializer = [self requestSerializerWithType:[BogoNetwork shareInstance].requestContentType];
  84. //申明返回的结果是json类型
  85. manager.responseSerializer = [self responseSerializerWithType:[BogoNetwork shareInstance].responseContentType];
  86. //如果报接受类型不一致请替换一致text/html或别的
  87. manager.responseSerializer.acceptableContentTypes = [self acceptableContentTypes];
  88. //超时时间
  89. manager.requestSerializer.timeoutInterval = [BogoNetwork shareInstance].timeoutInterval;
  90. //证书
  91. // manager.securityPolicy = [self customSecurityPolicy];
  92. //发送网络请求(请求方式为GET)
  93. dispatch_async(dispatch_get_main_queue(), ^{
  94. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  95. });
  96. NSMutableDictionary *newParam = [NSMutableDictionary dictionaryWithDictionary:param];
  97. [newParam setObject:[BogoNetwork shareInstance].token forKey:@"token"];
  98. [manager GET:[NSString stringWithFormat:@"%@%@",[BogoNetwork shareInstance].url_prefix,URLString] parameters:newParam headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {
  99. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  100. BogoNetworkResponseModel *model = [BogoNetworkResponseModel mj_objectWithKeyValues:responseObject];
  101. if (model.status.intValue == 101) {
  102. [[NSNotificationCenter defaultCenter] postNotificationName:@"enterLoginUI" object:nil];
  103. }
  104. if (model.status.intValue == 200 || model.status.intValue == 1) {
  105. success(model);
  106. }else{
  107. failure(model.msg);
  108. }
  109. dispatch_async(dispatch_get_main_queue(), ^{
  110. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  111. });
  112. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  113. failure([NSString stringWithFormat:@"网络请求失败 code:%ld msg:%@",error.code,error.localizedDescription]);
  114. dispatch_async(dispatch_get_main_queue(), ^{
  115. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  116. });
  117. }];
  118. }
  119. - (void)GETV2:(NSString *)URLString param:(NSDictionary *)param success:(void (^)(BogoNetworkResponseModel * _Nonnull))success failure:(void (^)(NSString * _Nonnull))failure{
  120. param = [NetWorkManager tryAddLangParamDict2:param];
  121. //创建网络请求管理对象
  122. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  123. //申明请求的数据是json类型
  124. manager.requestSerializer = [self requestSerializerWithType:[BogoNetwork shareInstance].requestContentType];
  125. //申明返回的结果是json类型
  126. manager.responseSerializer = [self responseSerializerWithType:[BogoNetwork shareInstance].responseContentType];
  127. //如果报接受类型不一致请替换一致text/html或别的
  128. manager.responseSerializer.acceptableContentTypes = [self acceptableContentTypes];
  129. //超时时间
  130. manager.requestSerializer.timeoutInterval = [BogoNetwork shareInstance].timeoutInterval;
  131. //证书
  132. // manager.securityPolicy = [self customSecurityPolicy];
  133. //发送网络请求(请求方式为GET)
  134. dispatch_async(dispatch_get_main_queue(), ^{
  135. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  136. });
  137. NSMutableDictionary *newParam = [NSMutableDictionary dictionaryWithDictionary:param];
  138. [newParam setObject:[BogoNetwork shareInstance].token forKey:@"token"];
  139. [manager GET:[NSString stringWithFormat:@"%@%@",[BogoNetwork shareInstance].urlV2_prefix,URLString] parameters:newParam headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {
  140. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  141. BogoNetworkResponseModel *model = [BogoNetworkResponseModel mj_objectWithKeyValues:responseObject];
  142. if (model.status.intValue == 101) {
  143. [[NSNotificationCenter defaultCenter] postNotificationName:@"enterLoginUI" object:nil];
  144. }
  145. if (model.status.intValue == 1 || model.status.intValue == 200) {
  146. success(model);
  147. }else{
  148. failure(model.msg);
  149. }
  150. dispatch_async(dispatch_get_main_queue(), ^{
  151. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  152. });
  153. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  154. failure([NSString stringWithFormat:@"网络请求失败 code:%ld msg:%@",error.code,error.localizedDescription]);
  155. dispatch_async(dispatch_get_main_queue(), ^{
  156. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  157. });
  158. }];
  159. }
  160. - (void)POSTV3:(NSString *)URLString param:(NSDictionary *)param success:(void (^)(BogoNetworkResponseModel * _Nonnull))success failure:(void (^)(NSString * _Nonnull))failure{
  161. param = [NetWorkManager tryAddLangParamDict2:param];
  162. [self cookieLoad];
  163. //创建网络请求管理对象
  164. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  165. //申明请求的数据是json类型
  166. manager.requestSerializer = [self requestSerializerWithType:[BogoNetwork shareInstance].requestContentType];
  167. //申明返回的结果是json类型
  168. manager.responseSerializer = [self responseSerializerWithType:[BogoNetwork shareInstance].responseContentType];
  169. //如果报接受类型不一致请替换一致text/html或别的
  170. manager.responseSerializer.acceptableContentTypes = [self acceptableContentTypes];
  171. //超时时间
  172. manager.requestSerializer.timeoutInterval = [BogoNetwork shareInstance].timeoutInterval;
  173. //证书
  174. // manager.securityPolicy = [self customSecurityPolicy];
  175. //发送网络请求(请求方式为GET)
  176. dispatch_async(dispatch_get_main_queue(), ^{
  177. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  178. });
  179. NSMutableDictionary *tempDict = [NSMutableDictionary dictionaryWithDictionary:param];
  180. [tempDict setObject:sdk_version_name forKey:@"sdk_version_name"];
  181. [tempDict setObject:sdk_type forKey:@"sdk_type"];
  182. [tempDict setObject:sdk_version forKey:@"sdk_version"];
  183. // AES加密
  184. NSData *data = [NSJSONSerialization dataWithJSONObject:tempDict options:NSJSONWritingPrettyPrinted error:nil];
  185. if (data)
  186. {
  187. NSString *parmStr = [data AES256EncryptWithKey:AESKey];
  188. [tempDict setObject:@"lib" forKey:@"itype"];
  189. [tempDict setObject:sdk_version_name forKey:@"sdk_version_name"];
  190. [tempDict setObject:parmStr forKey:@"requestData"];
  191. [tempDict setObject:@"lib" forKey:@"i_type"];
  192. NSString *uid = [[NSUserDefaults standardUserDefaults] objectForKey:@"uid"];
  193. if (uid) {
  194. [tempDict setObject:uid forKey:@"uid"];
  195. }
  196. }
  197. NSMutableDictionary *newParam = [NSMutableDictionary dictionaryWithDictionary:tempDict];
  198. [newParam setObject:[BogoNetwork shareInstance].token forKey:@"token"];
  199. [manager POST:[NSString stringWithFormat:@"%@%@",[BogoNetwork shareInstance].urlV3_prefix,URLString] parameters:newParam headers:nil constructingBodyWithBlock:nil progress:^(NSProgress * _Nonnull downloadProgress) {
  200. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  201. [self cookieSave];
  202. BogoNetworkResponseModel *model = [BogoNetworkResponseModel mj_objectWithKeyValues:responseObject];
  203. if (model.status.intValue == 1) {
  204. if (success) {
  205. success(model);
  206. }
  207. }else{
  208. if (failure) {
  209. if(model.error.length > 0)
  210. {
  211. failure(model.error);
  212. }
  213. else
  214. {
  215. failure(model.msg);
  216. }
  217. }
  218. }
  219. dispatch_async(dispatch_get_main_queue(), ^{
  220. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  221. });
  222. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  223. if (failure) {
  224. failure([NSString stringWithFormat:@"网络请求失败 code:%ld msg:%@",error.code,error.localizedDescription]);
  225. }
  226. dispatch_async(dispatch_get_main_queue(), ^{
  227. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  228. });
  229. }];
  230. }
  231. - (void)POSTV4:(NSString *)URLString param:(NSDictionary *)param success:(void (^)(id _Nonnull))success failure:(void (^)(NSString * _Nonnull))failure{
  232. param = [NetWorkManager tryAddLangParamDict2:param];
  233. [self cookieLoad];
  234. //创建网络请求管理对象
  235. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  236. //申明请求的数据是json类型
  237. manager.requestSerializer = [self requestSerializerWithType:[BogoNetwork shareInstance].requestContentType];
  238. //申明返回的结果是json类型
  239. manager.responseSerializer = [self responseSerializerWithType:[BogoNetwork shareInstance].responseContentType];
  240. //如果报接受类型不一致请替换一致text/html或别的
  241. manager.responseSerializer.acceptableContentTypes = [self acceptableContentTypes];
  242. //超时时间
  243. manager.requestSerializer.timeoutInterval = [BogoNetwork shareInstance].timeoutInterval;
  244. //证书
  245. // manager.securityPolicy = [self customSecurityPolicy];
  246. //发送网络请求(请求方式为GET)
  247. dispatch_async(dispatch_get_main_queue(), ^{
  248. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  249. });
  250. NSMutableDictionary *tempDict = [NSMutableDictionary dictionaryWithDictionary:param];
  251. [tempDict setObject:sdk_version_name forKey:@"sdk_version_name"];
  252. [tempDict setObject:sdk_type forKey:@"sdk_type"];
  253. [tempDict setObject:sdk_version forKey:@"sdk_version"];
  254. // AES加密
  255. NSData *data = [NSJSONSerialization dataWithJSONObject:tempDict options:NSJSONWritingPrettyPrinted error:nil];
  256. if (data)
  257. {
  258. NSString *parmStr = [data AES256EncryptWithKey:AESKey];
  259. [tempDict setObject:@"lib" forKey:@"itype"];
  260. [tempDict setObject:sdk_version_name forKey:@"sdk_version_name"];
  261. [tempDict setObject:parmStr forKey:@"requestData"];
  262. [tempDict setObject:@"lib" forKey:@"i_type"];
  263. NSString *uid = [[NSUserDefaults standardUserDefaults] objectForKey:@"uid"];
  264. if (uid) {
  265. [tempDict setObject:uid forKey:@"uid"];
  266. }
  267. }
  268. NSMutableDictionary *newParam = [NSMutableDictionary dictionaryWithDictionary:tempDict];
  269. [newParam setObject:[BogoNetwork shareInstance].token forKey:@"token"];
  270. [manager POST:[NSString stringWithFormat:@"%@%@",[BogoNetwork shareInstance].urlV3_prefix,URLString] parameters:newParam headers:nil constructingBodyWithBlock:nil progress:^(NSProgress * _Nonnull downloadProgress) {
  271. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  272. [self cookieSave];
  273. BogoNetworkResponseModel *model = [BogoNetworkResponseModel mj_objectWithKeyValues:responseObject];
  274. if (model.status.intValue == 1) {
  275. if (success) {
  276. success(responseObject);
  277. }
  278. }else{
  279. if (failure) {
  280. failure(model.error);
  281. }
  282. }
  283. dispatch_async(dispatch_get_main_queue(), ^{
  284. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  285. });
  286. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  287. if (failure) {
  288. failure([NSString stringWithFormat:@"网络请求失败 code:%ld msg:%@",error.code,error.localizedDescription]);
  289. }
  290. dispatch_async(dispatch_get_main_queue(), ^{
  291. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  292. });
  293. }];
  294. }
  295. - (void)POST:(NSString *)URLString param:(NSDictionary *)param success:(void (^)(id _Nonnull))success failure:(void (^)(NSString * _Nonnull))failure{
  296. param = [NetWorkManager tryAddLangParamDict2:param];
  297. //创建网络请求管理对象
  298. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  299. //申明返回的结果是json类型
  300. manager.responseSerializer = [self responseSerializerWithType:[BogoNetwork shareInstance].responseContentType];
  301. //申明请求的数据是json类型
  302. manager.requestSerializer = [self requestSerializerWithType:[BogoNetwork shareInstance].requestContentType];
  303. //如果报接受类型不一致请替换一致text/html或别的
  304. manager.responseSerializer.acceptableContentTypes = [self acceptableContentTypes];
  305. //超时时间
  306. manager.requestSerializer.timeoutInterval = [BogoNetwork shareInstance].timeoutInterval;
  307. //证书
  308. // manager.securityPolicy = [self customSecurityPolicy];
  309. //发送网络请求(请求方式为POST)
  310. dispatch_async(dispatch_get_main_queue(), ^{
  311. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  312. });
  313. NSMutableDictionary *newParam = [NSMutableDictionary dictionaryWithDictionary:param];
  314. [newParam setObject:[BogoNetwork shareInstance].token forKey:@"token"];
  315. [manager POST:[NSString stringWithFormat:@"%@%@",[BogoNetwork shareInstance].url_prefix,URLString] parameters:newParam headers:nil progress:^(NSProgress * _Nonnull uploadProgress) {
  316. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  317. BogoNetworkResponseModel *model = [BogoNetworkResponseModel mj_objectWithKeyValues:responseObject];
  318. if (model.status.intValue == 101) {
  319. [[NSNotificationCenter defaultCenter] postNotificationName:@"enterLoginUI" object:nil];
  320. }
  321. if (model.status.intValue == 200 || model.status.intValue == 1) {
  322. success(model);
  323. }else{
  324. failure(model.msg);
  325. }
  326. dispatch_async(dispatch_get_main_queue(), ^{
  327. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  328. });
  329. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  330. failure([NSString stringWithFormat:@"网络请求失败 code:%ld msg:%@",error.code,error.localizedDescription]);
  331. dispatch_async(dispatch_get_main_queue(), ^{
  332. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  333. });
  334. }];
  335. }
  336. - (void)POSTV2:(NSString *)URLString param:(NSDictionary *)param success:(void (^)(id _Nonnull))success failure:(void (^)(NSString * _Nonnull))failure{
  337. param = [NetWorkManager tryAddLangParamDict2:param];
  338. //创建网络请求管理对象
  339. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  340. //申明返回的结果是json类型
  341. manager.responseSerializer = [self responseSerializerWithType:[BogoNetwork shareInstance].responseContentType];
  342. //申明请求的数据是json类型
  343. manager.requestSerializer = [self requestSerializerWithType:[BogoNetwork shareInstance].requestContentType];
  344. //如果报接受类型不一致请替换一致text/html或别的
  345. manager.responseSerializer.acceptableContentTypes = [self acceptableContentTypes];
  346. //超时时间
  347. manager.requestSerializer.timeoutInterval = [BogoNetwork shareInstance].timeoutInterval;
  348. //证书
  349. // manager.securityPolicy = [self customSecurityPolicy];
  350. //发送网络请求(请求方式为POST)
  351. dispatch_async(dispatch_get_main_queue(), ^{
  352. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  353. });
  354. NSMutableDictionary *newParam = [NSMutableDictionary dictionaryWithDictionary:param];
  355. [newParam setObject:[BogoNetwork shareInstance].token forKey:@"token"];
  356. [manager POST:[NSString stringWithFormat:@"%@%@",[BogoNetwork shareInstance].urlV2_prefix,URLString] parameters:newParam headers:nil progress:^(NSProgress * _Nonnull uploadProgress) {
  357. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  358. BogoNetworkResponseModel *model = [BogoNetworkResponseModel mj_objectWithKeyValues:responseObject];
  359. if (model.status.intValue == 101) {
  360. [[NSNotificationCenter defaultCenter] postNotificationName:@"enterLoginUI" object:nil];
  361. }
  362. if (model.status.intValue == 200 || model.status.intValue == 1) {
  363. success(model);
  364. }else{
  365. failure(model.msg);
  366. }
  367. dispatch_async(dispatch_get_main_queue(), ^{
  368. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  369. });
  370. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  371. failure([NSString stringWithFormat:@"网络请求失败 code:%ld msg:%@",error.code,error.localizedDescription]);
  372. dispatch_async(dispatch_get_main_queue(), ^{
  373. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  374. });
  375. }];
  376. }
  377. - (AFHTTPRequestSerializer *)requestSerializerWithType:(RequestContentType)type{
  378. switch (type) {
  379. case RequestContentTypeJSON:
  380. return [AFJSONRequestSerializer serializer];
  381. break;
  382. default:
  383. break;
  384. }
  385. }
  386. - (AFHTTPResponseSerializer *)responseSerializerWithType:(ResponseContentType)type{
  387. switch (type) {
  388. case ResponseContentTypeJSON:
  389. return [AFJSONResponseSerializer serializer];
  390. break;
  391. default:
  392. return [AFHTTPResponseSerializer serializer];
  393. break;
  394. }
  395. }
  396. - (NSSet *)acceptableContentTypes{
  397. return [NSSet setWithObjects:@"application/json", @"text/html", @"text/json",@"image/jpeg",@"audio/mp3",nil];
  398. }
  399. - (AFSecurityPolicy *)customSecurityPolicy{
  400. // /先导入证书
  401. NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"证书" ofType:@"cer"];//证书的路径
  402. NSData *certData = [NSData dataWithContentsOfFile:cerPath];
  403. // AFSSLPinningModeCertificate 使用证书验证模式
  404. AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
  405. // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
  406. // 如果是需要验证自建证书,需要设置为YES
  407. securityPolicy.allowInvalidCertificates = YES;
  408. //validatesDomainName 是否需要验证域名,默认为YES;
  409. //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
  410. //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
  411. //如置为NO,建议自己添加对应域名的校验逻辑。
  412. securityPolicy.validatesDomainName = NO;
  413. securityPolicy.pinnedCertificates = [NSSet setWithArray:@[certData]];
  414. return securityPolicy;
  415. }
  416. - (void)initCityData{
  417. if (!self.addressModel) {
  418. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  419. [[BogoNetwork shareInstance] GET:@"api/cityJsonUrl" param:@{@"token":[BogoNetwork shareInstance].token} success:^(BogoNetworkResponseModel * _Nonnull result) {
  420. BogoAddressModel *model = [BogoAddressModel mj_objectWithKeyValues:result.data];
  421. for (BogoProvinceModel *provinceModel in model.province_list) {
  422. NSMutableArray *tempCityArray = [NSMutableArray array];
  423. for (BogoCityModel *cityModel in model.city_list) {
  424. NSMutableArray *tempAreaArray = [NSMutableArray array];
  425. for (BogoAreaModel *areaModel in model.county_list) {
  426. if ([areaModel.pid isEqualToString:cityModel.id]) {
  427. [tempAreaArray addObject:areaModel];
  428. }
  429. }
  430. if ([cityModel.pid isEqualToString:provinceModel.id]) {
  431. [tempCityArray addObject:cityModel];
  432. }
  433. cityModel.arealist = tempAreaArray;
  434. }
  435. provinceModel.citylist = tempCityArray;
  436. }
  437. self.addressModel = model;
  438. } failure:^(NSString * _Nonnull error) {
  439. NSLog(@"初始化城市数据失败");
  440. }];
  441. });
  442. }
  443. }
  444. @end