对于iOS开发来说,移动支付一直是开发者的痛点所在,各种支付方式的配置各不相同,非常繁琐,且大多不支持CocoaPods方便的集成方式,市面上倒是有类似Ping++这种服务可以一站式集成开发者想要的支付方式,但是都是收费的。所以本人旨在提供一种iOS端一站式集成主流支付方式的工具,关键开源免费。
此工具提供的支付方式目前包括Apple Pay、微信支付、支付宝支付、银联支付。所以需要开发者去相应平台注册商户号(这些只能你自己做了,因为需要绑定银行卡,这张银行卡就是用户支付的钱会转到这里来),这里需要特别说明的是Apple Pay,苹果官方强烈建议使用第三方SDK接入Apple Pay,因为直接接入Apple Pay需要很多数据加密的相关知识(苹果原话),目前Apple Pay在我大天朝区合作的有5家,分别是CUP、LianlianPay、PayEase、YeePay、UMS( 传送门 ),这里我选择的是LianlianPay,不要被他的名字所迷惑,感觉好像很山寨的样子,进入他的官网( 传送门 ),你会被他的气质所折服,特别是下载了他的SDK看了源码之后,我更加肯定了我的选择,真心比CUP(中国银联)的好太多了。
先上图
如图所示,此框架为LeoPayManager,已经封装了Apple Pay、微信支付、支付宝支付和银联支付的SDK,方便开发者一站式集成,值得注意的是,第5步通知服务端支付结果和通知客户端支付结果是异步进行的,你可以认为是第三方支付服务器(以下说道第三方支付服务器就是指Apple Pay、微信支付、支付宝支付、银联支付服务器)开了两个线程,一个用来通知服务端支付结果,一个用来通知客户端支付结果。
申请微信支付、支付宝支付、银联支付、连连支付(用于Apple Pay)商户号,把相应的配置做好,这些配置不在多说,网上教程很多,不用教程也可以根据提示一步一步做好。
在Info.plist文件加入白名单
选择TARGETS->Info->URL Types添加URL Schemes
其中wx*******为开发者注册的微信AppId;
alisdk那一栏的******为开发调用- (void)aliPayOrder:(NSString *)order scheme:(NSString *)scheme respBlock:(LeoPayManagerRespBlock)block时写入的scheme参数,建议使用alisdk+app名。
3.集成
源码地址: https://github.com/LeoChensj/LeoPayManager (如果觉得有用,给星哦,亲)
可以使用Cocoapods方便集成,pod 'LeoPayManager',建议使用。
也可以去github下载拖入工程,此种方式需要开发者自己添加系统依赖库,不建议使用。
4.使用
AppDelegate.m文件
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //这里需要更换你申请的微信appId [LeoPayManager wechatRegisterAppWithAppId:@"WeChat_appId" description:@"description"]; return YES; } //iOS9之前 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { if([url.scheme hasPrefix:@"wx"])//微信 { return [LeoPayManager wechatHandleOpenURL:url]; } else if([url.scheme hasPrefix:@"UnionPay"])//银联 { return [LeoPayManager unionHandleOpenURL:url]; } else if([url.scheme hasPrefix:@"safepay"])//支付宝 { return [LeoPayManager alipayHandleOpenURL:url]; } return YES; } //iOS9之后 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options { if([url.scheme hasPrefix:@"wx"])//微信 { return [LeoPayManager wechatHandleOpenURL:url]; } else if([url.scheme hasPrefix:@"UnionPay"])//银联 { return [LeoPayManager unionHandleOpenURL:url]; } else if([url.scheme hasPrefix:@"safepay"])//支付宝 { return [LeoPayManager alipayHandleOpenURL:url]; } return YES; }
ViewController.m文件(发起支付的文件)
首先需要App服务器提供接口获取相应的支付参数,然后调用SDK发起支付
//先获取Apple Pay支付参数 //... LeoPayManager *manager = [LeoPayManager getInstance]; [manager applePayWithTraderInfo:nil viewController:self respBlock:^(NSInteger respCode, NSString *respMsg) { //处理支付结果 }]; //先获取微信支付参数 //... LeoPayManager *manager = [LeoPayManager getInstance]; [manager wechatPayWithAppId:@"" partnerId:@"" prepayId:@"" package:@"" nonceStr:@"" timeStamp:@"" sign:@"" respBlock:^(NSInteger respCode, NSString *respMsg) { //处理支付结果 }]; LeoPayManager *manager = [LeoPayManager getInstance]; [manager aliPayOrder:@"" scheme:@"" respBlock:^(NSInteger respCode, NSString *respMsg) { //处理支付结果 }]; //先获取银联支付参数 //... LeoPayManager *manager = [LeoPayManager getInstance]; [manager unionPayWithSerialNo:@"" viewController:self respBlock:^(NSInteger respCode, NSString *respMsg) { //处理支付结果 }];
至此,大家可以方便的在iOS端集成这些主流的支付方式了,希望对大家有所帮助,如果有任何有关此文的问题,都可以留言和我探讨。