转载

iOS支付项目实操分享

序言

对于iOS开发来说,移动支付一直是开发者的痛点所在,各种支付方式的配置各不相同,非常繁琐,且大多不支持CocoaPods方便的集成方式,市面上倒是有类似Ping++这种服务可以一站式集成开发者想要的支付方式,但是都是收费的。所以本人旨在提供一种iOS端一站式集成主流支付方式的工具,关键开源免费。

此工具提供的支付方式目前包括Apple Pay、微信支付、支付宝支付、银联支付。所以需要开发者去相应平台注册商户号(这些只能你自己做了,因为需要绑定银行卡,这张银行卡就是用户支付的钱会转到这里来),这里需要特别说明的是Apple Pay,苹果官方强烈建议使用第三方SDK接入Apple Pay,因为直接接入Apple Pay需要很多数据加密的相关知识(苹果原话),目前Apple Pay在我大天朝区合作的有5家,分别是CUP、LianlianPay、PayEase、YeePay、UMS( 传送门 ),这里我选择的是LianlianPay,不要被他的名字所迷惑,感觉好像很山寨的样子,进入他的官网( 传送门 ),你会被他的气质所折服,特别是下载了他的SDK看了源码之后,我更加肯定了我的选择,真心比CUP(中国银联)的好太多了。

1.技术架构

先上图

iOS支付项目实操分享

如图所示,此框架为LeoPayManager,已经封装了Apple Pay、微信支付、支付宝支付和银联支付的SDK,方便开发者一站式集成,值得注意的是,第5步通知服务端支付结果和通知客户端支付结果是异步进行的,你可以认为是第三方支付服务器(以下说道第三方支付服务器就是指Apple Pay、微信支付、支付宝支付、银联支付服务器)开了两个线程,一个用来通知服务端支付结果,一个用来通知客户端支付结果。

2.Xcode配置

申请微信支付、支付宝支付、银联支付、连连支付(用于Apple Pay)商户号,把相应的配置做好,这些配置不在多说,网上教程很多,不用教程也可以根据提示一步一步做好。

在Info.plist文件加入白名单

iOS支付项目实操分享

选择TARGETS->Info->URL Types添加URL Schemes

iOS支付项目实操分享

其中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端集成这些主流的支付方式了,希望对大家有所帮助,如果有任何有关此文的问题,都可以留言和我探讨。

原文  http://www.cocoachina.com/ios/20170220/18733.html
正文到此结束
Loading...