iOS 支付宝支付

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

1、首先使用cocopods导入支付宝的sdk库。如下:

pod 'AlipaySDK-iOS'

2、唤起支付宝支付

1.添加白名单

2.URL TYpes里添加URL Schemes

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

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

3、在需要调用 AlipaySDK 的文件中,增加头文件引用。

#import

//初始化的时候添加通知 接受APPdelegate的结果

[FBNSNotificationaddObserver:selfselector:@selector(NoticePayResults:)name:@"NoticePayResults"object:nil];

//点击支付的时候调用该函数

[[AlipaySDK defaultService] payOrder:data fromScheme:@"FBAliPay" callback:^(NSDictionary *resultDic) {                

             FBLog(@"reslut = %@",resultDic);          

}];

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

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


4、配置返回 url 处理方法-支付结果回调、回调结果处理举例

注意:以上方法在AppDelegate中,只能实现一次,不可以在AppDelegate分类中重复实现以上回调方法,笔者就曾在一个AppDelegate(um)分类中已经实现过这个方法,导致这里不走这个回调,而走了分类里面的回调。

在AppDelegate.m中,引入头文件

#import

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionaryid> *)options{

    //6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响

    if ([url.host isEqualToString:@"pay"] ) {//微信 || [url.host isEqualToString:@"oauth"]

        return [WXApi handleOpenURL:url delegate:self];

    }else if ([url.host isEqualToString:@"safepay"]){//支付宝支付回调

        // 支付跳转支付宝钱包进行支付,处理支付结果

        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

//            [[ServiceAlipay_Order sharedServiceAlipay_Order] setresultDic:resultDic];

            FBLog(@"支付宝支付结果 = %@",resultDic);

            NSIntegerresCode=[resultDic [@"resultStatus"]integerValue];

            if(resCode==9000){//支付成功

                //发送支付成功的通知

                [FBNSNotification postNotificationName:@"NoticePayResults" object:nil userInfo:@{@"Paytype":@"AliPay",@"payResults":@"1"}];

            }elseif(resCode==6001){//用户中途取消

                //发送支付取消的通知

                [FBNSNotification postNotificationName:@"NoticePayResults" object:nil userInfo:@{@"Paytype":@"AliPay",@"payResults":@"2"}];

            }else{

                [FBNSNotification postNotificationName:@"NoticePayResults" object:nil userInfo:@{@"Paytype":@"AliPay",@"payResults":@"3"}];

            }

        }];

        returnYES;

    }if ([url.host isEqualToString:@"oauth"]){//微信登录

        if([WXApihandleOpenURL:urldelegate:self] ==YES) {

            returnYES;

        }

    }

    BOOLresult = [[UMSocialManagerdefaultManager]  handleOpenURL:urloptions:options];

    if(!result) {

        returnYES;

    }

    returnresult;

}


TIPS:因为之前已经集成了友盟分享,在集成支付宝支付时,提示了utdid冲突的错误,原因可能是友盟和支付宝两个库里面有重复的文件,查找了一下资料,把友盟的pod ‘UMCSecurityPlugins’ 安全组件这个库移除掉,就可以解决这个冲突了。


万事大吉,支付宝支付的集成就完成了。

你可能感兴趣的:(iOS 支付宝支付)