其實(shí)支付寶支付相對微信支付而言要簡單很多矿卑,我們來一起研究一下去扣,先附上一張原理圖:
屏幕快照10.25.17.png
1.支付寶開放平臺注冊
支付寶開放平臺(支付寶支付是免費(fèi)的,注冊成功后使用的主要為APPKey/SecretKey,其中SecrectKey交由后臺完成集成)
平臺入口:https://open.alipay.com/platform/home.htm
2.下載并使用SDK
支付寶支付SDK可以到支付寶開放平臺下載(附帶文檔Demo)
或者您使用的是Pods街佑,直接在Podfile添加你要的SDK版本谢翎,Pods Update就可以了 (Pods的好處是方便管理三方)
這里使用的是Pods直接下載的:(AliPaySDK-2.0)
屏幕快照 10.34.40.png
3.項(xiàng)目操作
添加好URL Schemes、添加白名單(和上一篇微信說的一樣沐旨,這里不說明了)
4.使用支付
在使用支付的時候森逮,要和后臺溝通好,他需要哪些參數(shù)用于生成訂單你就給他哪些參數(shù)(他要寫好接口磁携,返回的是你用于調(diào)起支付的message)
關(guān)于支付寶支付回調(diào)有兩種模式褒侧,在這里要注意一下,一種是在未安裝支付寶客戶端的時候發(fā)起的網(wǎng)頁支付谊迄,另一種是安裝客戶端由客戶端調(diào)起支付闷供。
1)這是對返回參數(shù)的操作:(未安裝支付寶客戶端,調(diào)起網(wǎng)頁支付)
NSString *mesage = [responseObject objectForKey:@"resultCode"];
NSString *appScheme = @"alisdkdemo";
[[AlipaySDK defaultService] payOrder:mesage fromScheme:appScheme callback:^(NSDictionary *resultDic) {
int code = [[resultDic objectForKey:@"resultStatus"] intValue];
if(code == 9000){
//SVProgressHUD使用的第三方作為提示
[SVProgressHUD showSuccessWithStatus:@"支付成功"];
}else if (code == 8000){
[SVProgressHUD showInfoWithStatus:@"正在處理中"];
}else if (code == 4000){
[SVProgressHUD showInfoWithStatus:@"訂單支付失敗"];
}else if (code == 6001){
[SVProgressHUD showInfoWithStatus:@"用戶中途取消"];
}else if (code == 6002){
[SVProgressHUD showInfoWithStatus:@"網(wǎng)絡(luò)連接出錯"];
}
}];
2)這是對返回參數(shù)的操作:(安裝支付寶客戶端统诺,調(diào)起支付)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
// 支付寶(有幾種模式這里只舉例:safepay)
if ([url.host isEqualToString:@"safepay"]) {
//安裝客戶端調(diào)起支付和未安裝客戶端調(diào)起支付方法是有區(qū)別的
[[AlipaySDK defaultService]processOderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//支付成功(同理可以根據(jù)狀態(tài)碼判斷其他的狀態(tài))
if([resultDic[@"resultStatus"] floatValue] == 9000){
//返回狀態(tài)(有很多人會犯這個錯誤 要注意下)
return YES;
}
}
5.支付寶支付常見異常Bug處理
支付寶支付其實(shí)非常簡單歪脏,常見的問題也不是非常多,當(dāng)?shù)谝淮巫鲋Ц兜臅r候粮呢,可能會忽略掉婿失,客戶端調(diào)起支付,誤把網(wǎng)頁支付當(dāng)做通用的鬼贱,其實(shí)移怯,兩次兩種調(diào)起是分開的。