iOS支付宝、微信、银联支付集成封装调用(下)

2020-01-21 05:18:18于海丽

3.此时方法就开始封装好了,可以在需要的地方直接使用(弹框已作出)


- (void)alipay{
 [self startProgress];
 self.requestModel.pay_type = @"alipayMobile";
 //自己后台的接口---拿到后台返回的数据作为第三方接口的参数
 [self.viewModel requestCartSettlePay:self.requestModel callback:^(IOAResponse *response) {
 dispatch_async(dispatch_get_main_queue(), ^{
  [self stopProgress];
  if (response.success) {
  NSString *appScheme = @"IOAAlipaySDK";
  self.payRequestModel.payString = response.responseObject;
  self.payRequestModel.payType = 1;
  self.payRequestModel.appScheme = appScheme;
  //第三方接口调用(封装)
  [[IOAPayApi defaultPayManager] pay:self.payRequestModel callback:^(IOAPayResponseModel *response) {
   dispatch_async(dispatch_get_main_queue(), ^{
   NSDictionary *userInfo = response.userInfo;
   if (![userInfo[@"resultStatus"] isEqualToString:@"9000"]) {
    //进入待付款界面(支付失败或者支付取消等)
    [self pushWait];
   }else{
    //进入订单列表界面(支付成功)
    [self pushList];
   }
   });
  }];
  }else{
  [self.view makeToast:@"支付失败"];
  }
 });
 }];
}

4.重磅来临(一些人弹框没有作出,可以直接拷贝下面代码)

新建控制器控制弹框.h文件中


#import <UIKit/UIKit.h>

#import "IOAPayApi.h"
#import "IOAPayItemModel.h"

@interface IOAPayViewController : UIViewController
//点击第几行回调声明
@property (nonatomic, copy) void (^clickCallback)(NSInteger atIndex);

+ (instancetype)show;
//block回调方法
+ (instancetype)show:(void (^)(NSInteger atIndex))clickCallback;
+ (void)dismiss;

- (void)setupItemTitles:(NSArray <NSString *>*)titles;
- (void)setupItems:(NSArray <IOAPayItemModel *>*)items;

- (void)setupTitle:(NSString *)title;
@end

实现其方法.m文件中


#import "IOAPayViewController.h"

#define PayCellHeight 50
#define PaySectionHeaderHeight 44

@interface IOAPayViewController () <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) CALayer *maskLayer;

@property (nonatomic, strong) UILabel *titleView;
@property (nonatomic, strong) UIView *payBgView;
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSMutableArray *dataSources;

@property (nonatomic, assign) CGFloat payViewHeight;

- (void)showPayView;
- (void)dismissPayView;
@end

@implementation IOAPayViewController

- (void)dealloc {

}

+ (instancetype)show {
 UIViewController *rootvc = [UIApplication sharedApplication].keyWindow.rootViewController;
 
 IOAPayViewController *vc = [IOAPayViewController new];
 [rootvc addChildViewController:vc];
 [rootvc.view addSubview:vc.view];
 
 [vc setupItemTitles:@[@"微信支付", @"支付宝支付", @"银联支付"]];
 [vc showPayView];
 return vc;
}

+ (instancetype)show:(void (^)(NSInteger atIndex))clickCallback {
 IOAPayViewController *vc = [self show];
 vc.clickCallback = clickCallback;
 
 return vc;
}

+ (void)dismiss {
 UIViewController *rootvc = [UIApplication sharedApplication].keyWindow.rootViewController;
 for (UIViewController *vc in rootvc.childViewControllers) {
 if ([vc isKindOfClass:[IOAPayViewController class]]) {
  IOAPayViewController *tempVC = (IOAPayViewController *)vc;
  [tempVC dismissPayView];
  return;
 }
 }
}

- (void)viewDidLoad {
 [super viewDidLoad];
 self.view.backgroundColor = [UIColor clearColor];
 
 self.maskLayer.frame = self.view.bounds;
 [self.view.layer addSublayer:self.maskLayer];
 
 [self.view addSubview:self.payBgView];
// [self.view addSubview:self.tableView];
}

- (void)didReceiveMemoryWarning {
 [super didReceiveMemoryWarning];
 // Dispose of any resources that can be recreated.
}

#pragma mark - UITableViewDataSource
- (NSInteger )numberOfSectionsInTableView:(UITableView *)tableView {
 return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 return self.dataSources.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 
 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
 id temp = self.dataSources[indexPath.row];
 if ([temp isKindOfClass:[NSString class]]) {
 cell.textLabel.text = temp;
 }
 else {
 IOAPayItemModel *item = temp;
 cell.textLabel.text = item.name;
 }
 cell.textLabel.font = [UIFont systemFontOfSize:18];
 cell.textLabel.textColor = RGB_HEXString(@"#323232");
 cell.selectionStyle = UITableViewCellSelectionStyleNone;
 
 return cell;
}

#pragma mark - UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
 return PayCellHeight;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
 return self.titleView;
}
- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
 return PaySectionHeaderHeight;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// IOAPayRequestModel *payRequestModel = [IOAPayRequestModel new];
// payRequestModel.payType = indexPath.row;
//// WS(weakSelf);
//// __weak typeof (self)weakSelf = self;
// __block IOAPayViewController *payVC = self;
// [[IOAPayApi defaultPayManager] pay:payRequestModel callback:^(IOAPayResponseModel *response) {
//// __strong __typeof (weakSelf)strongSelf = weakSelf;
// response.payType = indexPath.row;
// if (payVC.clickCallback) {
//  payVC.clickCallback(response);
//  payVC = nil;
// }
// }];
 
 if (self.clickCallback) {
 self.clickCallback(indexPath.row);
 }
 
 [self dismissPayView];
}

#pragma mark - Touches
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
 [self dismissPayView];
}

#pragma mark - Public
- (void)setupItemTitles:(NSArray<NSString *> *)titles {
 if (!titles.count) {
 return ;
 }
 
 self.payViewHeight = titles.count * PayCellHeight + PaySectionHeaderHeight;
 CGRect frame = self.view.frame;
 frame.size.height = self.payViewHeight;
 self.tableView.frame = frame;
 
 [self.dataSources removeAllObjects];
 [self.dataSources addObjectsFromArray:titles];
 [self.tableView reloadData];
 
 [self setPayViewFrame];
}

- (void)setupItems:(NSArray <IOAPayItemModel *>*)items {
 if (!items.count) {
 return ;
 }
 
 for (IOAPayItemModel *item in items) {
 if ([item.code isEqualToString:@"appWeixinPay"]) {
  item.payType = 0;
  continue;
 }
 
 if ([item.code isEqualToString:@"alipayMobile"]) {
  item.payType = 1;
  continue;
 }
 
 if ([item.code isEqualToString:@"unionpay"]) {
  item.payType = 2;
  continue;
 }
 if ([item.code isEqualToString:@"ye"]) {
  item.payType = 3;
  continue;
 }
 item.payType = 3;
 }
 
 self.payViewHeight = items.count * PayCellHeight + PaySectionHeaderHeight;
 CGRect frame = self.view.frame;
 frame.size.height = self.payViewHeight;
 self.tableView.frame = frame;
 [self.dataSources removeAllObjects];
 [self.dataSources addObjectsFromArray:items];
 [self.tableView reloadData];
 [self setPayViewFrame];
}

- (void)setupTitle:(NSString *)title {
 self.titleView.text = title;
}

#pragma mark - Private
- (void)showPayView {
 [self.view.layer removeAllAnimations];
 CGFloat payBgViewHeight = self.payViewHeight + BottomHeightOffset;
 CGRect frame = self.view.frame;
 frame.origin.y = self.view.frame.origin.y + self.view.frame.size.height;
 frame.size.height = payBgViewHeight;
 self.payBgView.frame = frame;
 
 frame.origin.y = self.view.frame.size.height - payBgViewHeight;
 [UIView animateWithDuration:0.25 animations:^{
 self.payBgView.frame = frame;
 }];
}

- (void)setPayViewFrame {
 CGFloat payBgViewHeight = self.payViewHeight + BottomHeightOffset;
 CGRect frame = self.view.frame;
 frame.origin.y = self.view.frame.origin.y + self.view.frame.size.height;
 frame.size.height = payBgViewHeight;
 frame.origin.y = self.view.frame.size.height - payBgViewHeight;
 self.payBgView.frame = frame;
}

- (void)dismissPayView {
 CGFloat payBgViewHeight = self.payViewHeight + BottomHeightOffset;

 CGRect frame = self.view.frame;
 frame.origin.y = self.view.frame.origin.y + self.view.frame.size.height;
 frame.size.height = payBgViewHeight;
 
 [UIView animateWithDuration:0.25 animations:^{
 self.payBgView.frame = frame;
 } completion:^(BOOL finished) {
 [self.view removeFromSuperview];
 [self removeFromParentViewController];
 }];
}

#pragma mark - Setter / Getter
- (CALayer *)maskLayer {
 if (_maskLayer == nil) {
 _maskLayer = [CALayer layer];
 _maskLayer.backgroundColor = [UIColor blackColor].CGColor;
 _maskLayer.opacity = 0.2;
 }
 
 return _maskLayer;
}

- (UILabel *)titleView {
 if (!_titleView) {
 _titleView = [UILabel new];
 _titleView.textAlignment = NSTextAlignmentCenter;
 _titleView.text = @"请选择支付方式";
 _titleView.font = [UIFont systemFontOfSize:16];
 _titleView.textColor = [UIColor blackColor];
 _titleView.backgroundColor = RGB_HEXString(@"#f2f2f2");//[UIColor whiteColor];
 }
 
 return _titleView;
}

- (UIView *)payBgView {
 if (!_payBgView) {
 _payBgView = [UIView new];
 _payBgView.backgroundColor = [UIColor whiteColor];
 [_payBgView addSubview:self.tableView];
 }
 return _payBgView;
}

- (UITableView *)tableView{
 if (!_tableView) {
 _tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain];
 _tableView.delegate = self;
 _tableView.dataSource = self;
 _tableView.showsVerticalScrollIndicator = NO;
 _tableView.showsHorizontalScrollIndicator = NO;
 _tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
 _tableView.separatorColor = RGB_HEXString(@"#f2f2f2");
 if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
  [_tableView setSeparatorInset:UIEdgeInsetsZero];
 }
 if ([_tableView respondsToSelector:@selector(setLayoutMargins:)]) {
  [_tableView setLayoutMargins:UIEdgeInsetsZero];
 }
 
 //
 [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
 }
 return _tableView;
}

- (NSMutableArray *)dataSources {
 if (!_dataSources) {
 _dataSources = [NSMutableArray array];
 }
 return _dataSources;
}

- (void)setPayViewHeight:(CGFloat)payViewHeight {
 _payViewHeight = payViewHeight;
 CGFloat height = self.view.frame.size.height * 0.6;
 self.tableView.scrollEnabled = NO;
 if (_payViewHeight > height) {
 _payViewHeight = height;
 self.tableView.scrollEnabled = YES;
 }
}
@end