使用cocopods安装
第一步:https://docs.open.alipay.com/54/104509来到这下载支付宝的示例Demo
第二步:打开示例Demo找到这几个文件拷贝放到桌面
第三步:建一个Demo
3.1先把刚才拷贝出来的文件添加进工程
AlipaySDK.bundle
AlipaySDK.framework
3.2导入依赖库
3.3把俩个.a文件加入库中
3.4把openssl和Utils两个文件夹加入到项目中
这里注意要这样加入这两个文件
如果还是报这个错,那就这样
3.4把下载的示例代码的几个文件拖入到项目中
3.5.别忘记了把在info.plist中加上这个
总于到代码了
1.在AppDelegate.m中导入头文件#import <AlipaySDK/AlipaySDK.h>添加如下代码
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
// 授权跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",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;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
// 授权跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",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;
}
在需要支付的地方
导入头文件
import <AlipaySDK/AlipaySDK.h>
这里的aliPay 就是调起支付宝支付
- (void)aliPay
{
NSString *appScheme = @"app.haha.2018.3.15";
// NOTE: 调用支付结果开始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
}
特别注意⚠️这里的appScheme要设置为一样,因为支付后,要回到原来的应用程序,必须要对应一样
结果如下
方式二:
第一步:
platform :ios, ’10.0’
#use_frameworks!个别需要用到它,比如reactiveCocoa
def pods
pod 'AlipaySDK-iOS'
end
target 'alipayDEMO' do
pods
end
第二步:把demo中下载的这个几个文件拖到到项目中
第三步:特别注意openssl这个文件的路径,容易报找不到这个头文件
第四步:注意添加URL Schemes
第五步:代码
在AppDelegate.h文件中导入头文件#import <AlipaySDK/AlipaySDK.h>
并添加如下代码
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
// 授权跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",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;
}
在需要的地方添加支付或者添加预授权
UIButton *payBtn = [[UIButton alloc] init];
payBtn.frame = CGRectMake(10, 100, 100, 100);
payBtn.backgroundColor = [UIColor redColor];
[payBtn setTitle:@"支付" forState:UIControlStateNormal];
[payBtn addTarget:self action:@selector(payBtnClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:payBtn];
UIButton *AuthBtn = [[UIButton alloc] init];
AuthBtn.frame = CGRectMake(200, 100, 100, 100);
AuthBtn.backgroundColor = [UIColor redColor];
[AuthBtn setTitle:@"授权" forState:UIControlStateNormal];
[AuthBtn addTarget:self action:@selector(AuthBtnClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:AuthBtn];
}
//支付
- (void)payBtnClick
{
NSString *appScheme = @"app.alipay.2020.6.12";
// NOTE: 调用支付结果开始支付
[[AlipaySDK defaultService] payOrder:@"111" fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
}
//预授权
- (void)AuthBtnClick
{
NSString *pid = @"";
NSString *appID = @"";
NSString *rsa2PrivateKey = @"";
NSString *rsaPrivateKey = @"";
//pid和appID获取失败,提示
if ([pid length] == 0 ||
[appID length] == 0 ||
([rsa2PrivateKey length] == 0 && [rsaPrivateKey length] == 0))
{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示"
message:@"缺少pid或者appID或者私钥,请检查参数设置"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *action = [UIAlertAction actionWithTitle:@"知道了"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action){
}];
[alert addAction:action];
[self presentViewController:alert animated:YES completion:^{ }];
return;
}
//生成 auth info 对象
APAuthInfo *authInfo = [APAuthInfo new];
authInfo.pid = pid;
authInfo.appID = appID;
//auth type
NSString *authType = [[NSUserDefaults standardUserDefaults] objectForKey:@"authType"];
if (authType) {
authInfo.authType = authType;
}
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString *appScheme = @"alipayDEMO";
// 将授权信息拼接成字符串
NSString *authInfoStr = [authInfo description];
NSLog(@"authInfoStr = %@",authInfoStr);
// 获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
NSString *signedString = nil;
APRSASigner* signer = [[APRSASigner alloc] initWithPrivateKey:((rsa2PrivateKey.length > 1)?rsa2PrivateKey:rsaPrivateKey)];
if ((rsa2PrivateKey.length > 1)) {
signedString = [signer signString:authInfoStr withRSA2:YES];
} else {
signedString = [signer signString:authInfoStr withRSA2:NO];
}
// 将签名成功字符串格式化为订单字符串,请严格按照该格式
if (signedString.length > 0) {
authInfoStr = [NSString stringWithFormat:@"%@&sign=%@&sign_type=%@", authInfoStr, signedString, ((rsa2PrivateKey.length > 1)?@"RSA2":@"RSA")];
[[AlipaySDK defaultService] auth_V2WithInfo:authInfoStr
fromScheme:appScheme
callback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",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?:@"");
}];
}
}