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

一、使用的SDK

     

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

linker command failed with exit code 1   

 

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

#import <Foundation/Foundation.h>



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

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



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

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

creator ios sdk接入 ios sdk开发注意事项_creator ios sdk接入


第四:应用注册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<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;
}




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