前言
這一段時(shí)間比較忙作儿,主要公司的產(chǎn)品需要重構(gòu)與加多一個(gè)貨幣支付系統(tǒng)洛二。說(shuō)到移動(dòng)端的支付,自然會(huì)牽扯到支付這一塊攻锰。支付這一塊主流的目前就微信晾嘶、支付寶、銀聯(lián)娶吞。做過(guò)這些SDK集成的開(kāi)發(fā)者都知道垒迂,集成相對(duì)復(fù)雜,而且要花大量的時(shí)間去閱讀他們提供的開(kāi)發(fā)文檔妒蛇,不過(guò)還好現(xiàn)在有很多開(kāi)發(fā)者都分享了他們的集成心得机断,使這件事越發(fā)簡(jiǎn)單,比如:iOS支付[支付寶绣夺、銀聯(lián)吏奸、微信]、10分鐘搞定支付寶和微信支付 的 各種填坑等等陶耍,但是呢奋蔚,其實(shí)還有更加簡(jiǎn)單的,Ping++。
Ping++能干嘛烈钞?
Ping++ 是為移動(dòng)端應(yīng)用以及 PC 網(wǎng)頁(yè)量身打造的下一代支付系統(tǒng)泊碑,通過(guò)一個(gè) SDK 便可以同時(shí)支持移動(dòng)端以及 PC 端網(wǎng)頁(yè)的多種主流支付渠道,你只需要一次接入即可完成多個(gè)渠道的接入棵磷。 Ping++ SDK 包括 Client SDK 和 Server SDK 兩部分蛾狗,支持主流的七種后端開(kāi)發(fā)語(yǔ)言,適配了 Android仪媒,iOS 和 HTML5 三種移動(dòng)端平臺(tái)以及 PC 端網(wǎng)頁(yè)。ps:官方原話谢鹊。
說(shuō)說(shuō)我的理解:
我覺(jué)得最方便的是算吩,不需要移動(dòng)端填寫各種appkey,各種秘鑰佃扼,像支付寶支付有秘鑰特別麻煩偎巢,這一些繁瑣的事情Ping++都幫你做了,你只要把這些申請(qǐng)下來(lái)的key保存在Ping++的配置信息系統(tǒng)就可以了兼耀。還要申請(qǐng)開(kāi)通一些權(quán)限压昼,不過(guò)這些操作都是我老大弄的求冷,不過(guò)很方便就是了。
還有就是一行代碼就可以調(diào)起各種支付這個(gè)對(duì)做過(guò)各種原生支付SDK的我窍霞,感覺(jué)很清爽匠题,貼下代碼,感受下:
[Pingpp createPayment:charge
viewController:weakSelf
appURLScheme:kUrlScheme
withCompletion:^(NSString *result, PingppError *error) {
NSLog(@"completion block: %@", result);
if (error == nil) {
NSLog(@"PingppError is nil");
} else {
NSLog(@"PingppError: code=%lu msg=%@",
(unsigned long)error.code, [error getMsg]);
}
[weakSelf showAlertMessage:result];
}];
使用方法:
1但金、使用 CocoaPods
在 Podfile 添加:
pod 'Pingpp', '~> 2.2.6'
2韭山、手動(dòng)引入
下載 iOS SDK 到本地,里面包含 lib 和 example 兩個(gè)目錄冷溃。example 目錄下的是示例項(xiàng)目钱磅,你需要將 lib 目錄下的文件添加到你的項(xiàng)目。
具體可以看Ping++的iOS SDK 接入指南似枕。
說(shuō)說(shuō)我遇到的坑:
首先說(shuō)下微信支付的SDK再Ping++的Channels是顯示Mmdpay的盖淡,剛開(kāi)始害我找半天...有點(diǎn)夸張哈
我這里由于暫時(shí)只用到這兩種支付,所以我把其它的都刪除掉了凿歼,現(xiàn)在app都提倡瘦身嘛禁舷。
還有一點(diǎn):
為了能正確獲得結(jié)果回調(diào)請(qǐng)?jiān)诠こ?AppDelegate 文件中調(diào)用[Pingpp handleOpenURL:url withCompletion:nil]
。
如果該方法的第二個(gè)參數(shù)傳 nil毅往,請(qǐng)?jiān)谠?createPayment
方法的 Completion
中處理回調(diào)結(jié)果牵咙。否則,在這里處理結(jié)果攀唯。
如果你使用了微信分享洁桌、登錄等一些看起來(lái)在這里“沖突”的模塊,你可以先判斷 url 的 host 來(lái)決定調(diào)用哪一方的方法侯嘀。
也可以先調(diào)用 Ping++ 的方法另凌,如果 return 的值為 false,表示這個(gè) url 不是支付相關(guān)的戒幔,你再調(diào)用模塊的方法吠谢。
貼上我解決這個(gè)問(wèn)題的代碼:
// iOS 8 及以下請(qǐng)用這個(gè)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
BOOL isPay = [Pingpp handleOpenURL:url withCompletion:nil];
if(isPay){
return isPay;
}else{
return [UMSocialSnsService handleOpenURL:url wxApiDelegate:nil];
}
}
這里值得注意一下,每次調(diào)用[Pingpp handleOpenURL:url withCompletion:nil]
就會(huì)執(zhí)行一次[Pingpp createPayment:(NSObject *) appURLScheme:<#(NSString *)#> withCompletion:<#^(NSString *result, PingppError *error)completion#>]
方法里的回調(diào)诗茎。
大概就是這一些了工坊,后續(xù)可能還會(huì)繼續(xù)添加更多的支付功能,如果遇到坑敢订,我還會(huì)繼續(xù)更新此文章王污。
參考文章
iOS SDK 接入指南
iOS應(yīng)用之 "Ping++" 支付集成
Ping++ SDK,引入iOS配置說(shuō)明