集成支付宝SDK--十分钟完美集成

首先看支付宝的官方文档:https://docs.open.alipay.com/204/105295/,了解大概,接下来开始我们的集成工作。楼主简单总结一下,完成集成我们需要了解以下四步:

1.支付宝开放平台创建应用,签约移动支付功能

2.接入支付前的准备工作(附准备工作中遇到难题的解决方法

3.配置官方Demo 附BUG解决方法

4.集成项目,具体代码编写

废话不多说,直接开始讲解!

一、支付宝开放平台创建应用,在这之前先做好准备工作:申请公司的支付宝帐号。等公司的支付宝帐号申请完成,就可以登录支付宝去创建应用啦~,下面截图为各位简单描述:

打开蚂蚁金服开放平台,找到支付接入,创建自己app的应用,注意app命名规范


1.png
2.png

1. 应用创建过程中,主要是创建应用公钥配置那块可能有人搞不清楚,其实很简单,(生成密钥文档:https://docs.open.alipay.com/291/105971/),通过RSA工具生成一对应用公私钥,然后将应用公钥上传到接口加签方式那儿,它会给我们返回一个支付宝的公钥,这个公钥就是日后我们测试支付代码中所需的,将应用公私钥和支付宝公钥保存好。

3.png

这样设置完成后直接提交审核,等半天左右,支付宝会告知审核通过。
通过后进行支付功能的签约,具体步骤 https://b.alipay.com/newIndex.htm;
4.png

2.当第一步准备工作全部完成后,开始集成支付宝的SDK,具体步骤可参考:https://docs.open.alipay.com/204/105295/

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

image.png

(2)在需要调用AlipaySDK的文件中,增加头文件引用。
import AlipaySDK/AlipaySDK.h

3.你可以将支付宝SDK中的这些文件拖入到一个文件夹,然后一起拖入项目,避免出现错误!

986F0BD6-7189-4B6A-851A-F3254EBFE9CD.png

注意:在拖入这两个静态库时,有时会出现UTDID冲突,解决办法:https://docs.open.alipay.com/54/104509,进入此页面重新下载解决过冲突的SDK。

82B5A1E8-8641-4440-B8A6-3BDDEA6E63B4.png
507C5ED5-15C7-4024-81CE-BA100EC686E1.png

拖入后会出现一些问题,

1)"Unknown type name ‘NSString‘ "或"Unknown type name ‘NSData‘ "

image

这是因为缺少Foundation类库和UIKit类库,支付宝Demo中之所以没有出现此错误,是因为在.pch文件中导入过这些类库
解决办法:只需要在出现错误的文件中导入这些类库即可


image

2)‘openssl/asn1.h‘ file not found

这是openssl文件夹头文件链接问题,如果openssl文件夹随意拉进项目中,即使添加头文件链接,也可能解决不了此问题,这也是一开始就将所需要的文件放到一个新建文件夹中再添加到项目中的原因。
解决办法:

Targets->Build Settings->Header Search Path中添加AliPaySDK文件夹的路径

image

编译成功后,别忘记:在Info里面设置Url Scheme,记住这个scheme,测试要用。


5.png

4.最后可以集成代码啦~~

在AppDelegate.m中,写入

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

如果你的项目后台配置未完成,你可以自己拿着申请的APPID,支付宝返回的私钥,还有在info里配置的URL_Scheme来干活了。Demo如下:

AliPayXYXDemo

如果你们的后台动作敏捷,已经将接口写好,你就很轻松得直接拉起支付宝啦,点支付时,写上

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

最后结果中按支付宝给的结果代码区分!
F429EDF9-5359-4D69-B659-9A6D585EFF8A.png

如果你想查看测试获得的结果对不对,可以用以下简单方法对其拆分:

// NOTE: 调用支付结果开始支付
   [[AlipaySDK defaultService] payOrder:orderString fromScheme:@"YiNuanTong" callback:^(NSDictionary *resultDic) {
         
     NSLog(@"支付页面reslut = %@",resultDic);
     

    // 提取支付结果字符串
     NSDictionary *returnDic =  [self stringToJson:resultDic[@"result"]];
 
    NSDictionary *dataDic = returnDic[@"alipay_trade_app_pay_response"];
     
  
     NSLog(@"支付码:%@",dataDic[@"code"]);
      NSLog(@"支付结果:%@",dataDic[@"msg"]);
      NSLog(@"支付appid:%@",dataDic[@"app_id"]);
      NSLog(@"支付授权auth_app_id:%@",dataDic[@"auth_app_id"]);
      NSLog(@"支付时间:%@",dataDic[@"timestamp"]);
      NSLog(@"支付费用:%@",dataDic[@"total_amount"]);
      NSLog(@"支付交易码trade_no:%@",dataDic[@"trade_no"]);
      NSLog(@"支付编号:%@",dataDic[@"out_trade_no"]);
      NSLog(@"支付seller_id:%@",dataDic[@"seller_id"]);
     }];


- (NSDictionary *)stringToJson:(NSString *)str
{ 
    NSString *requestTmp = [NSString stringWithString: str];  
    NSData *resData = [[NSData alloc] initWithData:[requestTmp dataUsingEncoding:NSUTF8StringEncoding]]; 
    NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:resData options:NSJSONReadingMutableLeaves error:nil];
    return resultDic;
    }

自己总结的一点小知识点,希望各位看官能点个赞哦,小女子感激不尽~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容