iOS支付纯干货

作者: bc75e9625165 | 来源:发表于2017-02-17 17:48 被阅读1383次

    序言

    对于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.技术架构

    先上图

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

    2.Xcode配置

    申请微信支付、支付宝支付、银联支付、连连支付(用于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端集成这些主流的支付方式了,希望对大家有所帮助,如果有任何有关此文的问题,都可以留言和我探讨。

    相关文章

      网友评论

      本文标题:iOS支付纯干货

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