欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

支付宝集成

程序员文章站 2022-05-30 21:33:59
...

CocoaPods 下载SDK

//搜索最新版
$ pod search AlipaySDK-iOS

//找到最新版本:pod 'AlipaySDK-iOS', '~> 15.5.9',将其复制到Podfile文件中。
//删除Podfile.lock文件

//更新第三方类库文件
$pod update --verbose




使用AlipaySDK 文件

在宏文件中导入AlipaySDK:#import <AlipaySDK/AlipaySDK.h>

设置URL Type

【项目文件】->【TARGETS】->【项目名】->【info】->【URL Types】然后点击“ + ”在URL Schemes中命名一个名称字符串(最好是与项目有关的名字)。

# FloatLaverView.m 文件
//注意:有的后端一股脑把数据传过来没处理,需要前端取字段“params”和“sign”
NSString *orderInfo = [NSString stringWithFormat:@"%@&sign=%@", model[@"params"], model[@"sign"]];

//注意:URL Type中不能使用特殊字符,否则字符宝那边无法识别,如:@"taijidao://"
[[AlipaySDK defaultService] payOrder:orderInfo fromScheme:@"taijidao" callback:^(NSDictionary *resultDic) {
            //在版本 AlipaySDK-iOS 15.5.9 中,这里不支持回调了,需要在AppDelegate.m 文件中,对回调进行处理
        }];
    } failure:^(id  _Nonnull fail) {
        [SVProgressHUD showErrorWithStatus:@"支付异常!"];
    }];


# AppDelegate.m 文件
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    
    if ([url.host isEqualToString:@"safepay"]) {
        //支付宝跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            
            if ([resultDic[@"resultStatus"] integerValue] == 9000) {
                [SVProgressHUD showSuccessWithStatus:@"支付成功!"];
                [[NSNotificationCenter defaultCenter] postNotificationName:aliPaySuccess object:nil];
            }else {
                [SVProgressHUD showSuccessWithStatus:@"支付异常!"];
                [[NSNotificationCenter defaultCenter] postNotificationName:aliPaySuccess object:nil];
            }
        }];
        
        //授权跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            //解析 auth Code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length > 0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"支付宝授权结果 authCode = %@", authCode?:@"");
        }];
    }
    
    return YES;
}





参考资料: