亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS支付寶、微信、銀聯支付集成封裝調用(下)

2019-10-21 18:41:17
字體:
來源:轉載
供稿:網友

一.越來越多的app增加第三方的功能,可能app有不同的頁面但調用相同的支付方式,例如界面如下:

iOS,支付,封裝

這兩個頁面都會使用第三方支付支付:(微信,支付寶,銀聯)如果在每一個頁面都直接調用第三方支付的接口全部代碼,顯然并不是很合適,更何況,可能一個app并不止兩個入口。所以封裝還是很有必要的。

1.新建Model:-------后臺返回支付方式的列表json

#import <Foundation/Foundation.h>@interface IOAPayItemModel : NSObject//name:代表是支付寶,微信,銀聯或者余額等@property (nonatomic, copy) NSString *name;//icon:代表是支付方式的圖片@property (nonatomic, copy) NSString *icon;//code:代表支付方式的唯一標識@property (nonatomic, copy) NSString *code;//payType:代表支付類型(自己確定的)@property (nonatomic, assign) NSInteger payType;@end
#import "IOAPayItemModel.h"@implementation IOAPayItemModel@end

2.封裝第三方支付接口以及回調接口-----直接上源代碼----會有解釋(相信大家的能力,肯定能看懂)

#import <Foundation/Foundation.h>//支付寶SDK#import <AlipaySDK/AlipaySDK.h>//微信接口#import <WXApi.h>//銀聯接口#import "UPPaymentControl.h"/** 枚舉:列出第三方支付方式 */typedef NS_ENUM(NSInteger, PayType) { kPayTypeWXPay, // 微信支付 kPayTypeALiPay, // 支付寶支付 kPayTypeUNPay // 銀聯支付};/** IOAPayRequestModel:第三方支付需要的參數 */@interface IOAPayRequestModel: NSObject@property (nonatomic, assign) PayType payType;/** 支付寶和銀聯-后臺返回是字符串類型----支付寶和銀聯使用此方式 */@property (nonatomic, copy) NSString *payString;@property (nonatomic, copy) NSString *appScheme; // 根據設置的paytype設置/** 微信-后臺返回是字典類型--- 微信使用此方式 */@property (nonatomic, strong) NSDictionary *userInfo;@end/** 第三方支付接口返回的數據--- */@interface IOAPayResponseModel: NSObject@property (nonatomic, assign) PayType payType;//result和userInfo信息判斷支付結果--(支付成功、支付失敗、支付取消等)@property (nonatomic, assign) NSInteger result;@property (nonatomic, strong) NSDictionary *userInfo;@end@interface IOAPayApi : NSObject//支付返回的回調方法@property (nonatomic, copy) void (^callback)(IOAPayResponseModel *response);//支付請求model ----IOAPayRequestModel---第三方支付需要的參數@property (nonatomic, strong) IOAPayRequestModel *payRequestModel;//單例方法+ (instancetype)defaultPayManager;// 是否安裝了客戶端- (BOOL)isPayAppInstalled:(PayType)payType;// 支付- (void)pay:(IOAPayRequestModel *)payRequestModel callback:(void (^)(IOAPayResponseModel *response))callback;// 支付回調- (void)payCallbackWithUrl:(NSURL *)url;@end
#import "IOAPayApi.h"@implementation IOAPayRequestModel- (void)setPayType:(PayType)payType { _payType = payType; if (_payType == kPayTypeALiPay) { self.appScheme = @"IOAAlipaySDK"; // 測試// self.payString = @"alipay_sdk=1.0&app_id=2018012502067343&biz_content=%7B%22subject%22%3A%22%E6%94%AF%E4%BB%98%E5%AE%9D%E6%94%AF%E4%BB%98%22%2C%22out_trade_no%22%3A%222018032100007%22%2C%22total_amount%22%3A%220.01%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22timeout_express%22%3A%2210m%22%2C%22seller_id%22%3A%222088001065568658%22%7D&charset=UTF-8&format=json&method=alipay.trade.app.pay¬ify_url=api.ioa365.net%2Fapp%2Fapi%2FPayment%2Falipay_notify&sign_type=RSA2×tamp=2018-03-21+16%3A59%3A15&version=1.0&sign=SFyiWFqdkG98qarJFKfNjts8w2RS7ATwjCRyNnKYILDaVVFEnR%2F943QjK9WFaZgipx38rZuRf%2Bl4M74Hp2PO%2F%2F0ZfSKAntTU3DMLIVgt4YD42W1F2lOP3iXtkL5BHpPzt6YfDQueCz1zReeAWQXlyBDvvnjbJ9p67f2jt8jfqM6Enz6kWwY5cShyDD6iJQF0FKXdmSYA%2BiCO6IIHdiqKsRLHuBPb8lfSxJyY1%2FbaAUysIB3%2BiU6HWASUGadCVL769ivwHKwdjZQZUoFpjcfnneyZG3%2B4f%2FnlBrY1pKk3ZWy2UqpTtk0w0GofsF167dRz47J0lW7UufyM8uA%2BIhZ7Lw%3D%3D";  return; }  if (_payType == kPayTypeUNPay) { self.appScheme = @"UPPay";  // 測試// self.payString = @"559018436594292239101";  return; }  // 測試// self.userInfo = @{//     @"appid":@"wx66a3135d1354b23b",//     @"noncestr":@"J8pJbaEg6AjDQ9kk",//     @"partnerid":@"1497576612",//     @"prepayid":@"wx20180321170621b3fbce61a20187009040",//     @"result_code":@"SUCCESS",//     @"return_code":@"SUCCESS",//     @"return_msg":@"OK",//     @"sign":@"29FFF7B63A71D3FB4C6866BDBC443F72",//     @"timestamp":@"1521623180",//     @"trade_type":@"APP",//     };}@end@implementation IOAPayResponseModel@end@interface IOAPayApi() <WXApiDelegate>@end@implementation IOAPayApi//單例方法static IOAPayApi *manager = nil;+ (instancetype)defaultPayManager { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ manager = [IOAPayApi new]; }); return manager;}+ (instancetype)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ manager = [super allocWithZone:zone]; });  return manager;}//copy在底層 會調用copyWithZone:- (instancetype)copyWithZone:(NSZone *)zone { return [[self class] defaultPayManager];}+ (instancetype)copyWithZone:(struct _NSZone *)zone { return [self defaultPayManager];}+ (instancetype)mutableCopyWithZone:(struct _NSZone *)zone { return [self defaultPayManager];}- (instancetype)mutableCopyWithZone:(NSZone *)zone { return [[self class] defaultPayManager];}#pragma mark - WeiChatPayDelegate- (void)onResp:(BaseResp *)resp { //啟動微信支付的response if (self.payRequestModel.payType == kPayTypeWXPay) { if (self.callback) {  IOAPayResponseModel *payResponseModel = [IOAPayResponseModel new];  payResponseModel.result = 0;  if([resp isKindOfClass:[PayResp class]]){  //支付返回結果,實際支付結果需要去微信服務器端查詢  switch (resp.errCode) {   case 0://   payResoult = @"支付結果:成功!";   payResponseModel.result = 1;   break;   case -1:   payResponseModel.result = 0;   break;   case -2:   payResponseModel.result = 0;   break;   default:   break;  }  }    self.callback(payResponseModel); } }}#pragma mark - Public// 是否安裝了客戶端- (BOOL)isPayAppInstalled:(PayType)payType { switch (payType) { case kPayTypeWXPay:  return [WXApi isWXAppInstalled];  break;   case kPayTypeALiPay:  // 未提供接口 返回NO  return NO;  break; case kPayTypeUNPay:  return [[UPPaymentControl defaultControl] isPaymentAppInstalled];  break; default:  break; }  return NO;}- (void)pay:(IOAPayRequestModel *)payRequestModel callback:(void (^)(IOAPayResponseModel *response))callback { if (!payRequestModel) return; self.callback = callback; self.payRequestModel = payRequestModel;  switch (payRequestModel.payType) { case kPayTypeWXPay:  [self wxPay:payRequestModel];  break;   case kPayTypeALiPay:  [self aliPay:payRequestModel];  break; case kPayTypeUNPay:  [self unPay:payRequestModel];  break; default:  break; }}// 支付回調- (void)payCallbackWithUrl:(NSURL *)url { // 其他如支付等SDK的回調 if ([url.host isEqualToString:@"safepay"]) { [self aliPayCallback:url]; } else if ([url.host isEqualToString:@"pay"]) { // 處理微信的支付結果 [self wxPayCallback:url]; } else if ([url.host isEqualToString:@"uppayresult"]) { [self unPayCallback:url]; }}#pragma mark - Pay// 微信支付- (void)wxPay:(IOAPayRequestModel *)payRequestModel { PayReq *req = [[PayReq alloc] init]; NSDictionary *dataDic = payRequestModel.userInfo; //由用戶微信號和AppID組成的唯一標識,用于校驗微信用戶 req.openID = dataDic[@"appid"]; // 商家id,在注冊的時候給的 req.partnerId = dataDic[@"partnerid"]; // 預支付訂單這個是后臺跟微信服務器交互后,微信服務器傳給你們服務器的,你們服務器再傳給你 req.prepayId = dataDic[@"prepayid"]; // 根據財付通文檔填寫的數據和簽名 req.package = @"Sign=WXPay"; // 隨機編碼,為了防止重復的,在后臺生成 req.nonceStr = dataDic[@"noncestr"]; // 這個是時間戳,也是在后臺生成的,為了驗證支付的 NSString * stamp = dataDic[@"timestamp"]; req.timeStamp = stamp.intValue; // 這個簽名也是后臺做的 req.sign = dataDic[@"sign"]; //發送請求到微信,等待微信返回onResp [WXApi sendReq:req];}// 支付寶- (void)aliPay:(IOAPayRequestModel *)payRequestModel { NSString *appScheme = payRequestModel.appScheme; NSString *payString = payRequestModel.payString;  __weak __typeof(self)weakSelf = self; [[AlipaySDK defaultService] payOrder:payString fromScheme:appScheme callback:^(NSDictionary *resultDic) { if (weakSelf.payRequestModel.payType == kPayTypeALiPay) {  if (weakSelf.callback) {  IOAPayResponseModel *payResponseModel = [IOAPayResponseModel new];  payResponseModel.userInfo = resultDic;  payResponseModel.result = [resultDic[@"result"] integerValue];  weakSelf.callback(payResponseModel);  } } }];}// 銀聯支付- (void)unPay:(IOAPayRequestModel *)payRequestModel { NSString *appScheme = payRequestModel.appScheme; NSString *payString = payRequestModel.payString; [[UPPaymentControl defaultControl] startPay:payString fromScheme:appScheme mode:@"01" viewController:[UIApplication sharedApplication].keyWindow.rootViewController];}//////- (void)wxPayCallback:(NSURL *)url { //跳轉支付寶錢包進行支付,處理支付結果 [WXApi handleOpenURL:url delegate:self];}- (void)aliPayCallback:(NSURL *)url { __weak typeof(self)weakSelf = self; [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { if (weakSelf.payRequestModel.payType == kPayTypeALiPay) {  if (weakSelf.callback) {  IOAPayResponseModel *payResponseModel = [IOAPayResponseModel new];  payResponseModel.userInfo = resultDic;  payResponseModel.result = [resultDic[@"result"] integerValue];  weakSelf.callback(payResponseModel);  } } }];}- (void)unPayCallback:(NSURL *)url { __weak typeof(self)weakSelf = self; [[UPPaymentControl defaultControl]handlePaymentResult:url completeBlock:^(NSString *code, NSDictionary *data) { if (weakSelf.payRequestModel.payType == kPayTypeUNPay) {  if (weakSelf.callback) {  IOAPayResponseModel *payResponseModel = [IOAPayResponseModel new];  payResponseModel.userInfo = data;  if ([code isEqualToString:@"success"]) {   [[NSNotificationCenter defaultCenter] postNotificationName:@"YINLIANPAYS" object:nil];   payResponseModel.result = [code boolValue];  }  else if([code isEqualToString:@"fail"]) {   //交易失敗   [[NSNotificationCenter defaultCenter] postNotificationName:@"YINLIANPAYF" object:nil];   payResponseModel.result = [code boolValue];  }  else if([code isEqualToString:@"cancel"]) {   //交易取消   [[NSNotificationCenter defaultCenter] postNotificationName:@"YINLIANPAYC" object:nil];   payResponseModel.result = 0;  }    weakSelf.callback(payResponseModel);  } } }];}@end

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

舉例方法

利用請求的數據進行賦值傳值。

IOAOrderBaseModel *dataSourceModel = self.dataSource[indexPath.section];  IOAOrderSelectAbleItemModel *itemModel = (IOAOrderSelectAbleItemModel *) dataSourceModel.items[row];  IOAPayViewController *vc = [IOAPayViewController show:^(NSInteger atIndex) {  IOAPayItemModel *payItem = itemModel.items[atIndex];  itemModel.selectedIndex = atIndex;    weakSelf.requestModel.pay_type = payItem.code;  weakSelf.payItem = payItem;    [weakSelf.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationNone];  }];  [vc setupItems:self.confirmOrderInfo.payment_list];  [vc setupTitle:@"請選擇支付方式"];

最后的舉例方法并不是所有的適用,對于上面1.2.3還是可以直接拿過去使用,這些都是原創,如果第一次接入還是希望各位讀者讀一下上篇文章,集成的整個過程,這個代碼的整個demo。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品久久| 久久亚洲精品成人| 精品久久久香蕉免费精品视频| 亚洲精品视频免费在线观看| 国产精品亚洲综合天堂夜夜| 91精品综合视频| 欧美极品第一页| 亚洲国产99精品国自产| 国产精品高潮呻吟久久av黑人| 日韩高清av一区二区三区| 综合久久五月天| 国产精品户外野外| 亚洲精品中文字幕有码专区| 亚洲国产精品福利| 热re99久久精品国产66热| 国产女人18毛片水18精品| 国产不卡一区二区在线播放| 欧美激情手机在线视频| 亚洲成人久久网| 最好看的2019的中文字幕视频| 国产精品高潮呻吟久久av无限| 国产日韩欧美91| 国产精品香蕉在线观看| 欧美丰满少妇xxxxx| 欧美性一区二区三区| 欧美精品福利在线| 久久69精品久久久久久国产越南| 亚洲一区二区三区成人在线视频精品| 北条麻妃99精品青青久久| 国内精品久久久久久影视8| 国产精品极品在线| 热re91久久精品国99热蜜臀| 日本精品中文字幕| 亚洲欧洲在线观看| 国产在线观看一区二区三区| 欧美午夜精品久久久久久久| 久久亚洲精品一区| 中文字幕在线成人| 欧美高跟鞋交xxxxxhd| 欧美激情一级欧美精品| 精品久久香蕉国产线看观看gif| 国产午夜精品视频免费不卡69堂| 亚洲日韩欧美视频| 精品国产自在精品国产浪潮| 色一区av在线| 久热精品视频在线观看一区| 国产91对白在线播放| 亚洲欧洲在线视频| 欧美中文字幕在线观看| 一本一本久久a久久精品牛牛影视| 久久99久久99精品中文字幕| 欧美成人免费观看| 色婷婷综合成人av| 久久99精品久久久久久青青91| 欧美性猛xxx| 午夜精品久久久99热福利| 国产精品久久久av久久久| 北条麻妃一区二区三区中文字幕| 成人情趣片在线观看免费| 国产成人自拍视频在线观看| 亚洲精品国产精品国自产在线| 欧美老女人性视频| 国产精品va在线播放我和闺蜜| 国产有码在线一区二区视频| 97在线观看免费高清| 亚洲伊人第一页| 美女视频黄免费的亚洲男人天堂| 久久国产加勒比精品无码| 668精品在线视频| 最近2019好看的中文字幕免费| 日韩av影视综合网| 国产做受高潮69| 欧美日韩视频免费播放| www.日韩.com| 欧美精品久久久久久久久| 亚洲国产精品久久久| 欧美一级淫片播放口| 日韩精品极品视频| 亚洲精品资源美女情侣酒店| 欧美日韩精品二区| 91精品视频免费| 亚洲qvod图片区电影| 久久精品视频va| www.国产精品一二区| 日韩精品视频三区| 欧美日韩国产一区二区| 亚洲精品456在线播放狼人| 精品国产区一区二区三区在线观看| 视频在线一区二区| 国产成人久久精品| 亚洲综合色av| 国产精国产精品| 日本中文字幕不卡免费| 日日狠狠久久偷偷四色综合免费| 欧美午夜www高清视频| 欧美三级欧美成人高清www| 精品国产欧美一区二区五十路| 日韩国产在线播放| 国产精品精品久久久| 亚洲午夜女主播在线直播| 日韩精品中文字幕在线| 欧美日韩国产精品一区二区三区四区| 亚洲国产欧美一区| 亚洲天堂av女优| 国产一区二区三区中文| 国产剧情久久久久久| 综合欧美国产视频二区| 国产91精品久久久久| 91av在线免费观看| 亚洲图片在线综合| 日韩专区中文字幕| 亚洲va久久久噜噜噜| 成人网在线免费看| 在线视频日韩精品| 26uuu另类亚洲欧美日本一| 欧美性极品少妇精品网站| 亚洲成人激情小说| 国产精品视频成人| 精品国产91久久久久久| 久久久久久久91| 亚洲高清久久网| 26uuu另类亚洲欧美日本老年| 日本午夜在线亚洲.国产| 国产欧美一区二区三区四区| 欧美做爰性生交视频| 亚洲品质视频自拍网| 亚洲精品一二区| 国产一区二区日韩精品欧美精品| 欧美亚洲一区在线| 国产精品一香蕉国产线看观看| 欧美日韩国产在线| 97婷婷涩涩精品一区| 国产精品一区二区电影| 国产中文字幕91| 亚洲电影免费观看高清完整版在线观看| 久久久久久国产精品三级玉女聊斋| 亚洲级视频在线观看免费1级| 亚洲网站在线观看| 播播国产欧美激情| 2018国产精品视频| 国内精品久久久久影院优| 国产精品视频免费在线| 国产精品香蕉在线观看| 国产欧美精品日韩精品| 亚洲老头老太hd| 欧美激情综合色| 成人精品视频99在线观看免费| 亚洲精品suv精品一区二区| 亚洲欧美激情视频| 日韩视频免费观看| 久久天天躁日日躁| 久久久久国产精品www| 久久手机精品视频| 亚洲美女又黄又爽在线观看| 中文字幕欧美国内| 91精品国产综合久久香蕉922| 日韩在线免费av| 这里只有精品久久| 国产精品一区二区女厕厕| 国产精品嫩草影院久久久| 国产精品久久久久久久久久久不卡| 久久亚洲成人精品| 亚洲人成亚洲人成在线观看| 91成人性视频|