支付__支付寶App支付接入流程(一)

不理解支付功能集成的什么商戶端贱纠,用戶端复哆,支付平臺端沒關(guān)系猬错,本篇以本人集成支付寶已經(jīng)成功了為例饥漫,解讀支付寶的SDK集成流程:
一般任何的技術(shù)學(xué)習(xí)都要先由Demo逐步去學(xué)習(xí):
本篇就一支付寶的Demo為例教您如何快速集成犀变!
親測可用妹孙,抓緊學(xué)習(xí)吧!

本篇目錄:
一.導(dǎo)入對應(yīng)的庫
二.快速接入方式:
三.注意事項(xiàng):

一.導(dǎo)入對應(yīng)的庫

1.導(dǎo)入以下系統(tǒng)庫
在Build Phases選項(xiàng)卡的Link Binary With Libraries中获枝,增加以下依賴:

// 支付寶SDK依賴的
libc++.tbd
libz.tbd
SystemConfiguration.framework
CoreTelephony.framework
QuartzCore.framework
CoreText.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
CoreMotion.framework
CFNetwork.framework

// 支付寶依賴的(要在導(dǎo)入AlipaySDK.framework庫之后才能加入)
AlipaySDK.framework

2.2個(gè).a靜態(tài)庫和1個(gè)framework 和一個(gè)bundle文件涕蜂,共計(jì)4個(gè)庫(在Demo中查找),如下:

libcrypto.a
libssl.a
AlipaySDK.framework
AlipaySDK. bundle

3.導(dǎo)入demo中的2個(gè)文件夾映琳,如下:

openssl
Util

導(dǎo)入效果如下:

導(dǎo)入的外庫机隙,共計(jì)6個(gè)文件.png

Build,編譯發(fā)現(xiàn)會報(bào)以下錯誤
報(bào)錯 : #include <openssl/asn1.h> 找不到
解決方案:
在Build Settings選項(xiàng)卡中搜索 header search添加新的路徑為$(PROJECT_DIR)/FarmAndAnimal/Vendor/AliPaySDK/
其中這里的AliPaySDK 指的是openssl 的上一級文件為止萨西,不一定是AliPaySDK有鹿, 切記!

二.快速接入方式:

  1. Appdelegate
    頭文件
#import  <AlipaySDK/AlipaySDK.h>

代碼(Code)
Appdelegate 中加入以下代碼谎脯,原封不動的葱跋!(這里以只集成支付寶的為例,后期總結(jié)集成所有的支付的處理辦法)

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    if ([url.host isEqualToString:@"safepay"]) {
        // 支付跳轉(zhuǎn)支付寶錢包進(jìn)行支付源梭,處理支付結(jié)果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        
        // 授權(quán)跳轉(zhuǎn)支付寶錢包進(jìn)行支付娱俺,處理支付結(jié)果
        [[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(@"授權(quán)結(jié)果 authCode = %@", authCode?:@"");
        }];
    }
    return YES;
}

// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"safepay"]) {
        // 支付跳轉(zhuǎn)支付寶錢包進(jìn)行支付,處理支付結(jié)果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        
        // 授權(quán)跳轉(zhuǎn)支付寶錢包進(jìn)行支付废麻,處理支付結(jié)果
        [[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(@"授權(quán)結(jié)果 authCode = %@", authCode?:@"");
        }];
    }
    return YES;
}

2.在要支付的功能類中導(dǎo)入以下代碼

頭文件:

#import "RSADataSigner.h"
#import <AlipaySDK/AlipaySDK.h>

代碼(Code):

// NOTE: 調(diào)用支付結(jié)果開始支付
//應(yīng)用注冊scheme,在AliSDKDemo-Info.plist定義URL types
 NSString *appScheme = @"FarmBB";
 [[AlipaySDK defaultService] payOrder:result.data fromScheme:appScheme callback:^(NSDictionary * resultDic) {
                        NSLog(@"reslut = %@",resultDic);
                    }];

注意:2個(gè)參數(shù)解釋:
在請求訂單成功后荠卷,支付寶返回一坨字符串,如上為result.data 烛愧,以及支付成功后回調(diào)到自己應(yīng)用的標(biāo)示為appScheme 油宜,然后按照上面的進(jìn)行傳遞,在resultDic 中接受是否支付成功怜姿,如下:

 NSString *resultStatus = resultDic[@"resultStatus"];
            NSString *errStr = resultDic[@"memo"];
            switch (resultStatus.integerValue) {
                case 9000:// 成功
                    break;
                case 6001:// 取消
                    break;
                default:
                    break;
            }

3.修改urlSchemes,按照如下圖所示慎冤,添加回調(diào)的url schemes ,注意要同上面的appScheme 保持一致,這樣可以保證支付成功還是失敗都能回到我的應(yīng)用中沧卢。

修改我的urlSchemes.png

三.注意事項(xiàng):

1.報(bào)錯的原理處理

#include <openssl/asn1.h> 找不到蚁堤,原因是因?yàn)闆]有找到對應(yīng)的路徑,注意這里是<> 會從根目錄去尋找但狭,所
以如果設(shè)置路徑到 openssl的上一級就可以找到披诗,就解決了這個(gè)報(bào)錯撬即!

2.Appdelegate中的方法解釋:
下面的方法iOS9之前跳到支付寶返回判斷是否支付成功,或者訂單已經(jīng)下了藤巢,但是還沒有支付搞莺,就在這個(gè)方法中處理息罗!

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation

下面的方法iOS9之后跳到支付寶返回判斷是否支付成功掂咒,或者訂單已經(jīng)下了,但是還沒有支付迈喉,就在這個(gè)方法中處理

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options

3.支付流程說明:

(1).首先由客戶端發(fā)出下訂單的請求--->我們的服務(wù)端響應(yīng)并把自己的請求返回訂單信息绍刮,說明下訂單成功!
(2).其次客戶端繼續(xù)把服務(wù)端返回的字符串以及自己的appScheme 發(fā)給支付寶的客戶端App --->調(diào)起支付寶的客戶端(或者H5網(wǎng)頁)--->客戶端付款完成 --->支付寶把信息發(fā)給--->支付寶服務(wù)端 --->支付寶服務(wù)端返回支付情況給支付寶客戶端
(3).支付寶客戶端告知我們的商家App--->商家App顯示是否支付成功
(4).同時(shí)支付寶服務(wù)端會異步通知我們的商家服務(wù)端App告知是否支付成功

附上交易的圖片如下:


支付寶交易流程圖.png

4.一定要記得修改urlSchemes
后期會把微信支付挨摸,銀聯(lián)銀聯(lián)支付等以及此三者的對接等寫一個(gè)完整的Demo整理下孩革,以供學(xué)習(xí)!

附上支付寶iOS端集成流程得运,貌似沒什么用膝蜈!
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.sFUG6d&treeId=204&articleId=105295&docType=1

有什么問題,可以加QQ:1824496534熔掺,備注:支付
歡迎相互指導(dǎo)饱搏,一起進(jìn)步!
----- 來自DaviD

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末置逻,一起剝皮案震驚了整個(gè)濱河市推沸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌券坞,老刑警劉巖鬓催,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異恨锚,居然都是意外死亡宇驾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門猴伶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飞苇,“玉大人,你說我怎么就攤上這事蜗顽〔伎ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵雇盖,是天一觀的道長忿等。 經(jīng)常有香客問我,道長崔挖,這世上最難降的妖魔是什么贸街? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任庵寞,我火速辦了婚禮,結(jié)果婚禮上薛匪,老公的妹妹穿的比我還像新娘捐川。我一直安慰自己,他們只是感情好逸尖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布古沥。 她就那樣靜靜地躺著,像睡著了一般娇跟。 火紅的嫁衣襯著肌膚如雪岩齿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天苞俘,我揣著相機(jī)與錄音盹沈,去河邊找鬼。 笑死吃谣,一個(gè)胖子當(dāng)著我的面吹牛乞封,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岗憋,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肃晚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了澜驮?” 一聲冷哼從身側(cè)響起陷揪,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杂穷,沒想到半個(gè)月后悍缠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耐量,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年飞蚓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廊蜒。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趴拧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出山叮,到底是詐尸還是另有隱情著榴,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布屁倔,位于F島的核電站脑又,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜问麸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一往衷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧严卖,春花似錦席舍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疟呐,卻和暖如春脚曾,著一層夾襖步出監(jiān)牢的瞬間东且,已是汗流浹背启具。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留珊泳,地道東北人鲁冯。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像色查,于是被迫代替她去往敵國和親薯演。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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