序言
對於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端集成這些主流的支付方式了,希望對大家有所幫助,如果有任何有關此文的問題,都可以留言和我探討。