2018最新支付寶SDK集成和使用

首先要說(shuō)明的是支付寶SDK的使用,官方建議,數(shù)據(jù)加密和下單等操作盡量由商戶后臺(tái)服務(wù)器完成,這樣才能保證財(cái)產(chǎn)和私密信息的安全性。因此本文介紹內(nèi)容,是APP和自己公司后臺(tái)服務(wù)器一起協(xié)作完成支付寶支付的方法。

一、首先需要介紹的是:支付寶的接入(可參考官方文檔

還是簡(jiǎn)單給大家理一下流程,(1)在螞蟻金服后臺(tái)創(chuàng)建應(yīng)用,拿到APPID,給后臺(tái)開(kāi)發(fā)人員(2)添加APP支付功能(3)簽約商戶號(hào),簽約有一個(gè)審核時(shí)間,這中間可能會(huì)遇到各種問(wèn)題,(4)配置秘鑰,分別是公鑰和私鑰,這個(gè)讓后臺(tái)人員去弄

下載SDKhttps://docs.open.alipay.com/54/104509拖入工程里面。

手動(dòng)導(dǎo)入靜態(tài)庫(kù),然后command + B 編譯一下,看報(bào)不報(bào)錯(cuò)。
QQ20180204-143004.png

二、接下來(lái)給大家介紹項(xiàng)目里面的配置。

(1)第一步點(diǎn)擊工程名——>第二步點(diǎn)擊info——>第三步在URL Types里面添加一個(gè)支付寶返回URL type.如圖所示:

QQ20180204-115756.png

(2)在plist文件中確認(rèn)URL是否添加成功。

QQ20180204-115933.png

(3)在需要用到支付的ViewController里面添加以下代碼:

///支付寶sdk
#import <AlipaySDK/AlipaySDK.h>
#define AppScheme  @"ShouNew"

注意上面三條的Scheme一定要保持一致,不然可能導(dǎo)致支付成功后不能返回原APP。

三、支付寶支付流程及代碼體現(xiàn)

(1)支付寶流程圖:

QQ20180204-132527.png

簡(jiǎn)單解釋一下:

第一步:APP向自己公司服務(wù)器發(fā)起下單請(qǐng)求(下單的時(shí)候要把商品的各項(xiàng)信息傳給服務(wù)器,比如價(jià)格,數(shù)量,商品名等),自己公司服務(wù)器向支付寶服務(wù)器統(tǒng)一下單,然后返回訂單號(hào)給用戶。

第二步:APP拿訂單號(hào)向服務(wù)器請(qǐng)求加密后的訂單信息,用于向支付寶服務(wù)器發(fā)起請(qǐng)求。

類似于這樣一串?dāng)?shù)據(jù)
"alipayInfo":"partner=2088321034383926&seller_id=717449318@qq.com&out_trade_no=r2017051922165642529&subject=首牛云控APP充值-¥10.0&body=首牛云控APP充值-¥10.0&total_fee=10.0&notify_url=http://*******.cn/*********/alipayNotify.do&service=mobile.securitypay.pay&payment_type=1&_input_charset=utf-8&it_b_pay=30m&sign=hS%2BJNs3FT9Sx0U2CGIK58xs6Cdjx%2FsvBqw18Ah%2BwrtBUdNjQnqP99fjW4YK6JxjuRG5YocZmS5ZfcrtnXq7fmq9jf%2Fj%2Fz858CBBWPxtoGQZuEAPy91q8vbYYHkSgwO8qM8mtCTast9LjXyJ2un%2B6nPhNxHN0cX1%2FZxUMWwwmQQc%3D&sign_type=RSA",這是后臺(tái)用支付寶提供的RSA加密算法加密后的數(shù)據(jù)。

第三步:通過(guò)SDK向支付寶服務(wù)器發(fā)起支付請(qǐng)求。發(fā)起請(qǐng)求的時(shí)候要帶上APPScheme,用于返回APP支付結(jié)果回調(diào)。

第四步:完成支付后,支付寶會(huì)返回一個(gè)字典給APP,這個(gè)里面就有支付結(jié)果,但是這并不能作為支付成功與否的判斷結(jié)果,因?yàn)椋@個(gè)結(jié)果只是APP端成功,所以還要將這個(gè)字典內(nèi)容轉(zhuǎn)成json傳給服務(wù)器,查詢服務(wù)器支付結(jié)果,可能有朋友會(huì)問(wèn),服務(wù)器支付結(jié)果從何而來(lái),其實(shí)在APP端完成支付后,支付寶會(huì)根據(jù)這個(gè)訂單異步通知商戶服務(wù)器,讓服務(wù)器記錄這個(gè)訂單的支付結(jié)果。中間任何一環(huán)斷了,這個(gè)訂單都不算支付成功。

最后根據(jù)服務(wù)器查詢到的訂單支付結(jié)果來(lái)反應(yīng)給用戶。

接下來(lái)我們看代碼實(shí)現(xiàn):

首先是下單:

NSString *urlStr = @"orderz.do?method=submitOrderz";
//這兒需要包裝的參數(shù)由服務(wù)器來(lái)定
NSDictionary *dic = @{@"color":@"怪味胡豆60克",@"price":@"0.01",@"mallproductId":@"19",@"type" : @"1",@"num":@"1",@"jSessionId":@"這兒填寫(xiě)你們APP的唯一登錄標(biāo)示符,也可以說(shuō)是token",@"locationId": @"94"
                      };
[[SNNetWorkTools sharedTools]requestWithUrl:urlStr withRequestStyle:POST parameters:dic callback:^(id data, NSError *error) {
    NSNumber *num = data[@"statusCode"];
    if (codeNum) {
        self.orderNum = data[@"data"][@"orderzNo"];
        [self payWithAlipay];
    }
}];

向服務(wù)器拿到加密信息,并向支付寶發(fā)起支付

-(void)payWithAlipay{
    NSString *str = @"pay.do?method=getAlipayInfo";
    NSDictionary *para = @{@"orderzNo":self.orderNum,@"jSessionId":@"這兒填寫(xiě)你們APP的唯一登錄標(biāo)示符,也可以說(shuō)是token"};
    [[SNNetWorkTools sharedTools]requestWithUrl:str withRequestStyle:GET parameters:para callback:^(id data, NSError *error) {
        NSNumber *num = data[@"statusCode"];
        if (codeNum) {
            NSString *orderStr = data[@"data"][@"alipayInfo"];
            // 應(yīng)用注冊(cè)scheme,在AliPayDemo-Info.plist定義URL types
            [[AlipaySDK defaultService]payOrder:orderStr fromScheme:AppScheme callback:^(NSDictionary *resultDic) {
            }];
        }
    }];
}

在viewDidLoad方法中注冊(cè)監(jiān)聽(tīng)支付結(jié)果的通知

//注冊(cè)通知-支付寶
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(dealALiPayResult:) name:@"ALiPayresult" object:nil];

在APPDelegate中接受支付寶返回的支付結(jié)果轉(zhuǎn)化成Json傳給服務(wù)器查詢支付結(jié)果

#pragma mark -- 支付回調(diào)方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    //支付寶支付回調(diào)
    if ([url.host isEqualToString:@"safepay"]) {
        //跳轉(zhuǎn)支付寶錢(qián)包進(jìn)行支付,處理支付結(jié)果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            //                NSLog(@"result = %@",resultDic);
            NSString *jsonStr = [self DataTOjsonString:resultDic];
            //將支付寶返回的dictionary轉(zhuǎn)成json再傳給服務(wù)器,查詢服務(wù)器支付狀態(tài)。
            NSString *urlStr = @"pay.do?method=checkAlipayOrderz";
            NSDictionary *para = @{@"data":jsonStr,@"jSessionId":@"這兒填寫(xiě)你們APP的唯一登錄標(biāo)示符,也可以說(shuō)是token"};
            [[SNNetWorkTools sharedTools]requestWithUrl:urlStr withRequestStyle:POST parameters:para callback:^(id data, NSError *error) {
            //發(fā)送通知,將支付結(jié)果傳給ViewController
                [[NSNotificationCenter defaultCenter] postNotificationName:@"ALiPayresult" object:data[@"data"][@"trade_state"]];
            }];
        }];
    }
    return false;
}
//字典轉(zhuǎn)Json
-(NSString*)DataTOjsonString:(id)object
{
    NSString *jsonString = nil;
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object options:NSJSONWritingPrettyPrinted error:&error];
    if (!jsonData) {
        NSLog(@"字典轉(zhuǎn)json錯(cuò)誤: %@", error);
    }else {
        jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    }
    return jsonString;
}

回到ViewController中實(shí)現(xiàn)通知監(jiān)聽(tīng)事件

#pragma mark --支付寶支付后查詢服務(wù)器訂單結(jié)果,展示給用戶
-(void)dealALiPayResult:(NSNotification*)notification{
    NSString *result = notification.object;
    NSLog(@"支付結(jié)果:%@",result);
    if ([result isEqualToString:@"9000"]) {
        NSLog(@"支付成功");
    }else if([result isEqualToString:@"6001"]){
        NSLog(@"支付失敗,中途取消");
    }else{
        NSLog(@"支付失敗,其他原因");
    }
}

這樣就完美實(shí)現(xiàn)了支付寶支付。抱歉,Demo就不提供了,因?yàn)樯婕肮舅矫苄畔ⅲ裕荒軒痛蠹业竭@兒了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,716評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,746評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,991評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,706評(píng)論 6 413
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,036評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,203評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,725評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,451評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,677評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,857評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,266評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,606評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,407評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,643評(píng)論 2 380

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