// // ASCheckoutPayManager.m // Asteria // // Created by xingyu on 2024/5/14. // #import "ASCheckoutPayManager.h" #import @interface ASCheckoutPayManager() @property (nonatomic, copy) NSString *payType; @property (nonatomic, strong) KlarnaPaymentView *klarna_payV; @property (nonatomic, strong) NSString *client_token; @property (nonatomic, strong) NSString *author_token; @end @implementation ASCheckoutPayManager static ASCheckoutPayManager *_instance = nil; + (instancetype)sharedInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[ASCheckoutPayManager alloc] init]; }); return _instance; } - (void)checkoutPayWithMethodType:(NSString *)payType { self.payType = payType; UIViewController *topVC = topViewController(); if ([payType isEqualToString:@"paypal_express"]) {//paypal K_WEAK_SELF; [MBProgressHUD showHUDAddedTo:topVC.view animated:YES]; [ASNetTools.shared getWithPath:Chectout_Pay_Paypal_Url param:@{} success:^(id _Nonnull json) { K_STRONG_SELF; [MBProgressHUD hideHUDForView:topVC.view animated:YES]; NSDictionary *dataDic = (NSDictionary *)json; NSString *urlStr = AS_String_NotNull(dataDic[@"url"]); dispatch_async(dispatch_get_main_queue(), ^{ [self tool_gotoWebPay:urlStr withVC:topVC]; }); NSLog(@"=====%@", json); } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) { K_STRONG_SELF; [MBProgressHUD hideHUDForView:topVC.view animated:YES]; }]; } else if ([payType isEqualToString:@"stripe_payments"]) {//visa } else if ([payType isEqualToString:@"afterpay_payment"]) {//afterpay } else if ([payType isEqualToString:@"klarna_kco"]) {//klarna K_WEAK_SELF; [MBProgressHUD showHUDAddedTo:topVC.view animated:YES]; [ASNetTools.shared getWithPath:Chectout_Pay_Klarna_Url param:@{} success:^(id _Nonnull json) { K_STRONG_SELF; [MBProgressHUD hideHUDForView:topVC.view animated:YES]; NSDictionary *dataDic = (NSDictionary *)json; self.client_token = AS_String_NotNull(dataDic[@"client_token"]); //klarna_1 初始化 如果不经历接口创建订单,永远无法更新 client_token 的订单信息 [self.klarna_payV initializeWithClientToken:self.client_token returnUrl:[NSURL URLWithString:@"alipearlKlarna://"]]; NSLog(@"=====%@", json); } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) { K_STRONG_SELF; [MBProgressHUD hideHUDForView:topVC.view animated:YES]; }]; } else { } } - (void)tool_gotoWebPay:(NSString *)urlStr withVC:(UIViewController *)tmpvc { XXX_BaseWebC *vc = [[XXX_BaseWebC alloc] init]; vc.isPayType = YES; vc.WebViewBlock = ^(NSUInteger status, id _Nonnull webData) { if (self.payFinishBlock) { self.payFinishBlock(self.payType, status, webData); } }; [vc xxx_dsWebLoadUrl:urlStr]; vc.modalPresentationStyle = UIModalPresentationFullScreen; [tmpvc presentViewController:vc animated:YES completion:nil]; } -(void)tool_creatOrderAutoken:(NSString *)authToken{ UIViewController *topVC = topViewController(); self.client_token = authToken; // //klarna_4 授权成功,创建订单 // NSString *klarnaUrl = [NSString stringWithFormat:@"%@firecheckout/index/saveOrderKlarna",WebBase_Server]; // NSMutableDictionary *paraDic = [NSMutableDictionary dictionary]; // [paraDic setObject:@"klarna_payments" forKey:@"payment[method]"]; // [paraDic setObject:authToken forKey:@"payment[authorization_token]"]; // [MBProgressHUD showHUDAddedTo:topVC.view animated:YES]; // [PPNetworkHelper POST:klarnaUrl parameters:paraDic success:^(id responseObject) { // [MBProgressHUD hideHUDForView:topVC.view animated:YES]; // if(RequestSuccess){ // NSDictionary *dic = (NSDictionary *)responseObject[@"data"]; // NSString *order_id = MM_str(dic[@"order_id"]); //// [tepC tool_payMentSucessOrderId:order_id]; // }else{ //// [tepC tool_payMentFaild]; // } // } failure:^(NSError *error) { // [MBProgressHUD hideHUDForView:topVC.view // animated:YES]; // [topVC.view makeToast:ReqNetWorkFaild // duration:2 // position:CSToastPositionCenter]; // }]; } #pragma mark - **************** KlarnaEventHandler **************** - (void)klarnaComponent:(id _Nonnull)klarnaComponent dispatchedEvent:(KlarnaProductEvent * _Nonnull)event{ NSLog(@"klarna---111---%@",event.qmui_allBindingKeys); } - (void)klarnaComponent:(id _Nonnull)klarnaComponent encounteredError:(KlarnaError * _Nonnull)error{ NSLog(@"klarna---222---error:%@",error); } #pragma mark - **************** KlarnaPaymentEventListener **************** - (void)klarnaInitializedWithPaymentView:(KlarnaPaymentView * _Nonnull)paymentView { //init 成功 NSLog(@"klarna---888---%@",self.client_token); //klarna_2 加载试图 [paymentView loadWithJsonData:self.client_token]; //klarna_3 授权支付操作 klarna_getClientTokenAurhorizePay [self.klarna_payV authorizeWithAutoFinalize:YES jsonData:self.client_token]; } - (void)klarnaLoadedWithPaymentView:(KlarnaPaymentView * _Nonnull)paymentView { NSLog(@"klarna---333---%@",paymentView); // self.bottomPaybtn.backgroundColor = [UIColor colorWithHexString:@"#B2000F"]; // self.bottomPaybtn.userInteractionEnabled = YES; } - (void)klarnaLoadedPaymentReviewWithPaymentView:(KlarnaPaymentView * _Nonnull)paymentView { NSLog(@"klarna---444---%@",paymentView); } - (void)klarnaAuthorizedWithPaymentView:(KlarnaPaymentView * _Nonnull)paymentView approved:(BOOL)approved authToken:(NSString * _Nullable)authToken finalizeRequired:(BOOL)finalizeRequired { NSLog(@"klarna---555---%@",authToken); if (approved == true ){ NSLog(@"klarna 授权支付成功"); // if (self.payFinishBlock) { // self.payFinishBlock(self.payType, 1, @{@"token":authToken}); // } // self.author_token = authToken; // [self tool_creatOrderAutoken:authToken]; } else { // if (self.payFinishBlock) { // self.payFinishBlock(self.payType, 0, @{@"token":authToken}); // } NSLog(@"klarna 授权支付失败"); } } - (void)klarnaReauthorizedWithPaymentView:(KlarnaPaymentView * _Nonnull)paymentView approved:(BOOL)approved authToken:(NSString * _Nullable)authToken { NSLog(@"klarna---666---%@ approved authToken:(NSString * _Nullable)authToken",paymentView); if (approved == true ){ [self tool_creatOrderAutoken:authToken]; } } - (void)klarnaResizedWithPaymentView:(KlarnaPaymentView * _Nonnull)paymentView to:(CGFloat)newHeight { // [self.klarna_payV mas_updateConstraints:^(MASConstraintMaker *make) { // make.height.mas_equalTo(newHeight); // }]; } - (void)klarnaFailedInPaymentView:(KlarnaPaymentView * _Nonnull)paymentView withError:(KlarnaPaymentError * _Nonnull)error { NSLog(@"klarna---777---%@",paymentView); } - (void)klarnaFinalizedWithPaymentView:(KlarnaPaymentView * _Nonnull)paymentView approved:(BOOL)approved authToken:(NSString * _Nullable)authToken { } #pragma mark - **************** lazy **************** -(KlarnaPaymentView *)klarna_payV{ if(!_klarna_payV){ _klarna_payV = [[KlarnaPaymentView alloc] initWithCategory:@"pay_over_time" eventListener:self]; _klarna_payV.translatesAutoresizingMaskIntoConstraints = false; } return _klarna_payV; } @end