iOS支付寶集成(傻瓜版)

1勾习、下載支付寶SDK

2苫幢、進入支付平臺注冊應用

3盹憎、獲取支付相關的 '私鑰' 和 '密鑰'

下載macOSX版本 根據圖示走


Paste_Image.png
Paste_Image.png

將生成的公鑰添加到你支付寶平臺注冊

Paste_Image.png

而你APP中需要的私鑰就這個

Paste_Image.png

但是需要文本編輯器打開才可以看到你的私鑰

Paste_Image.png

中間這一段就是你要寫入你APP的私鑰

Paste_Image.png

4拒贱、集成支付寶SDK


新建一個項目 導入這8個文件
然后根據支付寶官方文檔導入相關依賴的庫

Paste_Image.png

新建PCH文件 將這個頭文件放進去
設置APP的ATS

Paste_Image.png

如果出現這種錯誤,就在錯誤的文件中添加 #import <Foundation/Foundation.h>

Paste_Image.png

這是openssl文件夾頭文件鏈接問題,如果openssl文件夾隨意拉進項目中崔梗,即使添加頭文件鏈接夜只,也可能解決不了此問題,

這也是問什么一開始就將所需要的文件放到一個新建文件夾中再添加到項目中的原因蒜魄。

解決辦法:Targets->Build Settings->Header Search Path中添加1中建立的aliPaySDK文件夾的路徑(拖拽此文件夾至輸入框即可)

Paste_Image.png

現在你進行編譯,應該是可以通過的.

5扔亥、支付代碼

ViewController.m

#pragma mark -
#pragma mark   ==============點擊訂單模擬支付行為==============
//
//選中商品調用支付寶極簡支付
//
- (void)doAlipayPay
{
    //重要說明
    //這里只是為了方便直接向商戶展示支付寶的整個支付流程;所以Demo中加簽過程直接放在客戶端完成谈为;
    //真實App里砸王,privateKey等數據嚴禁放在客戶端,加簽過程務必要放在服務端完成峦阁;
    //防止商戶私密數據泄露,造成不必要的資金損失耘成,及面臨各種安全風險榔昔;
/*============================================================================*/
/*=======================需要填寫商戶app申請的===================================*/
/*============================================================================*/
    NSString *appID = @"這里填寫你在支付寶平臺注冊的應用APPID";
    NSString *privateKey = @"這里填寫你的私鑰(就是用文本編輯器打開的那一大串)";
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
 
    //partner和seller獲取失敗,提示     (這里判斷你有沒有填寫appID和私鑰)
    if ([appID length] == 0 ||
        [privateKey length] == 0)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
                                                        message:@"缺少appId或者私鑰。"
                                                       delegate:self
                                              cancelButtonTitle:@"確定"
                                              otherButtonTitles:nil];
        [alert show];
        return;
    }
    
(下面就是一些訂單信息的設置)

    /*
     *生成訂單信息及簽名
     */
    //將商品信息賦予AlixPayOrder的成員變量
    Order* order = [Order new];
    
    // NOTE: app_id設置
    order.app_id = appID;
    
    // NOTE: 支付接口名稱
    order.method = @"alipay.trade.app.pay";
    
    // NOTE: 參數編碼格式
    order.charset = @"utf-8";
    
    // NOTE: 當前時間點
    NSDateFormatter* formatter = [NSDateFormatter new];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    order.timestamp = [formatter stringFromDate:[NSDate date]];
    
    // NOTE: 支付版本
    order.version = @"1.0";
    
    // NOTE: sign_type設置
    order.sign_type = @"RSA";
    
    // NOTE: 商品數據
    order.biz_content = [BizContent new];
    order.biz_content.body = @"我是測試數據";
    order.biz_content.subject = @"1";
    order.biz_content.out_trade_no = [self generateTradeNO]; //訂單ID(由商家自行制定)
    order.biz_content.timeout_express = @"30m"; //超時時間設置
    order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品價格
    
    //將商品信息拼接成字符串
    NSString *orderInfo = [order orderInfoEncoded:NO];
    NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
    NSLog(@"orderSpec = %@",orderInfo);
    

**********************這里需要特別注意,仔細看注釋*************************
    // NOTE: 獲取私鑰并將商戶信息簽名瘪菌,外部商戶的加簽過程請務必放在服務端撒会,防止公私鑰數據泄露;
    //       需要遵循RSA簽名規(guī)范师妙,并將簽名字符串base64編碼和UrlEncode
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:orderInfo];
    
    // NOTE: 如果加簽成功诵肛,則繼續(xù)執(zhí)行支付
    if (signedString != nil) {
        //應用注冊scheme,在AliSDKDemo-Info.plist定義URL types
        NSString *appScheme = @"alisdkdemo";
        
        // NOTE: 將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
        NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",
                                 orderInfoEncoded, signedString];
        

(這里就是開始正常的支付了)
        // NOTE: 調用支付結果開始支付
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];
    }
}
由于暫時還沒有PID 所以這一部分還沒有去做.以后會完成的
#pragma mark -
#pragma mark   ==============點擊模擬授權行為==============

- (void)doAlipayAuth
{
    //重要說明
    //這里只是為了方便直接向商戶展示支付寶的整個支付流程;所以Demo中加簽過程直接放在客戶端完成默穴;
    //真實App里怔檩,privateKey等數據嚴禁放在客戶端褪秀,加簽過程務必要放在服務端完成;
    //防止商戶私密數據泄露薛训,造成不必要的資金損失媒吗,及面臨各種安全風險;
    /*============================================================================*/
    /*=======================需要填寫商戶app申請的===================================*/
    /*============================================================================*/
    NSString *pid = @"";
    NSString *appID = @"";
    NSString *privateKey = @"";
    /*============================================================================*/
    /*============================================================================*/
    /*============================================================================*/
    
    //pid和appID獲取失敗,提示
    if ([pid length] == 0 ||
        [appID length] == 0 ||
        [privateKey length] == 0)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
                                                        message:@"缺少pid或者appID或者私鑰乙埃。"
                                                       delegate:self
                                              cancelButtonTitle:@"確定"
                                              otherButtonTitles:@"呵呵",nil];
        [alert show];
        return;
    }
    
    //生成 auth info 對象
    APAuthV2Info *authInfo = [APAuthV2Info new];
    authInfo.pid = pid;
    authInfo.appID = appID;
    
    //auth type
    NSString *authType = [[NSUserDefaults standardUserDefaults] objectForKey:@"authType"];
    if (authType) {
        authInfo.authType = authType;
    }
    
    //應用注冊scheme,在AlixPayDemo-Info.plist定義URL types
    NSString *appScheme = @"alisdkdemo";
    
    // 將授權信息拼接成字符串
    NSString *authInfoStr = [authInfo description];
    NSLog(@"authInfoStr = %@",authInfoStr);
    
    // 獲取私鑰并將商戶信息簽名,外部商戶可以根據情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:authInfoStr];
    
    // 將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
    if (signedString.length > 0) {
        authInfoStr = [NSString stringWithFormat:@"%@&sign=%@&sign_type=%@", authInfoStr, signedString, @"RSA"];
        [[AlipaySDK defaultService] auth_V2WithInfo:authInfoStr
                                         fromScheme:appScheme
                                           callback:^(NSDictionary *resultDic) {
                                               NSLog(@"result = %@",resultDic);
                                               // 解析 auth code
                                               NSString *result = resultDic[@"result"];
                                               NSString *authCode = nil;
                                               if (result.length>0) {
                                                   NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                                                   for (NSString *subResult in resultArr) {
                                                       if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                                                           authCode = [subResult substringFromIndex:10];
                                                           break;
                                                       }
                                                   }
                                               }
                                               NSLog(@"授權結果 authCode = %@", authCode?:@"");
                                           }];
    }
}

AppDelegate.m

支付寶app支付完成以后回到APP會調用的方法

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    if ([url.host isEqualToString:@"safepay"]) {
        // 支付跳轉支付寶錢包進行支付闸英,處理支付結果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        

        // 授權跳轉支付寶錢包進行支付,處理支付結果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            // 解析 auth code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length>0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"授權結果 authCode = %@", authCode?:@"");
        }];
    }
    return YES;
}

個人還在學習中...要是有什么不對的地方歡迎指出.
沒有寫完,還會繼續(xù)寫下去的....

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末介袜,一起剝皮案震驚了整個濱河市甫何,隨后出現的幾起案子,更是在濱河造成了極大的恐慌遇伞,老刑警劉巖辙喂,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異赃额,居然都是意外死亡加派,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門跳芳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芍锦,“玉大人,你說我怎么就攤上這事飞盆÷α穑” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵吓歇,是天一觀的道長孽水。 經常有香客問我,道長城看,這世上最難降的妖魔是什么女气? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮测柠,結果婚禮上炼鞠,老公的妹妹穿的比我還像新娘。我一直安慰自己轰胁,他們只是感情好谒主,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赃阀,像睡著了一般霎肯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天观游,我揣著相機與錄音搂捧,去河邊找鬼。 笑死备典,一個胖子當著我的面吹牛异旧,可吹牛的內容都是我干的。 我是一名探鬼主播提佣,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吮蛹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拌屏?” 一聲冷哼從身側響起潮针,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倚喂,沒想到半個月后每篷,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡端圈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年焦读,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舱权。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡矗晃,死狀恐怖,靈堂內的尸體忽然破棺而出宴倍,到底是詐尸還是另有隱情张症,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布鸵贬,位于F島的核電站俗他,受9級特大地震影響,放射性物質發(fā)生泄漏阔逼。R本人自食惡果不足惜兆衅,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗜浮。 院中可真熱鬧羡亩,春花似錦、人聲如沸周伦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽专挪。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寨腔,已是汗流浹背速侈。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留迫卢,地道東北人倚搬。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像乾蛤,于是被迫代替她去往敵國和親每界。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容