iOS|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;
}
【iOS|iOS 支付宝支付】}
BOOLresult = [[UMSocialManagerdefaultManager]handleOpenURL:urloptions:options];
if(!result) {
returnYES;
}
returnresult;
}


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


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

    推荐阅读