iOS 支付宝支付及授权

释放双眼,带上耳机,听听看~!

这篇博客只是讲解了客户端如何接入

下载支付的SDK

[https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1](https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1)

从demo中可以找到AlipaySDK.bundle和AlipaySDK.framework ,将他们添加到项目中,一定要记着是copy。

在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:

添加url schemes

点击项目名称,点击“Info”选项卡,在“URL Types”选项中,点击“+”,在“URL Schemes”中输入“xxx”,这里输入什么都可以,自己选择,只要能让支付宝找到回调就可以。
在需要调用AlipaySDK的文件中,增加头文件引用。

import <AlipaySDK/AlipaySDK.h>
这里的orderString不用客户端管,服务器端会将这个字符串拼接好传给客户端,这里的appScheme要和上面的url schemes保持一致。

 [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"reslut = %@",resultDic);
 }];

支付结果通知:

@implementation AppDelegate中以下代码中的NSLog改为实际业务处理代码

//这个是在ios9后的接口,如果需要适配ios9以前的系统,请找对应的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) {
            DLog(@"result = %@",resultDic);
            NSInteger orderState = [resultDic[@"resultStatus"] integerValue];
            NSString *notice = nil;
            if (orderState == 9000) {
                [[NSNotificationCenter defaultCenter] postNotificationName:AppPay object:nil];
                notice = @"支付成功";
            } else {
                switch (orderState) {
                    case 8000:
                        notice = @"支付正在处理中";
                        break;
                    case 4000:
                        notice = @"支付失败";
                        break;
                    case 6001:
                        notice = @"支付取消";
                        break;
                    case 6002:
                        notice = @"网络连接出错";
                        break;
                        
                    default:
                        break;
                }
            }
 
        }];
    }
    return YES;
}

下面是授权流程:

基本的配置和支付是一样的,不同的是在调用支付接口的地方变成授权接口

//这里的orderString也是由服务器拼接好返回,AppScheme同支付一样
[[AlipaySDK defaultService] auth_V2WithInfo:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
                            DLog(@"%@",resultDic);
}];

@implementation AppDelegate中以下代码中的NSLog改为实际业务处理代码

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"safepay"]) {
        
        
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            DLog(@"result = %@",resultDic);
            
        }];
       
    }
    return YES;
}

如果授权成功:

【
     resultStatus=9000
     memo="处理成功"
     result="success=true&auth_code=d9d1b5acc26e461dbfcb6974c8ff5E64&result_code=200 &user_id=2088003646494707"
  】
 // 解析 auth code
        NSString *resultString = result[@"result"];
        NSString *authCode = nil;
        if (resultString.length>0) {
            NSArray *resultArr = [resultString componentsSeparatedByString:@"&"];
            for (NSString *subResult in resultArr) {
                if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                    authCode = [subResult substringFromIndex:10];
                    break;
                }
            }
        }
        NSLog(@"resultString = %@",resultString);
//        NSLog(@"authv2WithInfo授权结果 authCode = %@", authCode?:@"");
 // 解析 auth code
        NSString *resultString = result[@"result"];
        NSString *authCode = nil;
        if (resultString.length>0) {
            NSArray *resultArr = [resultString componentsSeparatedByString:@"&"];
            for (NSString *subResult in resultArr) {
                if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                    authCode = [subResult substringFromIndex:10];
                    break;
                }
            }
        }
        NSLog(@"resultString = %@",resultString);
//        NSLog(@"authv2WithInfo授权结果 authCode = %@", authCode?:@"");

 

可以得到auth_code,   user_id的话大家大家自行截取吧,这样只要截取出需要的数据就可以了,这样基本上授权完成。

人已赞赏
iOS文章

iOS 类扩展

2020-1-16 16:28:15

iOS文章

iOS开发状态栏的隐藏和显示

2020-1-16 17:26:55

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索