集成支付寶支付功能

作為iOS開發(fā)者猫妙,雖然泡沫的式的發(fā)展并不是我們想看到的串绩,但是,就目前來(lái)看看枉圃,我們的能力和經(jīng)驗(yàn)依舊很重要9睢!(突然發(fā)現(xiàn)這是完全不搭邊的兩句話....)在很多時(shí)候我們所被問(wèn)到的就是:做過(guò)支付嗎孽亲?做過(guò)地圖嗎坎穿?做過(guò)視頻嗎?做過(guò)流媒體嗎返劲?做過(guò)通訊嗎玲昧?使用過(guò)融云嗎?使用過(guò)環(huán)信嗎篮绿?使用過(guò)網(wǎng)易云信嗎孵延?會(huì)做游戲嗎?懂得socket嗎亲配?懂得HTTP尘应、TCP/IP、UDP嗎吼虎?知道多線程嗎犬钢?會(huì)使用NSOperation、GCD思灰、NSThread嗎娜饵?知道各種dispath_XXX嗎?......木有9俦病!遍坟!不會(huì)H凇!OK愿伴,你可以回去了......即使是在任何情況下肺魁,我們都應(yīng)該積極的去學(xué)習(xí),去面對(duì)問(wèn)題隔节,哪怕是我們的付出沒(méi)有回報(bào)鹅经,那你就趕緊跳槽<徘骸!或者瘾晃,繼續(xù)提高自己贷痪,你的優(yōu)秀會(huì)潛意識(shí)的散發(fā)出來(lái),別人也會(huì)看在眼里蹦误,嫉在心里劫拢。
言歸正傳,下面是支付寶的集成:

一强胰、首先介紹產(chǎn)品流程:(開發(fā)者可以看文檔舱沧,十分詳細(xì),比微信強(qiáng)太多了)

《支付寶開放品臺(tái)文檔中心》
總的來(lái)說(shuō)分為兩種情況:
(1)用戶已安裝支付寶支付流程偶洋。已經(jīng)安裝app后熟吏,可以直接調(diào)起app進(jìn)行支付。輸入密碼玄窝,完成支付牵寺。

用戶已安裝支付寶支付流程

(2)用戶未安裝支付寶支付流程。未安裝app哆料,則需要調(diào)起h5界面進(jìn)行支付缸剪。需要:輸入校驗(yàn)碼->選擇支付方式->輸入支付密碼->完成支付。

用戶未安裝支付寶支付流程
未添加銀行卡
添加銀行卡
二东亦、第一步:務(wù)必在開放平臺(tái)創(chuàng)建一個(gè)應(yīng)用

《App支付接入指引》
(1)創(chuàng)建應(yīng)用杏节。
(2)配置應(yīng)用。
(3)設(shè)計(jì)典阵。
(4)開發(fā)奋渔。
(5)調(diào)試應(yīng)用。
(6)上線應(yīng)用壮啊。

三嫉鲸、App支付快速接入。

《支付快速接入》

注意

此處問(wèn)題是有兩個(gè)版本:9.0之前歹啼、9.0之后玄渗。
老版本的樣式:

老版本

第一步:創(chuàng)建應(yīng)用并獲取APPID
第二步:配置密鑰
第三步:搭建和配置開發(fā)環(huán)境
需要集成客戶端SDK。
第四步:調(diào)用接口
注意事項(xiàng):


注意事項(xiàng)
其他的具體看開發(fā)文檔狸眼,一步一步的進(jìn)行設(shè)置即可藤树。
在下載的SDK(demo)中有兩個(gè)文件夾、AlipaySDK.bundle拓萌、AlipaySDK.framework岁钓,這些東西需要導(dǎo)入到工程中。至于Order,則是模擬后臺(tái)支付“生成訂單信息及簽名”而使用的屡限。

上代碼:

//app_id設(shè)置(is:partner)
NSString *appID = @"2017010304820705"; 
//這是第二種生成私鑰的方法
NSString *rsa2PrivateKey = @"";
//這是第一種生成方法
NSString *rsaPrivateKey = @"";
官方文檔建議使 rsa2品嚣,因?yàn)楸容^安全。私鑰生成有兩個(gè):1024钧大、2048翰撑。同學(xué)們可以使用文檔提供的生成器進(jìn)行操作。如果 rsa2 沒(méi)有或者輸出為 null 時(shí)候拓型,就說(shuō)明生成錯(cuò)誤额嘿,這時(shí)候可以使用 rsaPrivateKey 進(jìn)行簽名。
/**
 *  生成訂單信息及簽名
 */
Order *order = [Order new];
//
order.app_id = appID;
//支付接口名稱
order.method = @"alipay.trade.app.pay";
//參數(shù)編碼格
order.charset = @"utf-8";
//設(shè)置時(shí)間
NSDateFormatter *formatter= [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//請(qǐng)求發(fā)送的時(shí)間
order.timestamp = [formatter stringFromDate:[NSDate date]];
//請(qǐng)求調(diào)用的接口版本劣挫,固定為:1.0
order.version = @"1.0";
//簽名類型
order.sign_type = (rsa2PrivateKey.length > 1)?@"RSA2":@"RSA";
//商品數(shù)據(jù)
order.biz_content = [BizContent new];
//(非必填項(xiàng))商品描述
order.biz_content.body = @"此物只應(yīng)天上有册养,人間哪得幾回聞";
//商品的標(biāo)題/交易標(biāo)題/訂單標(biāo)題/訂單關(guān)鍵字等。
order.biz_content.subject = @"一只草泥馬";
#warning 訂單號(hào)方法如下:generateTradeNO
//商戶網(wǎng)站唯一訂單號(hào)
order.biz_content.out_trade_no = [self generateTradeNO];
/**  
 *  該筆訂單允許的最晚付款時(shí)間压固,逾期將關(guān)閉交易球拦。
 *
 *  取值范圍:1m~15d m-分鐘,h-小時(shí)帐我,d-天坎炼,1c-當(dāng)天(1c-當(dāng)天的情況下,無(wú)論交易何時(shí)創(chuàng)建拦键,都在0點(diǎn)關(guān)閉)
 *  該參數(shù)數(shù)值不接受小數(shù)點(diǎn)谣光, 如1.5h,可轉(zhuǎn)換為90m芬为。
 */
order.biz_content.timeout_express = @"30m";
//訂單總金額萄金,單位為元,精確到小數(shù)點(diǎn)后兩位媚朦,取值范圍[0.01,100000000]
order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01];
/**
 *  獲取訂單信息串(將商品信息拼接成字符串)
 *
 *   bEncoded 訂單信息串中的各個(gè)value是否encode
 *   非encode訂單信息串氧敢,用于生成簽名
 *   encode訂單信息串 + 簽名,用于最終的支付請(qǐng)求訂單信息串
 */
NSString *orderInfo = [order orderInfoEncoded:NO];
//
NSString *orderinfoEncoded = [order orderInfoEncoded:YES];
//
NSLog(@"商品信息:%@", orderInfo);
// NOTE: 獲取私鑰并將商戶信息簽名询张,外部商戶的加簽過(guò)程請(qǐng)務(wù)必放在服務(wù)端孙乖,防止公私鑰數(shù)據(jù)泄露;
//       需要遵循RSA簽名規(guī)范份氧,并將簽名字符串base64編碼和UrlEncode
NSString *singedString = nil;           

簽名代碼如下:

#warning 這是新版本的簽名
RSADataSigner *singer = [[RSADataSigner alloc] initWithPrivateKey:((rsa2PrivateKey.length > 1) ? rsa2PrivateKey : rsaPrivateKey)];
//
if (rsa2PrivateKey.length > 1) {
    singedString = [singer signString:orderInfo withRSA2:YES];
}else {
    singedString = [singer signString:orderInfo withRSA2:NO];
}
// NOTE: 如果加簽成功唯袄,則繼續(xù)執(zhí)行支付
if (singedString != nil) {
    //應(yīng)用注冊(cè)scheme,在AliSDKDemo-Info.plist定義URL types
    NSString *appScheme = @"Payone";
    //將簽名成功字符串格式化為訂單字符串,務(wù)必嚴(yán)格按照格式
    NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@", orderinfoEncoded, singedString];
    // NOTE: 調(diào)用支付結(jié)果開始支付
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"開始支付:%@", resultDic);
    }];
}


#warning 這是老版本的簽名
//獲取私鑰并將商戶信息簽名,外部商戶可以根據(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) {
        NSLog(@"reslut = %@",resultDic);
    }];
}

訂單號(hào)生成方法:
- (NSString *)generateTradeN {
static int kNumber = 15;
NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSMutableString *resultStr = [[NSMutableString alloc] init];
srand((unsigned)time(0));
for (int i = 0; i < kNumber; i++) {
unsigned index = rand() % [sourceStr length];
NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];
[resultStr appendString:oneStr];
}
return resultStr;
}
支付:AppDelegate

- (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);
        }];
    }
    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);
        }];
    }
    return YES;
}
四、為了可以跳回app钮糖,需要設(shè)置appScheme
應(yīng)用注冊(cè)scheme,在AliSDKDemo-Info.plist定義URL types

appScheme = @"Payone";

scheme
scheme與代碼中的一定要一致才可以。(第一個(gè)是支付寶的,第二個(gè)是微信的)
總結(jié):大多數(shù)東西是不需要客戶端進(jìn)行設(shè)置和存儲(chǔ)的店归。所以阎抒,同學(xué)們集成之后即可根據(jù)需要進(jìn)行開發(fā)啦。

大多數(shù)都是demo和文檔的東西消痛。另外且叁,遇到的錯(cuò)誤信息,忘記截圖保存了.....
只提供簡(jiǎn)單的集成方法秩伞,錯(cuò)誤請(qǐng)指正逞带。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市纱新,隨后出現(xiàn)的幾起案子展氓,更是在濱河造成了極大的恐慌,老刑警劉巖脸爱,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遇汞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡簿废,警方通過(guò)查閱死者的電腦和手機(jī)空入,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)族檬,“玉大人歪赢,你說(shuō)我怎么就攤上這事〉チ希” “怎么了埋凯?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)看尼。 經(jīng)常有香客問(wèn)我递鹉,道長(zhǎng),這世上最難降的妖魔是什么藏斩? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任躏结,我火速辦了婚禮,結(jié)果婚禮上狰域,老公的妹妹穿的比我還像新娘媳拴。我一直安慰自己,他們只是感情好兆览,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布屈溉。 她就那樣靜靜地躺著,像睡著了一般抬探。 火紅的嫁衣襯著肌膚如雪子巾。 梳的紋絲不亂的頭發(fā)上帆赢,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音线梗,去河邊找鬼椰于。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仪搔,可吹牛的內(nèi)容都是我干的瘾婿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼烤咧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼偏陪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起煮嫌,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笛谦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后立膛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揪罕,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年宝泵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了好啰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡儿奶,死狀恐怖框往,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闯捎,我是刑警寧澤椰弊,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站瓤鼻,受9級(jí)特大地震影響秉版,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茬祷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一清焕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祭犯,春花似錦秸妥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至最盅,卻和暖如春突雪,著一層夾襖步出監(jiān)牢的瞬間起惕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工挂签, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疤祭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓饵婆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親戏售。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侨核,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,735評(píng)論 25 707
  • 公司項(xiàng)目中需要支付功能,現(xiàn)在支付寶灌灾、微信支付很方便搓译,也很多人使用,因此锋喜,他們是首選些己。在此記錄一下支付寶集成過(guò)程,下...
    kingpengLin閱讀 8,743評(píng)論 5 48
  • 支付寶簡(jiǎn)介文檔 (適用于ydm-java接口與后臺(tái),如有誤入炉奴,但愿也能給您帶來(lái)幫助) 此文檔寫于2017年3月逼庞,只...
    隔壁付叔叔閱讀 17,053評(píng)論 3 19
  • 這是一個(gè)真實(shí)的故事。 真實(shí)到連我自己都不敢相信這是真的了瞻赶。 事情還得從我九歲那年秋天說(shuō)起赛糟。 那年秋天,我的妹妹害了...
    邳州李曉輝閱讀 1,005評(píng)論 28 14
  • 它們是安靜而專注的 仿佛從治木者那里 獲得了靈魂和秉性 我知道連同那些 我不曾看到過(guò)的 刨花與木屑 也都是安靜的 ...
    小女巫惠惠閱讀 246評(píng)論 0 2