工作筆記之難點記錄

工作筆記之難點記錄

最近項目中用到了Stripe進行支付典尾,我們公司主要是做一些國外的項目,當然也有國內的項目惩阶,國外的項目居多挎狸,言歸正傳,那么stripe是什么断楷?網上一搜锨匆,其實可以搜到一大堆,關于這個公司的介紹冬筒,這個公司主要是做信用卡支付的一個公司恐锣,那么我們公司的需求是是什么,第一账千,信用卡支付侥蒙,第二debit卡取現,所以我們就得用到了Stripe的SDK

相對于來匀奏,支付流程是很簡單的,因為這個sdk中為我們封裝了幾個特別好用的頁面学搜,如果沒有特殊的需求直接用這個就好了娃善。

支付的時候我們主要用到了一個“STPPaymentContext”,“STPPaymentMethodsViewController”,“STPAddCardViewController”這兩個類瑞佩,那么這兩個類是干什么的呢聚磺?第一個類其實是一個管理上下文,第二個其實就是一個選擇支付方式的controller炬丸,第三個是添加卡的一個VIewController瘫寝。其實這一切都是stripeSDK封裝好了,我們需要寫一個和我們自己后臺溝通的類遵循STPBackendAPIAdapter協(xié)議稠炬,實現協(xié)議的方法焕阿,在SDK內部會調用這些方法,獲取數據首启,這時我就不得不說這就是大神寫的澳郝拧!毅桃!思路褒纲,這種設計模式用的太恰當了准夷。強力推薦看一下源碼,這個sdk中有許多特別好的設計模式莺掠,實戰(zhàn)衫嵌。然后初始化context,初始化會用到我們剛才提到的類彻秆,基本的初始化好了之后渐扮,我們只要在需要選擇支付的地方,用context調用pushPaymentMethodsViewController或者presentPaymentMethodsViewController掖棉,就可以了墓律,接下來的事情,就是在代理方法中做了幔亥,我們發(fā)送該有token和數據等等給我們后臺耻讽,讓他們跟stripe交互,完成支付帕棉。這都有example针肥,和詳細的文檔,所以很簡單香伴,重點我要說的是第二個問題payout慰枕,自動體現。

payout 這里邊的坑真是不少啊即纲,讓我寢食難安了好多天具帮。因為什么,官網中只字未提到低斋,ios或者安卓的payout蜂厅,沒有example,這怎么辦膊畴,那就得靠自己去看源碼掘猿,有沒有關于payout的東西,自己一點一點發(fā)覺唇跨。由于這部分內容很少稠通,所以包括后臺的文檔也很少,所以我們都是在一點點的探索中弄出來的买猖,開始的時候改橘,產品需求也沒實際弄明白這部分東西,所以就給了和payment一樣的支付方式頁面政勃,和添加卡頁面唧龄,開始我和PL都以為可能payment和payout這兩個頁面是公用的,可是很快我就發(fā)現了不對勁,于是乎我通讀了文檔中后臺api文檔關于payout相關的既棺,發(fā)現大家都搞錯了讽挟,這是兩碼事,而且這個頁面也不能用一個頁面丸冕,payment的卡token和payout的token生成不一樣耽梅,并且生成方式不一樣。于是我和PL開了一個小會胖烛,怎么弄眼姐。PL說要不用分別給STPAddCardViewController,STPPaymentMethodsViewController寫個分類佩番,我覺得這種方式不行众旗,因為這兩個類里邊有很多的邏輯,寫一個分類趟畏,即使寫好多方法贡歧,也不能確定能控制以前payment的邏輯變成payout的邏輯,然后我提出用繼承赋秀,重寫有關于這部分的方法利朵,雖然也不容易控制但是畢竟會比分類好很多,但是實際情況又是不行猎莲,因為stripe在做sdk的時候有很多文件都是private的绍弟,所以不允許我們繼承,這個也不行著洼,那個也不行樟遣,這怎么辦呢,已經兩天過去了郭脂,PL也著急年碘,我也著急,之后那天晚上回家展鸡,我又仔細看了一遍文檔,突然眼前一亮埃难,有了想法莹弊,為什么我們要依賴SDK呢,我們就自己寫一個卡列表頁面涡尘,和添加卡頁面忍弛,這樣所有的邏輯都由我們自己控制了,于是第二天迫不及待的和PL提出了我的想法考抄,PL同意了說细疚,就按照你的想法做吧。很快川梅,一天搞定了這兩個東西疯兼,下面貼出重要的代碼:

ACPayoutAddCardViewController

- (void)nextPressed:(UIButton *)btn{

self.loading = YES;

STPBankAccountParams *params = [[STPBankAccountParams alloc] init];

params.accountNumber = [_accountNumCell.textField.textstringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

params.routingNumber = [_routingNumCell.textField.textstringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

params.accountHolderName = _accountNameCell.textField.text;

NSString *accountType = [_accountTypeCell.textField.textstringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

params.accountHolderType = [accountType isEqualToString:@"Individual"] ?STPBankAccountHolderTypeIndividual:STPBankAccountHolderTypeCompany;

params.currency = @"usd";

params.country = @"US";

[[STPAPIClientsharedClient]createTokenWithBankAccount:params completion:^(STPToken * _Nullable token, NSError * _Nullable error) {

if (error) {

[self handleCardTokenError:error];

} else {

[self creatPayoutBankAccountWithToken:token.tokenIdandComplete:^(NSError* _Nullable error) {

NSLog(@"%@", error.localizedDescription);

self.loading = NO;

if (error) {

[self handleCardTokenError:error];

} else {

[self.delegate payoutAddCardViewControllerDidAddCardSuccess:selfandToken:token];

}

}];

}

}];

}

ACPayoutMethodViewController

- (void)loadData {

if(!_activityIndicator) {

[selfsetUp];

}

self.activityIndicator.animating =YES;

self.tableView.hidden =YES;

[_apiAdapter retrieveCustomer:^(STPCustomer * _Nullable customer,NSError* _Nullable error) {

if(error) {

[selfshowSystemAlertViewWithTitle:@""andText:error.localizedDescription andHandle:nil];

}else{

self.tableView.hidden =NO;

self.activityIndicator.hidden =YES;

[self.activityIndicator removeFromSuperview];

STPCard *selectedCard;

NSMutableArray *cards = [NSMutableArrayarray];

for(id sourceincustomer.sources) {

if([source isKindOfClass:[STPCardclass]]) {

STPCard *card = (STPCard *)source;

[cards addObject:card];

if([card.stripeID isEqualToString:customer.defaultSource.stripeID]) {

selectedCard = card;

}

}

}

ACPayoutCardTuple *cardTuple = [ACPayoutCardTuple payoutCardTupleWithCards:cards andSelectedCard:selectedCard];

_cardTuple = cardTuple;

[self.tableView reloadData];

}

}];

}

#pragma mark - ADD Card Delegate

- (void)payoutAddCardViewControllerDidAddCardSuccess:(ACPayoutAddCardViewController *) payoutAddCardViewController andToken:(STPToken *)token{

NSMutableArray*array = [NSMutableArrayarrayWithArray:self.cardTuple.cards];

if(token.card) {

[array addObject:token.card];

}else{

STPCard *card = [[STPCard alloc] initWithID:token.bankAccount.bankAccountId brand:STPCardBrandUnknown last4:token.bankAccount.last4 expMonth:0expYear:0funding:STPCardFundingTypeDebit];

[array addObject:card];

}

[payoutAddCardViewController.navigationController popViewControllerAnimated:YES];

self.cardTuple.cards = [array mutableCopy];

[self.tableView reloadData];

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末然遏,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子吧彪,更是在濱河造成了極大的恐慌待侵,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姨裸,死亡現場離奇詭異秧倾,居然都是意外死亡,警方通過查閱死者的電腦和手機傀缩,發(fā)現死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門那先,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赡艰,你說我怎么就攤上這事售淡。” “怎么了瞄摊?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵勋又,是天一觀的道長。 經常有香客問我换帜,道長楔壤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任惯驼,我火速辦了婚禮蹲嚣,結果婚禮上,老公的妹妹穿的比我還像新娘祟牲。我一直安慰自己隙畜,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布说贝。 她就那樣靜靜地躺著议惰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乡恕。 梳的紋絲不亂的頭發(fā)上言询,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音傲宜,去河邊找鬼运杭。 笑死,一個胖子當著我的面吹牛函卒,可吹牛的內容都是我干的辆憔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼虱咧!你這毒婦竟也來了熊榛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤彤钟,失蹤者是張志新(化名)和其女友劉穎来候,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體逸雹,經...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡营搅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了梆砸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片转质。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖帖世,靈堂內的尸體忽然破棺而出休蟹,到底是詐尸還是另有隱情,我是刑警寧澤日矫,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布赂弓,位于F島的核電站,受9級特大地震影響哪轿,放射性物質發(fā)生泄漏盈魁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一窃诉、第九天 我趴在偏房一處隱蔽的房頂上張望杨耙。 院中可真熱鬧,春花似錦飘痛、人聲如沸珊膜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽车柠。三九已至,卻和暖如春塑猖,著一層夾襖步出監(jiān)牢的瞬間堪遂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工萌庆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人币旧。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓践险,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子巍虫,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容

  • 背景 項目使用到了一些第三方平臺的登錄彭则、分享、支付功能占遥,包括了微信俯抖、微博、QQ平臺登錄分享和支付寶瓦胎、微信平臺的支付...
    軟件iOS開發(fā)閱讀 505評論 0 1
  • 第一篇第二篇大概是把下載圖片緩存圖片的這個邏輯走完了芬萍,里面涉及好多類。 羅列一下 UIView+WebCache ...
    充滿活力的早晨閱讀 748評論 0 1
  • iOS開發(fā)系列--網絡開發(fā) 概覽 大部分應用程序都或多或少會牽扯到網絡開發(fā)搔啊,例如說新浪微博柬祠、微信等,這些應用本身可...
    lichengjin閱讀 3,661評論 2 7
  • iOS 開發(fā)支付篇 隨著互聯(lián)網的發(fā)展负芋,電商平臺已經成為人們的習慣一種生活方式漫蛔,電商個人認為站在開發(fā)的角度看,也就多...
    fc4e54758f8d閱讀 7,885評論 11 56
  • 技術無極限旧蛾,從菜鳥開始莽龟,從源碼開始。 由于公司目前項目還是用OC寫的項目锨天,沒有升級swift 所以暫時SDWebI...
    充滿活力的早晨閱讀 12,649評論 0 2