YBUserAuthVC.m 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. //
  2. // YBUserAuthVC.m
  3. // YBVideo
  4. //
  5. // Created by YB007 on 2020/8/28.
  6. // Copyright © 2020 cat. All rights reserved.
  7. //
  8. #import "YBUserAuthVC.h"
  9. #import "YBStorageObj.h"
  10. typedef NS_ENUM(NSInteger,CerType) {
  11. CerTypeDefault,
  12. CerTypeFace,
  13. CerTypeBack,
  14. CerTypeHand,
  15. };
  16. @interface YBUserAuthVC ()<TZImagePickerControllerDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>
  17. {
  18. NSString *_cerFacePath;
  19. NSString *_cerBackPath;
  20. NSString *_cerHandPath;
  21. BOOL _selectedImg;
  22. }
  23. @property(nonatomic,strong)MyTextField *nameTF;
  24. @property(nonatomic,strong)MyTextField *cardTF;
  25. @property(nonatomic,strong)MyTextField *phoneTF;
  26. @property(nonatomic,strong)UIButton *cerFaceBtn;
  27. @property(nonatomic,strong)UIImage *cerFaceImg;
  28. @property(nonatomic,strong)UIButton *cerBackBtn;
  29. @property(nonatomic,strong)UIImage *cerBackImg;
  30. @property(nonatomic,strong)UIButton *cerHandBtn;
  31. @property(nonatomic,strong)UIImage *cerHandImg;
  32. @property(nonatomic,assign)CerType upCerType;
  33. @property(nonatomic,strong)UIButton *stateBtn;
  34. @end
  35. @implementation YBUserAuthVC
  36. - (void)viewWillAppear:(BOOL)animated{
  37. [super viewWillAppear:animated];
  38. if (_upCerType == CerTypeDefault) {
  39. [self pullData];
  40. }
  41. }
  42. -(void)pullData {
  43. YBWeakSelf;
  44. [YBNetworking postWithUrl:@"Auth.getAuth" Dic:@{} Suc:^(int code, id info, NSString *msg) {
  45. if (code == 0) {
  46. [weakSelf updateData:[info firstObject]];
  47. }else {
  48. [MBProgressHUD showPop:msg];
  49. [weakSelf.navigationController popViewControllerAnimated:YES];
  50. }
  51. } Fail:^(id fail) {
  52. }];
  53. }
  54. -(void)updateData:(NSDictionary *)infoDic {
  55. int state = [minstr([infoDic valueForKey:@"status"]) intValue];
  56. //-1未认证过 0审核中 1通过 2拒绝
  57. switch (state) {
  58. case 0:{
  59. [self changeStateBtnEnable:NO];
  60. [_stateBtn setTitle:YZMsg(@"信息审核中") forState:0];
  61. }break;
  62. case 1:{
  63. [self changeStateBtnEnable:NO];
  64. [_stateBtn setTitle:YZMsg(@"审核已通过") forState:0];
  65. }break;
  66. case 2:{
  67. [self changeStateBtnEnable:YES];
  68. [_stateBtn setTitle:YZMsg(@"审核被拒,提交重审") forState:0];
  69. }break;
  70. default:{
  71. [self changeStateBtnEnable:YES];
  72. [_stateBtn setTitle:YZMsg(@"开始认证") forState:0];
  73. }break;
  74. }
  75. _nameTF.text = [PublicObj checkNull:minstr([infoDic valueForKey:@"real_name"])] ? @"":minstr([infoDic valueForKey:@"real_name"]);
  76. _cardTF.text = [PublicObj checkNull:minstr([infoDic valueForKey:@"cer_no"])] ? @"":minstr([infoDic valueForKey:@"cer_no"]);
  77. _phoneTF.text = [PublicObj checkNull:minstr([infoDic valueForKey:@"mobile"])] ? @"":minstr([infoDic valueForKey:@"mobile"]);
  78. _cerFacePath = minstr([infoDic valueForKey:@"front_view"]);
  79. if (![PublicObj checkNull:_cerFacePath]) {
  80. [_cerFaceBtn sd_setImageWithURL:[NSURL URLWithString:_cerFacePath] forState:0];
  81. }
  82. _cerBackPath = minstr([infoDic valueForKey:@"back_view"]);
  83. if (![PublicObj checkNull:_cerBackPath]) {
  84. [_cerBackBtn sd_setImageWithURL:[NSURL URLWithString:_cerBackPath] forState:0];
  85. }
  86. _cerHandPath = minstr([infoDic valueForKey:@"handset_view"]);
  87. if (![PublicObj checkNull:_cerHandPath]) {
  88. [_cerHandBtn sd_setImageWithURL:[NSURL URLWithString:_cerHandPath] forState:0];
  89. }
  90. }
  91. - (void)viewDidLoad {
  92. [super viewDidLoad];
  93. self.titleL.text = YZMsg(@"实名认证");
  94. NSArray *defaultArray = @[@{@"title":YZMsg(@"真实姓名"),@"placeholder":YZMsg(@"请输入姓名")},
  95. @{@"title":YZMsg(@"身份证号"),@"placeholder":YZMsg(@"请输入身份证号码")},
  96. @{@"title":YZMsg(@"手机号码"),@"placeholder":YZMsg(@"请输入手机号码")}];
  97. MASViewAttribute *masTop = self.naviView.mas_bottom;
  98. for (int i=0; i<defaultArray.count; i++) {
  99. NSDictionary *subDic = defaultArray[i];
  100. UILabel *titleL = [[UILabel alloc]init];
  101. titleL.font = SYS_Font(15);
  102. titleL.textColor = RGB_COLOR(@"#dcdcdc", 1);
  103. titleL.text = minstr([subDic valueForKey:@"title"]);
  104. titleL.adjustsFontSizeToFitWidth = YES;
  105. [self.view addSubview:titleL];
  106. [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
  107. make.left.equalTo(self.view.mas_left).offset(15);
  108. make.top.equalTo(masTop).offset(18);
  109. if (![lagType isEqual:ZH_CN]) {
  110. make.width.mas_equalTo(120);
  111. }else{
  112. make.width.mas_equalTo(80);
  113. }
  114. }];
  115. MyTextField *tf = [[MyTextField alloc]init];
  116. tf.placeCol = RGB_COLOR(@"#646464", 1);
  117. tf.textColor = RGB_COLOR(@"#dcdcdc", 1);
  118. tf.tintColor = RGB_COLOR(@"#dcdcdc", 1);
  119. tf.placeholder = minstr([subDic valueForKey:@"placeholder"]);
  120. tf.font = SYS_Font(15);
  121. [self.view addSubview:tf];
  122. switch (i) {
  123. case 0:{
  124. _nameTF = tf;
  125. }break;
  126. case 1:{
  127. _cardTF = tf;
  128. }break;
  129. case 2:{
  130. _phoneTF = tf;
  131. _phoneTF.keyboardType = UIKeyboardTypeNumberPad;
  132. }break;
  133. default:
  134. break;
  135. }
  136. [tf mas_makeConstraints:^(MASConstraintMaker *make) {
  137. make.left.equalTo(titleL.mas_right).offset(5);
  138. make.right.equalTo(self.view.mas_right).offset(-15);
  139. make.height.mas_equalTo(32);
  140. make.centerY.equalTo(titleL);
  141. }];
  142. UILabel *lineL = [[UILabel alloc]init];
  143. lineL.backgroundColor = Line_Cor;
  144. [self.view addSubview:lineL];
  145. [lineL mas_makeConstraints:^(MASConstraintMaker *make) {
  146. make.width.equalTo(self.view.mas_width).offset(-30);
  147. make.centerX.equalTo(self.view);
  148. make.height.mas_equalTo(1);
  149. make.top.equalTo(titleL.mas_bottom).offset(18);
  150. }];
  151. masTop = lineL.mas_bottom;
  152. }
  153. NSArray *certificatesA = @[YZMsg(@"证件正面"),YZMsg(@"证件反面"),YZMsg(@"手持证件正面照")];
  154. CGFloat space = 20;
  155. CGFloat cerW = (_window_width - 20*4)/3;
  156. CGFloat cerH = cerW *75/100;
  157. MASViewAttribute *cerLeft = self.view.mas_left;
  158. MASViewAttribute *cerTop = masTop;
  159. for (int i =0; i<certificatesA.count; i++) {
  160. UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  161. btn.layer.cornerRadius = 3;
  162. btn.layer.masksToBounds = YES;
  163. [btn setImage:[UIImage imageNamed:@"认证-上传"] forState:0];
  164. btn.imageView.contentMode = UIViewContentModeScaleAspectFill;
  165. btn.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
  166. btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
  167. [btn addTarget:self action:@selector(clickCerBtn:) forControlEvents:UIControlEventTouchUpInside];
  168. [self.view addSubview:btn];
  169. switch (i) {
  170. case 0:{
  171. _cerFaceBtn = btn;
  172. }break;
  173. case 1:{
  174. _cerBackBtn = btn;
  175. }break;
  176. case 2:{
  177. _cerHandBtn = btn;
  178. }break;
  179. default:
  180. break;
  181. }
  182. [btn mas_makeConstraints:^(MASConstraintMaker *make) {
  183. make.left.equalTo(cerLeft).offset(space);
  184. make.top.equalTo(cerTop).offset(18);
  185. make.width.mas_equalTo(cerW);
  186. make.height.mas_equalTo(cerH);
  187. }];
  188. UILabel *desL = [[UILabel alloc]init];
  189. desL.font = SYS_Font(12);
  190. desL.textColor = RGB_COLOR(@"@646464", 1);
  191. desL.text = certificatesA[i];
  192. [self.view addSubview:desL];
  193. [desL mas_makeConstraints:^(MASConstraintMaker *make) {
  194. make.centerX.equalTo(btn);
  195. make.width.lessThanOrEqualTo(btn.mas_width).offset(20);
  196. make.top.equalTo(btn.mas_bottom).offset(10);
  197. }];
  198. cerLeft = btn.mas_right;
  199. masTop = desL.mas_bottom;
  200. }
  201. UIImageView *desIV = [[UIImageView alloc]init];
  202. desIV.image = [UIImage imageNamed:@"认证-示例"];
  203. desIV.layer.cornerRadius = 3;
  204. desIV.layer.masksToBounds = YES;
  205. [self.view addSubview:desIV];
  206. [desIV mas_makeConstraints:^(MASConstraintMaker *make) {
  207. make.left.equalTo(self.view.mas_left).offset(20);
  208. make.top.equalTo(masTop).offset(26);
  209. make.width.mas_equalTo(cerW);
  210. make.height.mas_equalTo(cerH);
  211. }];
  212. UILabel *cerDesL = [[UILabel alloc]init];
  213. cerDesL.font = SYS_Font(12);
  214. cerDesL.text = YZMsg(@"请按图示手持证件拍照,必须本人手持身份证,确保证件信息清晰可见。");
  215. cerDesL.textColor = RGB_COLOR(@"#646464", 1);
  216. cerDesL.numberOfLines = 0;
  217. [self.view addSubview:cerDesL];
  218. [cerDesL mas_makeConstraints:^(MASConstraintMaker *make) {
  219. make.left.equalTo(desIV.mas_right).offset(12);
  220. make.top.equalTo(desIV.mas_top);
  221. make.right.lessThanOrEqualTo(self.view.mas_right).offset(-20);
  222. }];
  223. _stateBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  224. [_stateBtn setTitleColor:RGB_COLOR(@"#ffffff", 1) forState:0];
  225. [_stateBtn addTarget:self action:@selector(clickStateBtn) forControlEvents:UIControlEventTouchUpInside];
  226. _stateBtn.titleLabel.font = SYS_Font(15);
  227. _stateBtn.layer.cornerRadius = 3;
  228. _stateBtn.layer.masksToBounds = YES;
  229. [_stateBtn setTitle:YZMsg(@"开始认证") forState:0];
  230. [self.view addSubview:_stateBtn];
  231. [_stateBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  232. make.width.equalTo(self.view.mas_width).offset(-40);
  233. make.centerX.equalTo(self.view);
  234. make.height.mas_equalTo(40);
  235. make.top.equalTo(desIV.mas_bottom).offset(40);
  236. }];
  237. [self changeStateBtnEnable:YES];
  238. }
  239. -(void)changeStateBtnEnable:(BOOL)enable {
  240. _nameTF.userInteractionEnabled = enable;
  241. _cardTF.userInteractionEnabled = enable;
  242. _phoneTF.userInteractionEnabled = enable;
  243. _cerFaceBtn.userInteractionEnabled = enable;
  244. _cerBackBtn.userInteractionEnabled = enable;
  245. _cerHandBtn.userInteractionEnabled = enable;
  246. _stateBtn.enabled = enable;
  247. if (enable) {
  248. _stateBtn.backgroundColor = Pink_Cor;
  249. }else{
  250. _stateBtn.backgroundColor = RGB_COLOR(@"#ffffff", 0.21);
  251. }
  252. }
  253. -(void)clickCerBtn:(UIButton *)sender {
  254. [self.view endEditing:YES];
  255. if (sender == _cerFaceBtn) {
  256. _upCerType = CerTypeFace;
  257. }else if (sender == _cerBackBtn){
  258. _upCerType = CerTypeBack;
  259. }else{
  260. _upCerType = CerTypeHand;
  261. }
  262. YBWeakSelf;
  263. RKActionSheet *sheet = [[RKActionSheet alloc]initWithTitle:@""];
  264. [sheet addActionWithType:RKSheet_Default andTitle:YZMsg(@"相机") complete:^{
  265. [weakSelf takePhoto];
  266. }];
  267. [sheet addActionWithType:RKSheet_Default andTitle:YZMsg(@"相册") complete:^{
  268. [weakSelf selectPhotos];
  269. }];
  270. [sheet addActionWithType:RKSheet_Cancle andTitle:YZMsg(@"取消") complete:^{
  271. }];
  272. [sheet showSheet];
  273. }
  274. -(void)clickStateBtn {
  275. [self.view endEditing:YES];
  276. if (_nameTF.text.length <=0 ) {
  277. [MBProgressHUD showPop:YZMsg(@"请输入姓名")];
  278. return;
  279. }
  280. if (_cardTF.text.length <=0 ) {
  281. [MBProgressHUD showPop:YZMsg(@"请输入身份证号码")];
  282. return;
  283. }
  284. if (_phoneTF.text.length <=0 ) {
  285. [MBProgressHUD showPop:YZMsg(@"请输入手机号码")];
  286. return;
  287. }
  288. if ((!_cerFaceImg && [PublicObj checkNull:_cerFacePath]) ||
  289. (!_cerBackImg && [PublicObj checkNull:_cerBackPath]) ||
  290. (!_cerHandImg && [PublicObj checkNull:_cerHandPath])) {
  291. [MBProgressHUD showPop:YZMsg(@"请完善证件信息")];
  292. return;
  293. }
  294. if (_selectedImg) {
  295. //进行上传操作
  296. YBWeakSelf;
  297. [[YBStorageObj storageManeger]getCOSType:^(int code) {
  298. dispatch_async(dispatch_get_main_queue(), ^{
  299. if (code == 0) {
  300. [weakSelf startUploadCer];
  301. }
  302. });
  303. }];
  304. }else{
  305. //未更改图片直接请求
  306. [MBProgressHUD showMessage:@""];
  307. [self goResServer];
  308. }
  309. }
  310. -(void)startUploadCer {
  311. [MBProgressHUD showMessage:@""];
  312. dispatch_group_t group = dispatch_group_create();
  313. dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
  314. dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
  315. YBWeakSelf;
  316. //正面照
  317. if (_cerFaceImg) {
  318. dispatch_group_async(group, queue, ^{
  319. NSString *imageName = [PublicObj getNameBaseCurrentTime:@"_cerFace.png"];
  320. [[YBStorageObj storageManeger]yb_storageImg:_cerFaceImg andName:imageName progress:^(CGFloat percent) {
  321. }complete:^(int code, NSString *key) {
  322. _cerFacePath = minstr(key);
  323. dispatch_semaphore_signal(semaphore);
  324. }];
  325. dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
  326. });
  327. }
  328. //反面照
  329. if (_cerBackImg) {
  330. dispatch_group_async(group, queue, ^{
  331. NSString *imageName = [PublicObj getNameBaseCurrentTime:@"_cerBack.png"];
  332. [[YBStorageObj storageManeger]yb_storageImg:_cerBackImg andName:imageName progress:^(CGFloat percent) {
  333. }complete:^(int code, NSString *key) {
  334. _cerBackPath = minstr(key);
  335. dispatch_semaphore_signal(semaphore);
  336. }];
  337. dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
  338. });
  339. }
  340. //手持照
  341. if (_cerHandImg) {
  342. dispatch_group_async(group, queue, ^{
  343. NSString *imageName = [PublicObj getNameBaseCurrentTime:@"_cerHand.png"];
  344. [[YBStorageObj storageManeger]yb_storageImg:_cerHandImg andName:imageName progress:^(CGFloat percent) {
  345. }complete:^(int code, NSString *key) {
  346. _cerHandPath = minstr(key);
  347. dispatch_semaphore_signal(semaphore);
  348. }];
  349. dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
  350. });
  351. }
  352. dispatch_group_notify(group, queue, ^{
  353. dispatch_async(dispatch_get_main_queue(), ^{
  354. [weakSelf goResServer];
  355. });
  356. NSLog(@"任务完成执行");
  357. });
  358. }
  359. -(void)goResServer {
  360. NSDictionary *postDic = @{@"real_name":_nameTF.text,
  361. @"mobile":_phoneTF.text,
  362. @"cer_no":_cardTF.text,
  363. @"front_view":_cerFacePath?_cerFacePath:@"",
  364. @"back_view":_cerBackPath?_cerBackPath:@"",
  365. @"handset_view":_cerHandPath?_cerHandPath:@"",
  366. };
  367. YBWeakSelf;
  368. [YBNetworking postWithUrl:@"Auth.setAuth" Dic:postDic Suc:^(int code, id info, NSString *msg) {
  369. [MBProgressHUD hideHUD];
  370. [MBProgressHUD showPop:msg];
  371. if (code == 0) {
  372. [weakSelf.navigationController popViewControllerAnimated:YES];
  373. }
  374. } Fail:^(id fail) {
  375. [MBProgressHUD hideHUD];
  376. }];
  377. }
  378. - (void)takePhoto{
  379. // 区分拍照-相册
  380. UIImagePickerController *imagePickerController = [UIImagePickerController new];
  381. imagePickerController.delegate = self;
  382. imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
  383. imagePickerController.allowsEditing = NO;
  384. imagePickerController.showsCameraControls = YES;
  385. imagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceRear;
  386. [self presentViewController:imagePickerController animated:YES completion:nil];
  387. }
  388. -(void)selectPhotos {
  389. TZImagePickerController *imagePC = [[TZImagePickerController alloc]initWithMaxImagesCount:1 delegate:self];
  390. imagePC.preferredLanguage = [lagType isEqual:ZH_CN] ? @"zh-Hans":@"en";
  391. imagePC.showSelectBtn = YES;
  392. imagePC.allowCrop = NO;
  393. imagePC.allowPickingOriginalPhoto = NO;
  394. imagePC.oKButtonTitleColorNormal = Pink_Cor;
  395. imagePC.allowTakePicture = YES;
  396. imagePC.allowTakeVideo = NO;
  397. imagePC.allowPickingVideo = NO;
  398. imagePC.allowPickingMultipleVideo = NO;
  399. imagePC.modalPresentationStyle = 0;
  400. [[[YBBaseAppDelegate sharedAppDelegate] topViewController]presentViewController:imagePC animated:YES completion:nil];
  401. }
  402. - (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray<UIImage *> *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto{
  403. _selectedImg = YES;
  404. [self changeUIWithImg:photos[0]];
  405. }
  406. -(void)changeUIWithImg:(UIImage *)image {
  407. switch (_upCerType) {
  408. case CerTypeFace:{
  409. _cerFaceImg = image;
  410. [_cerFaceBtn setImage:image forState:0];
  411. }break;
  412. case CerTypeBack:{
  413. _cerBackImg = image;
  414. [_cerBackBtn setImage:image forState:0];
  415. }break;
  416. case CerTypeHand:{
  417. _cerHandImg = image;
  418. [_cerHandBtn setImage:image forState:0];
  419. }break;
  420. default:
  421. break;
  422. }
  423. }
  424. -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
  425. NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
  426. if ([type isEqualToString:@"public.image"]){
  427. _selectedImg = YES;
  428. //先把图片转成NSData
  429. UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
  430. [self changeUIWithImg:image];
  431. }
  432. [picker dismissViewControllerAnimated:YES completion:nil];
  433. }
  434. -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
  435. [picker dismissViewControllerAnimated:YES completion:nil];
  436. }
  437. - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
  438. if ([UIDevice currentDevice].systemVersion.floatValue < 11) {
  439. return;
  440. }
  441. if ([viewController isKindOfClass:NSClassFromString(@"PUPhotoPickerHostViewController")]) {
  442. [viewController.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  443. if (obj.frame.size.width < 42) {
  444. [viewController.view sendSubviewToBack:obj];
  445. *stop = YES;
  446. }
  447. }];
  448. }
  449. }
  450. @end