ios-支付宝支付sdk使用注意事项

最近在开发ios的手机支付,途中碰到的种种疑难杂症,现在记录一下,以免以后再重犯:

一、使用的SDK

     

以上是支付宝有介绍的,不多说,注意除了上面的sdk之外,还必须要有两个a文件支持,否则报错

linker command failed with exit code 1   

 

缺少两个A文件,项目运行会报错,这两个a文件可以在支付宝给的demo里面找到,有一点必须的说坑,你直接下载的支付宝sdk是不能用的,用了会报错,这个和其他开发者的反馈一样,只要置换demo里面的那两个framework、bundle文件就OK了,导入demo的时候可能会报一些错误,不用紧张,只是没有导入相关的头文件而已

#import



第二:有关于openssl的路径地址(不配置会报错的,具体错误忘记了,以后补上):

openssl其实就是一个文件夹,放在与代码等级目录就好,然后按照支付提示的去配置路径,这里给个参考博客,我这是看着来弄的

点iOS 支付宝 ’openssl/asn1.h' file not found 的问题解决办法


第三:文件重复引用(个人的小错误,顺便记录一下,大家可以直观第四点)

在开发集成支付宝sdk的时候,因为在某个文件头引入了.m文件,导致我的项目一直都在报相同文件错误,搞了很久才发现这个的:



第四:应用注册scheme,在AliSDKDemo-Info.plist定义URL types,这一步不能忘记,不然的话是没有办法支付完之后回调到你的程序里面,贴上支付宝提供的示例代码:

// NOTE: 如果加签成功,则继续执行支付
    if (signedString != nil) {
        //应用注册scheme,在AliSDKDemo-Info.plist定义URL types
        NSString *appScheme = @"alisdkdemo";
        
        // NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式
        NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",
                                 orderInfoEncoded, signedString];
        
        // NOTE: 调用支付结果开始支付
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];
    }

第五:有关于回调处理:支付宝回调不会在

[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];
这里得到结果的,它回调已经改变成了在appdelegate.m里面去实现,你只需要在里面加上相关代码(我从支付宝demo里面直接复制的,其实你们可以多点参考demo):

- (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 *)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;
}


第六:额~暂时没想到还缺什么,以后再补,有什么问题可以直接评论,楼主有空回复



你可能感兴趣的:(ios)