iOS客戶端開發(fā)之集成支付寶

?一、軟硬件環(huán)境

類型:移動(dòng)支付
目標(biāo):給公司的App集成支付寶付款功能
開發(fā)環(huán)境:OSX 10.11, Xcode7.1,
SDK:支付寶錢包支付接口開發(fā)包2.0標(biāo)準(zhǔn)版

查看移動(dòng)支付的相關(guān)說明文檔牺荠、下載SDK和Demo返咱,點(diǎn)這里

二赋铝、集成SDK

step:1: 在工程目錄下新建一個(gè)文件夾,存放支付寶相關(guān)SDK和工具類文件。
step:2: 將SDK中的文件拷貝至新建的文件夾:
Util疫诽、openssl、libssl.a、libcrypto.a奇徒、AlipaySDK.bundle雏亚、AlipaySDK.framework、APAuthV2Info.h摩钙、APAuthV2Info.m罢低、Order.h、Order.m
step:3: 將該文件夾拖入工程胖笛;
step:4: 添加框架SystemConfiguration.framework网持;
step:5: 此時(shí)會(huì)遇到編譯報(bào)錯(cuò)的情況,根據(jù)報(bào)錯(cuò)情況添加相應(yīng)的頭文件即可长踊;
??.在Util文件夾下base64.h中添加 #import<Foundation/Foundation.h>功舀;
??.在Util文件夾下openssl_wrapper.h中添加#import<Foundation/Foundation.h>;
??.如果遇到Error : Lexical or Preprocessor Issue 'openssl/asn1.h' file not found身弊,在工程的Building Setting中查找Framework Search Paths辟汰,添加$(PROJECT_DIR)/AliSDK2_2_3或者$(SRCROOT)/AliSDK2_3_3,其中AliSDK2_3_3為剛才新建的文件夾名阱佛。
??.如遇到其它報(bào)錯(cuò)信息帖汞,請(qǐng)百度或Google自行解決。

step:6: 設(shè)置?跳轉(zhuǎn)參數(shù)
如果手機(jī)裝有支付寶客戶端凑术,則支付時(shí)自動(dòng)調(diào)用該客戶端翩蘸,如果沒有安裝,則調(diào)用網(wǎng)頁(yè)版的支付頁(yè)面淮逊。
在支付完成后根據(jù)跳轉(zhuǎn)參數(shù)回到之前的應(yīng)用鹿鳖。
設(shè)置方法:在工程的Target里找到Info - URL Type,點(diǎn)+號(hào)新建壮莹,在URL Schemes里將App的identifier添加進(jìn)來翅帜,然后在AppDelegate中添加如下代碼:

#pragma mark ?跳轉(zhuǎn)至支付寶App或網(wǎng)頁(yè)版支付寶
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication
annotation:(id)annotation {
    //跳轉(zhuǎn)至支付寶App進(jìn)行支付,處理支付結(jié)果
    [[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) {
    #warning 是一坑命满,請(qǐng)注意
    //這里不用寫任何代碼涝滴,支付結(jié)果會(huì)在下面的代碼中進(jìn)行處理
}];
    returnYES;
}

step:7: 在調(diào)用支付寶App或網(wǎng)頁(yè)版支付寶進(jìn)行支付的viewController里做如下操作:

#pragma mark 支付核心代碼
- (void)alipay {
    //獲得公鑰私鑰的方法在支付寶相關(guān)文檔里有說明

    //合作者身份(PID)2088開頭的16位數(shù)字。
    NSString *partner = @"";
    //支付寶賬號(hào)
    NSString *seller = @"";
    //RSA私鑰轉(zhuǎn)化的pkcs8格式私鑰
    NSString *privateKey = @"";
    //支付寶提供的公鑰
    NSString *publicKey = @"";
    
    //服務(wù)器異步通知頁(yè)面
#warning TODO:需更改
    NSString *AlipayNotifyURL = @"";
    
    /*
     *生成訂單信息及簽名
     */
    //將商品信息賦予AlixPayOrder的成員變量
    Order *order = [[Order alloc] init];
    order.partner = partner;
    order.seller = seller;
#warning TODO:服務(wù)器提供相關(guān)交易信息
    order.tradeNO = [self generateTradeNO]; //訂單ID(由商家自行制定)
    order.productName = self.product.subject; //商品標(biāo)題
    order.productDescription = self.product.body; //商品描述
    order.amount = [NSString stringWithFormat:@"%.2f",self.product.price]; //商品價(jià)格
    order.notifyURL =  @"http://www.xxx.com"; //回調(diào)URL
    
    order.service = @"mobile.securitypay.pay";
    order.paymentType = @"1";           //默認(rèn)是1
    order.inputCharset = @"utf-8";
    order.itBPay = @"30m";              //訂單過期時(shí)間:30分鐘
    order.showUrl = @"m.alipay.com";
    
    //需要告訴支付寶剛才給該App定義的URL Types胶台,以便跳轉(zhuǎn)回來的時(shí)候使用
    NSString *appScheme = @"test";
    
    //將商品信息拼接成支付寶要求的字符串(自動(dòng)調(diào)用支付寶提供的類來實(shí)現(xiàn))
    NSString *orderSpec = [order description];
    
    //獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:orderSpec];
    
    //將簽名成功字符串格式化為訂單字符串,請(qǐng)嚴(yán)格按照該格式
    NSString *orderString = nil;
    if (signedString != nil) {
        orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                       orderSpec, signedString, @"RSA"];
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            #warning TODO: 以下為自定義內(nèi)容歼疮,用?于處理支付結(jié)果
            //支付寶返回結(jié)果
            NSDictionary *result = [self.paymentResult handleResultWithDictionary:resultDic andPublicKey:publicKey];
            
            //如果返回結(jié)果為真,則隱藏支付按鈕诈唬,并顯示返回首頁(yè)按鈕
            if ([result[@"result"] boolValue] == YES) {
                //更新界面label文字
                [self.paymentResultLabel setText:result[@"info"] textColor:[UIColor myGreenColor]];
                [self hidePaymentResultControll:NO];
            } else {
                 [self.paymentResultLabel setText:result[@"result"] textColor:[UIColor myRedColor] fontSize:18.0];
            }
        }];
    }
}

#pragma mark 隨機(jī)生成訂單號(hào)
#warning TODO:在與服務(wù)器正式調(diào)試時(shí)記得刪除
- (NSString *)generateTradeNO
{
    static int kNumber = 15;
    
    NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    NSMutableString *resultStr = [[NSMutableString alloc] init];
    for (int i = 0; i < kNumber; i++) {
        unsigned index = arc4random() % [sourceStr length];
        NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];
        [resultStr appendString:oneStr];
    }
    return resultStr;
}

參考文章:

  1. iOS支付寶2.3.3SDK集成開發(fā)(Swift1.2)
  1. 集成支付寶錢包支付iOS SDK的方法與經(jīng)驗(yàn)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末韩脏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铸磅,更是在濱河造成了極大的恐慌赡矢,老刑警劉巖杭朱,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吹散,居然都是意外死亡弧械,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門空民,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刃唐,“玉大人,你說我怎么就攤上這事界轩』ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵浊猾,是天一觀的道長(zhǎng)抖甘。 經(jīng)常有香客問我,道長(zhǎng)与殃,這世上最難降的妖魔是什么单山? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任碍现,我火速辦了婚禮幅疼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昼接。我一直安慰自己爽篷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布慢睡。 她就那樣靜靜地躺著逐工,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漂辐。 梳的紋絲不亂的頭發(fā)上泪喊,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音髓涯,去河邊找鬼袒啼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纬纪,可吹牛的內(nèi)容都是我干的蚓再。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼包各,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼摘仅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起问畅,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤娃属,失蹤者是張志新(化名)和其女友劉穎六荒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膳犹,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恬吕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了须床。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铐料。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖豺旬,靈堂內(nèi)的尸體忽然破棺而出钠惩,到底是詐尸還是另有隱情,我是刑警寧澤族阅,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布篓跛,位于F島的核電站,受9級(jí)特大地震影響坦刀,放射性物質(zhì)發(fā)生泄漏愧沟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一鲤遥、第九天 我趴在偏房一處隱蔽的房頂上張望沐寺。 院中可真熱鬧,春花似錦盖奈、人聲如沸混坞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)究孕。三九已至,卻和暖如春爹凹,著一層夾襖步出監(jiān)牢的瞬間厨诸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工禾酱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留微酬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓宇植,卻偏偏與公主長(zhǎng)得像得封,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子指郁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 實(shí)現(xiàn)支付寶支付的準(zhǔn)備工作: 1.向支付寶簽約忙上,成為支付寶的商戶 簽約完成后,支付寶會(huì)提供一些必要的數(shù)據(jù)給我們 商戶...
    Anson楊春安閱讀 8,201評(píng)論 0 6
  • iOS支付 iOS支付分為兩類闲坎,第三方支付和應(yīng)用內(nèi)支付(內(nèi)購(gòu))疫粥。 第三方支付包括:支付寶支付茬斧、微信支付、銀聯(lián)支付梗逮、...
    請(qǐng)輸入賬號(hào)名閱讀 6,196評(píng)論 3 22
  • 項(xiàng)目中要用到支付功能项秉,需要支付寶,微信慷彤,銀聯(lián)三大支付娄蔼,所以打算總結(jié)一下,寫兩篇文章底哗,方便以后的查閱岁诉, 大家在做的時(shí)...
    Ke_Wang閱讀 24,100評(píng)論 17 121
  • 作者:mjn 《羈絆者》是TRIGGER繼《雙斬少女》之后第二部完全原創(chuàng)動(dòng)畫“涎。《花名》涕癣、《心叫》等大量青春劇腳本岡...
    AnimeTamashii閱讀 1,042評(píng)論 0 0
  • 經(jīng)歷了一場(chǎng)組織混亂的活動(dòng)后,心情低落前标,沮喪掛在臉上坠韩,這本來應(yīng)該是初入職場(chǎng)的人才應(yīng)該有的反應(yīng),而我今天又掛相了炼列。只搁。。...
    韌針小郭閱讀 165評(píng)論 0 0