iOS集成支付寶支付

在記錄支付寶支付的開頭另患,只想感嘆一句纽乱,支付寶的文檔寫的是真真好呀!非常仔細昆箕。鸦列。租冠。。(__) 嘻嘻……

一薯嗤、在支付中添加應用

https://open.alipay.com/platform/home.htm?from=zhuzhan20160818

登錄支付寶賬戶肺稀,
1.1 創(chuàng)建一個新的應用

創(chuàng)建應用

1.2 按照開發(fā)文檔設置應用信息,可以修改应民,也可以在上線時再設置
基礎信息設置

1.3配置應用環(huán)境(生成器生成的公鑰在這進行設置话原,iOS使用原始私鑰,andriod使用pkcs8私鑰)
在這部分對應的支付寶文檔對公鑰私鑰有相應的解釋诲锹。
公鑰上傳

1.3.1 私鑰生成器的長這個樣子
支付寶私鑰生成器

1.3.2私鑰生成器的使用
私鑰生成后

1.3.3 生成公鑰私鑰后繁仁,將公鑰粘貼進應用環(huán)境的,應用公鑰中(這一步需要發(fā)送手機號驗證碼確認后归园,才能進行公鑰設置)
1.4 給應用配置相應的功能
添加功能->選擇相應功能—>添加完成
選擇相應功能

功能添加完成

注釋:
上線:這里的上線只是在支付寶平臺的上線黄虱,并不是我們的app在應用商店上線

是否需簽約:簽約是指應用是否簽約購買了這項服務。
1庸诱、如果是已經購買的服務捻浦,上線后,接口可以直接使用桥爽;如果是沒有購買的服務朱灿,需要購買后才可以使用;
2钠四、不需要簽約的服務盗扒,應用上線就可以用了

沙箱環(huán)境:沙箱環(huán)境是一個不需要上線可以直接調用接口測試的環(huán)境
1、安卓可以不用上線缀去,使用沙箱環(huán)境測試侣灶。
2、iOS目前是無法使用沙箱環(huán)境測試APP支付的缕碎,只能先讓應用上線褥影,上線時間1天,非秤酱疲快凡怎,一般用不了1天。
1.5 應用上線处嫌,如果在1.2中沒有設置應用信息栅贴,需要在這里進行修改

二斟湃、查看支付寶的集成文檔

2.1了解支付寶支付架構


支付寶支付架構

2.2支付寶支付的流程圖

支付寶支付的流程圖

2.3具體的接口調用在支付寶的文檔中寫的非常詳細熏迹!

2.4 注意事項

2.4.1構造交易數據并簽名必須在商戶服務端完成,
2.4.2商戶的應用私鑰絕對不能保存在商戶APP客戶端中凝赛,也不能從服務端下發(fā)注暗。
2.4.3同步返回的數據坛缕,只是一個簡單的結果通知,商戶確定該筆交易付款是否成功需要依賴服務端收到支付寶異步通知的結果進行判斷捆昏。
2.4.4商戶系統(tǒng)接收到通知以后赚楚,必須通過驗簽(驗證通知中的sign參數)來確保支付通知是由支付寶發(fā)送的。建議使用支付寶提供的SDK來完成骗卜,詳細驗簽規(guī)則參考異步通知驗簽宠页。

三、集成過程

支付寶集成流程詳解
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.mCFv8i&treeId=193&articleId=105295&docType=1
步驟1:調用order.m里的函數description將商品信息拼接成字符串作為待簽名字符串
<code>NSString *authInfoStr = [authInfo description];
</code>
步驟2:使用類CreateRSADataSigner寇仓,調用signString簽名函數做簽名
<code>id<DataSigner> signer = CreateRSADataSigner(privateKey);</code>
步驟3:把簽名結果賦值給參數sign举户,并把sign加入之前的待簽名數組中,此時得到的便是要請求給支付寶的全部數據遍烦。
<code>authInfoStr = [NSString stringWithFormat:@"%@&sign=%@&sign_type=%@", authInfoStr, signedString, @"RSA"];</code>

*步驟4:調用(AlipaySDK )defaultService類下面的支付接口函數俭嘁,喚起支付寶支付頁面。

<code>[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];</code>

步驟5:當這筆交易被買家支付成功后支付寶收銀臺上顯示該筆交易成功服猪,并提示用戶返回供填。
此時在APAppDelegate.m的 - (BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 中調用獲取返回數據的代碼【iOS9.0以上(包括iOS9.0)需要在 - (BOOL)application:(UIApplication *)app openURL:(NSURL )url options:(NSDictionary<NSString, id> *)options 中執(zhí)行 】:
<code>[[AlipaySDK defaultService]
processOrderWithPaymentResult:url
standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);//返回的支付結果
}];</code>

五、官方demo

<pre>
點擊訂單模擬支付行為==============

  • (void)doAlipayPay
    {
    /步驟一罢猪、需要填寫商戶app申請的APPID和私鑰===================================/

    NSString *appID = @"支付寶應用的APPID";
    NSString *privateKey = @"支付寶應用公鑰對應的私鑰";

    //partner和seller獲取失敗,提示
    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: 商品數據

/商品信息=======================
total_amount:商品價格(支付金額)
out_trade_no:訂單ID(商戶訂單號)--這個地方用了隨機的膳帕。正常情況下泄私,服務器端會給!
seller_id:收款商戶號
timeout_express:超時時間設置
subject:主題(顯示的數據备闲,自己寫晌端,不影響支付)
body:內容對一筆交易的具體描述信息(自己寫就可以)
===================================
/
order.biz_content = [BizContent new];
order.biz_content.body = @"abc";
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]; //商品價格
order.biz_content.seller_id =@"收款商戶號";// 收款商戶號

/步驟三、將訂單信息拼接成字符串=========================================
訂單信息串中的各個value是否encode
非encode訂單信息串恬砂,用于生成簽名
encode訂單信息串 + 簽名咧纠,用于最終的支付請求訂單信息串===================================
/

NSString *orderInfo = [order orderInfoEncoded:NO];
NSString *orderInfoEncoded = [order orderInfoEncoded:YES];

/步驟四、使用類CreateRSADataSigner(獲取私鑰)泻骤,調用signString簽名函數做簽名(并將商戶信息簽名)需要遵循RSA簽名規(guī)范漆羔,并將簽名字符串base64編碼和UrlEncode=========================================/

id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderInfo];

// NOTE: 如果加簽成功,則繼續(xù)執(zhí)行支付
if (signedString != nil) {
  
    NSString *appScheme = @"alisdkdemo";//url types設置

/步驟五狱掂、把簽名結果賦值給參數sign演痒,并把sign加入之前的待簽名數組中,此時得到的便是要請求給支付寶的全部數據(訂單字符串)趋惨。==============================================/

    NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",
                             orderInfoEncoded, signedString];
    NSLog(@"orderString%@",orderString);

/步驟六鸟顺、調用支付結果開始支付=========================/
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
}
}

// 產生隨機訂單號

  • (NSString *)generateTradeNO
    {
    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;
    }
    </pre>

支付寶付款頁面

六、開發(fā)過程中需要注意的事項

1、URL Types需要設置URL Scheme
URL Scheme是跳轉其他APP的必須設置讯嫂。
可以在info.plist文件中設置蹦锋,也可以在info下找到URL Types進行設置

URL types

2、需要設置頭文件路徑:點擊“Build Settings”選項卡欧芽,在搜索框中莉掂,以關鍵字“search”搜索,對“Header Search Paths”增加頭文件路徑:$(SRCROOT)/項目名稱千扔。如果頭文件信息已增加憎妙,可不必再增加。

設置頭文件路徑

3曲楚、官方的demo中會報一個錯誤尚氛,私鑰為空
檢查私鑰的正確性后,如果還不能解決洞渤,嘗試使用以下方法修改:
對私鑰樣式的拼接中進行修改
-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----
修改成
-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----

4创橄、支付寶打開失敗巷折,ALI40247錯誤
這個錯誤的原因一般是支付寶的應用配置有問題,解決方法:
4.1、檢查使用的APPID 私鑰是否正確
4.2被因、檢查支付寶中應用是否添加APP支付功能
4.3茴肥、檢查APP支付功能是否已經簽約
如果以上都沒問題庄拇,可以在支付寶刪除應用癞尚,再重新創(chuàng)建一個新應用進行測試


ALI40247錯誤
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惋耙,隨后出現的幾起案子捣炬,更是在濱河造成了極大的恐慌,老刑警劉巖绽榛,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湿酸,死亡現場離奇詭異,居然都是意外死亡灭美,警方通過查閱死者的電腦和手機推溃,發(fā)現死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來届腐,“玉大人铁坎,你說我怎么就攤上這事±缢眨” “怎么了硬萍?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長围详。 經常有香客問我朴乖,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任寒砖,我火速辦了婚禮赐劣,結果婚禮上嫉拐,老公的妹妹穿的比我還像新娘哩都。我一直安慰自己,他們只是感情好婉徘,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布漠嵌。 她就那樣靜靜地躺著,像睡著了一般盖呼。 火紅的嫁衣襯著肌膚如雪儒鹿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天几晤,我揣著相機與錄音约炎,去河邊找鬼。 笑死蟹瘾,一個胖子當著我的面吹牛圾浅,可吹牛的內容都是我干的。 我是一名探鬼主播憾朴,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼狸捕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了众雷?” 一聲冷哼從身側響起灸拍,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砾省,沒想到半個月后鸡岗,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡编兄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年纤房,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翻诉。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡炮姨,死狀恐怖,靈堂內的尸體忽然破棺而出碰煌,到底是詐尸還是另有隱情舒岸,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布芦圾,位于F島的核電站蛾派,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜洪乍,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一眯杏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壳澳,春花似錦岂贩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抹镊,卻和暖如春锉屈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垮耳。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工颈渊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人终佛。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓俊嗽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親查蓉。 傳聞我的和親對象是個殘疾皇子乌询,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容