RequestApi.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. //
  2. // RequestApi.m
  3. // yiliantiPersonal
  4. //
  5. // Created by lirenbo on 2016/12/13.
  6. // Copyright © 2016年 ping. All rights reserved.
  7. //
  8. #import "RequestApi.h"
  9. //全局方法
  10. #import "GlobalMethod.h"
  11. //#import "GlobalMethod+Version.h"
  12. //请求单例
  13. #import "RequestInstance.h"
  14. //登陆页面
  15. #import "xingchuangke-Swift.h"
  16. @implementation RequestApi
  17. #pragma mark - 网络请求
  18. + (void)postUrl:(NSString *)URL
  19. delegate:(id <RequestDelegate>)delegate
  20. parameters:(NSDictionary *)parameters
  21. success:(void (^)(NSDictionary * response, id mark))success
  22. failure:(void (^)(NSString * errorStr, id mark))failure
  23. {
  24. [self postUrl:URL delegate:delegate parameters:parameters returnALL:false isGet:false isJson:false constructingBodyWithBlock:nil success:success failure:failure];
  25. }
  26. // post
  27. + (void)postJsonUrl:(NSString *)URL
  28. delegate:(id <RequestDelegate>)delegate
  29. parameters:(NSDictionary *)parameters
  30. success:(void (^)(NSDictionary * response, id mark))success
  31. failure:(void (^)(NSString * errorStr, id mark))failure{
  32. [self postUrl:URL delegate:delegate parameters:parameters returnALL:false isGet:false isJson:true constructingBodyWithBlock:nil success:success failure:failure];
  33. }
  34. + (void)getUrl:(NSString *)URL
  35. delegate:(id <RequestDelegate>)delegate
  36. parameters:(NSDictionary *)parameters
  37. success:(void (^)(NSDictionary * response, id mark))success
  38. failure:(void (^)(NSString * errorStr, id mark))failure
  39. {
  40. [self postUrl:URL delegate:delegate parameters:parameters returnALL:false isGet:true isJson:false constructingBodyWithBlock:nil success:success failure:failure];
  41. }
  42. //上传图片
  43. + (void)postUrl:(NSString *)URL
  44. delegate:(id <RequestDelegate>)delegate
  45. parameters:(NSDictionary *)parameters
  46. constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
  47. success:(void (^)(NSDictionary * response, id mark))success
  48. failure:(void (^)(NSString * errorStr, id mark))failure
  49. {
  50. [self postUrl:URL delegate:delegate parameters:parameters returnALL:true isGet:false isJson:false constructingBodyWithBlock:block success:success failure:failure];
  51. }
  52. #pragma mark - 网络请求 返回全部
  53. // post
  54. + (void)postUrl:(NSString *)URL
  55. delegate:(id <RequestDelegate>)delegate
  56. parameters:(NSDictionary *)parameters
  57. returnALL:(BOOL)returnAll
  58. success:(void (^)(NSDictionary * response, id mark))success
  59. failure:(void (^)(NSString * errorStr, id mark))failure{
  60. [self postUrl:URL delegate:delegate parameters:parameters returnALL:returnAll isGet:false isJson:false constructingBodyWithBlock:nil success:success failure:failure];
  61. }
  62. // post
  63. + (void)postJsonUrl:(NSString *)URL
  64. delegate:(id <RequestDelegate>)delegate
  65. parameters:(NSDictionary *)parameters
  66. returnALL:(BOOL)returnAll
  67. success:(void (^)(NSDictionary * response, id mark))success
  68. failure:(void (^)(NSString * errorStr, id mark))failure{
  69. [self postUrl:URL delegate:delegate parameters:parameters returnALL:returnAll isGet:false isJson:false constructingBodyWithBlock:nil success:success failure:failure];
  70. }
  71. //get
  72. + (void)getUrl:(NSString *)URL
  73. delegate:(id <RequestDelegate>)delegate
  74. parameters:(NSDictionary *)parameters
  75. returnALL:(BOOL)returnAll
  76. success:(void (^)(NSDictionary * response, id mark))success
  77. failure:(void (^)(NSString * errorStr, id mark))failure{
  78. [self postUrl:URL delegate:delegate parameters:parameters returnALL:returnAll isGet:false isJson:false constructingBodyWithBlock:nil success:success failure:failure];
  79. }
  80. //上传图片
  81. + (void)postUrl:(NSString *)URL
  82. delegate:(id <RequestDelegate>)delegate
  83. parameters:(NSDictionary *)parameters
  84. returnALL:(BOOL)returnAll
  85. constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
  86. success:(void (^)(NSDictionary * response, id mark))success
  87. failure:(void (^)(NSString * errorStr, id mark))failure{
  88. [self postUrl:URL delegate:delegate parameters:parameters returnALL:returnAll isGet:false isJson:false constructingBodyWithBlock:block success:success failure:failure];
  89. }
  90. + (void)postUrl:(NSString *)URL
  91. delegate:(id <RequestDelegate>)delegate
  92. parameters:(NSDictionary *)parameters
  93. returnALL:(BOOL)returnAll
  94. isGet:(BOOL)isGet
  95. isJson:(BOOL)isJson
  96. constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
  97. success:(void (^)(NSDictionary * response, id mark))success
  98. failure:(void (^)(NSString * errorStr, id mark))failure
  99. {
  100. //设置请求头
  101. parameters = [self setInitHead:parameters];
  102. //拼接参数
  103. NSString * urlNew =[URL hasPrefix:@"http"]?URL:[NSString stringWithFormat:@"%@%@",URL_HEAD,URL];
  104. //走回调 隐藏progress
  105. [GlobalMethod performSelector:@"protocolWillRequest" delegate:delegate];
  106. //选择请求方式
  107. [self switchRequest:urlNew parameters:parameters isGet:isGet isJson:isJson constructingBodyWithBlock:block success:^(NSURLSessionDataTask *task, id responseObject) {
  108. //上拉 下拉 刷新
  109. [self endRefresh:delegate];
  110. //返回数据
  111. NSDictionary * dicResponse = nil;
  112. if ([responseObject isKindOfClass:[NSDictionary class]]) {
  113. dicResponse = responseObject;
  114. }else{
  115. dicResponse = [GlobalMethod exchangeDataToDic:responseObject];
  116. }
  117. if (dicResponse == nil ) {
  118. //走回调 隐藏progress
  119. [self requestFailDelegate:delegate errorStr:@"数据请求失败" errorCode:@"0" failure:failure];
  120. return ;
  121. }
  122. //判断请求状态
  123. if([@([dicResponse[RESPONSE_CODE] integerValue]) isEqualToNumber:RESPONSE_CODE_200]){
  124. [self requestSuccessDelegate:delegate responseDic:dicResponse success:success];
  125. return;
  126. }
  127. if([@([dicResponse[RESPONSE_CODE] integerValue]) isEqualToNumber:RESPONSE_CODE_NEGATIVE100]){
  128. //重新登陆
  129. [GlobalMethod relogin];
  130. return;
  131. }
  132. if (![GlobalMethod isLoginSuccess]) {
  133. [GB_Nav pushViewController:[LoginViewController new] animated:true];
  134. }
  135. {
  136. //走回调 请求失败
  137. [self requestFailDelegate:delegate errorStr:dicResponse[RESPONSE_MESSAGE] errorCode:isNum(dicResponse[RESPONSE_CODE])?[NSString stringWithFormat:@"%@",dicResponse[RESPONSE_CODE]]:@"0" failure:failure];
  138. return;
  139. }
  140. } failure:^(NSURLSessionDataTask *task, NSError *error){
  141. //上拉 下拉 刷新
  142. [self endRefresh:delegate];
  143. NSLog(@"%@",error.userInfo);
  144. //走回调 网络连接失败
  145. [self requestFailDelegate:delegate errorStr:@"服务器接口出错" errorCode:@"0" failure:failure];
  146. }];
  147. }
  148. #pragma mark - success
  149. + (void)requestSuccessDelegate:(id<RequestDelegate>)delegate responseDic:(NSDictionary *)responseDic success:(void (^)(NSDictionary * response, id mark))success{
  150. //走回调 请求成功
  151. [GlobalMethod performSelector:@"protocolDidRequestSuccess" delegate:delegate];
  152. if (success != nil) {
  153. success(responseDic,nil);
  154. }
  155. [self showNoResult:delegate];
  156. }
  157. #pragma mark - fail
  158. + (void)requestFailDelegate:(id<RequestDelegate>)delegate errorStr:(NSString *)strError errorCode:(NSString *)errorCode failure:(void (^)(NSString * errorStr, id mark))failure{
  159. [GlobalMethod performSelector:@"protocolDidRequestFailure:" delegate:delegate object:strError isHasReturn:false];
  160. if (failure != nil) {
  161. failure(strError,errorCode);
  162. [GlobalMethod showAlert:strError];
  163. }
  164. [self showNoResult:delegate];
  165. }
  166. #pragma mark - 上拉 下拉刷新
  167. + (void)endRefresh:(id)delegate{
  168. if (delegate != nil && [delegate respondsToSelector:@selector(endRefreshing)]) {
  169. [delegate performSelector:@selector(endRefreshing)];
  170. }
  171. }
  172. #pragma mark - 展示无数据
  173. + (void)showNoResult:(id)delegate{
  174. [GlobalMethod performSelector:@"showNoResult" delegate:delegate];
  175. }
  176. #pragma mark - 选择请求
  177. + (void)switchRequest:(NSString *)URLString
  178. parameters:(id)parameters
  179. isGet:(BOOL)isGet
  180. isJson:(BOOL)isJson
  181. constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
  182. success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
  183. failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure{
  184. if (isJson) {
  185. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager] ;
  186. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  187. NSString *token =[GlobalData sharedInstance].GB_Key;
  188. if ([GlobalMethod isLoginSuccess]) {
  189. [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@", token] forHTTPHeaderField:@"userId"];
  190. }
  191. [manager.requestSerializer setValue:@"1" forHTTPHeaderField:@"phoneType"];
  192. [manager.requestSerializer setValue:[GlobalMethod getVersion] forHTTPHeaderField:@"apkVersion"];
  193. manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json",@"text/html",@"text/plain",@"text/javascript",nil];
  194. manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  195. [manager POST:URLString parameters:parameters progress:nil success:success failure:failure];
  196. // [manager POST:URLString parameters:parameters progress:nil success:success failure:failure];
  197. }else{
  198. NSURLSessionDataTask * task;
  199. AFHTTPSessionManager *manager = [RequestInstance sharedInstance];
  200. manager.responseSerializer = [AFJSONResponseSerializer serializer];//申明返回的结果是json类型
  201. NSString *token =[GlobalData sharedInstance].GB_Key;
  202. if ([GlobalMethod isLoginSuccess]) {
  203. [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@", token] forHTTPHeaderField:@"userId"];
  204. }
  205. [manager.requestSerializer setValue:@"1" forHTTPHeaderField:@"phoneType"];
  206. [manager.requestSerializer setValue:[GlobalMethod getVersion] forHTTPHeaderField:@"apkVersion"];
  207. if (isGet == true) {
  208. task = [[RequestInstance sharedInstance] GET:URLString parameters:parameters progress:nil success:success failure:failure];
  209. } else if (block == nil) {
  210. task = [[RequestInstance sharedInstance] POST:URLString parameters:parameters progress:nil success:success failure:failure];
  211. } else {
  212. task = [[RequestInstance sharedInstance] POST:URLString parameters:parameters constructingBodyWithBlock:block progress:nil success:success failure:failure];
  213. }
  214. }
  215. }
  216. #pragma mark - 拼接基础头字符串
  217. + (NSMutableDictionary *)setInitHead:(NSDictionary *)dicParameters {
  218. if (dicParameters == nil){
  219. dicParameters = [NSDictionary dictionary];
  220. }
  221. NSMutableDictionary * muDic = [NSMutableDictionary dictionaryWithDictionary:dicParameters];
  222. [self fetchSystem:muDic];
  223. return muDic;
  224. }
  225. #pragma mark - 拼接头数据
  226. //拼接苹果系统数据
  227. + (void)fetchSystem:(NSMutableDictionary *)muDic{
  228. // [muDic setObject:@"1" forKey:@"phoneType"];
  229. // NSString *currentVersion =[GlobalMethod getVersion];
  230. // [muDic setObject:currentVersion forKey:@"apkVersion"];
  231. }
  232. @end