美文网首页
iOS 集成支付宝支付

iOS 集成支付宝支付

作者: 善良的karl | 来源:发表于2019-06-13 22:57 被阅读0次

    这次是一个新项目,集成支付宝和微信支付,客户端集成其实非常简单,主要参数和配置都是可以在后台完成。不过还是碰到了一些问题,所以在这里做一次记录吧。支付宝的官方文档在 开放平台文档中心 这里。

    1、首先使用cocopods导入支付宝的sdk库。如下:
    pod 'AlipaySDK-iOS'
    
    2、在需要调用 AlipaySDK 的文件中,增加头文件引用。
    import <AlipaySDK/AlipaySDK.h>
    
    3、组装请求信息
    这一步应在商户服务端完成,商户服务端直接将组装和签名后的请求串 orderString 传给客户端,客户端直接传给 SDK 发起请求。支付宝官方文档和 Demo 是为了示例效果在客户端实现。
    4、配置返回 url 处理方法-支付结果回调

    在AppDelegate.m中,引入头文件

    import <AlipaySDK/AlipaySDK.h>
    

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

    - (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);
    
            }];
    
        }
    
        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);
    
            }];
    
        }
    
        return YES;
    
    }
    
    注意:以上方法在AppDelegate中,只能实现一次,不可以在AppDelegate分类中重复实现以上回调方法,笔者就曾在一个AppDelegate(um)分类中已经实现过这个方法,导致这里不走这个回调,而走了分类里面的回调。
    5、唤起支付宝支付

    在唤起支付宝之前,还要在“URL Types”选项中,点击“+”,在“URL Schemes”中输入“你的app标识”。在后面payOrder:orderString fromScheme:@"tcyclingapp" callback:^(NSDictionary *resultDic) {}]方法中,fromscheme里面输入“你的app标识”字符串。

    配置好以后,就可以去请求服务端接口,服务端会返回一个拼接好的字符串,然后实现以下方法

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

    说明:orderString 为服务端返回的一串字符串,appScheme为你在URL Schemes中输入的标识字符串。

    注意:(重点)经官方确认,实现这个方法唤起支付宝钱包app支付的时候,是不会走callback这个回调的,会走AppDelegate里面实现的回调方法。只有在调起h5网页支付的时候,才会走callback这个回调方法。这也是我踩的坑之一。

    6、回调结果处理举例

    // 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) {
    
                QDLog(@"支付结果 = %@",resultDic);
    
                NSIntegerresCode = [resultDic[@"resultStatus"]integerValue];
    
                if(resCode ==9000) {//支付成功
    
                    //发送支付成功的通知
    
                    [[NSNotificationCenter defaultCenter] postNotificationName:NoticePaySuccess object:nil];
    
                }elseif(resCode ==6001){//用户中途取消
    
                    //发送支付取消的通知
    
                    [[NSNotificationCenter defaultCenter] postNotificationName:NoticePayCancel object:nil];
    
                }else{
    
                     [[NSNotificationCenter defaultCenter] postNotificationName:NoticePayFailure object:nil];
    
                }
    
            }];
    
        }
    
        return YES;
    
    }
    
    TIPS:因为之前已经集成了友盟分享,在集成支付宝支付时,提示了utdid冲突的错误,原因可能是友盟和支付宝两个库里面有重复的文件,查找了一下资料,把友盟的pod ‘UMCSecurityPlugins’ 安全组件这个库移除掉,就可以解决这个冲突了。

    至此,支付宝支付的集成就完成了。

    相关文章

      网友评论

          本文标题:iOS 集成支付宝支付

          本文链接:https://www.haomeiwen.com/subject/fbxyfctx.html