關(guān)于集成支付寶支付網(wǎng)上也有很多流程和教程了 ,不過(guò)可能有些是以前的版本,大家也可以自行參考一下,不過(guò)接下來(lái)我要說(shuō)的是2022年版本目前最新的流程,使用的是cocopods快速集成的方式。同時(shí)這里也說(shuō)明一下為什么使用cocopods的方式,而不是采用手動(dòng)集成的方式:
1、cocopods方式相比較而言,更簡(jiǎn)單和省時(shí)省力,比如手動(dòng)集成的話,需要手動(dòng)添加很多庫(kù)和文件,容易出錯(cuò);
2、cocopods方式對(duì)于項(xiàng)目的后續(xù)維護(hù)和升級(jí)提供了便利,升級(jí)SDK只需要執(zhí)行一下cocopods命令就可以了。
那接下來(lái)閑話不敘,直接開(kāi)搞,步驟如下:
1、Podfile文件中加入如下內(nèi)容:
pod 'AlipaySDK-iOS'
然后在終端里執(zhí)行命令
pod update --no-repo-update
2、在AppDelegate.m文件中導(dǎo)入頭文件,其他地方需要引用的地方也是這么引入
# import <AlipaySDK/AlipaySDK.h>
3、在AppDelegate.m文件的 @implementation AppDelegate 中加入以下代碼,并且把其中的 NSLog 改為實(shí)際業(yè)務(wù)處理代碼:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
if ([url.host isEqualToString:@"safepay"]) {
//跳轉(zhuǎn)支付寶錢(qiá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)支付寶錢(qián)包進(jìn)行支付,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
4、點(diǎn)擊項(xiàng)目名稱(chēng),點(diǎn)擊 Info 選項(xiàng)卡,在“URL Types”選項(xiàng)中,點(diǎn)擊“+”,在“URL Schemes”中輸入一串獨(dú)特而唯一的字符串,比如:“alisdkdemo”。個(gè)人建議可以使用bundleid去掉點(diǎn)號(hào)(.)后的字符串,比如bundleid為:com.baidu.niubi,那么這里我們就可以使用combaiduniubi,因?yàn)閎undleid已經(jīng)保證了了唯一性,所以使用這個(gè)就不太會(huì)重復(fù)。
注意:這里的 URL Schemes 中輸入的 alisdkdemo,為測(cè)試 demo,實(shí)際商戶(hù)的 app 中要填寫(xiě)?yīng)毩⒌?scheme,建議跟商戶(hù)的 app 有一定的標(biāo)示度,要做到和其他的商戶(hù) app 不重復(fù),否則可能會(huì)導(dǎo)致支付寶返回的結(jié)果無(wú)法正確跳回商戶(hù) app。
5、發(fā)起支付,組裝請(qǐng)求信息,這個(gè)階段需要把后臺(tái)把信息組裝好,這個(gè)應(yīng)在 商戶(hù)服務(wù)端 完成,商戶(hù)服務(wù)端直接將組裝和簽名后的請(qǐng)求串 orderString 傳給客戶(hù)端,客戶(hù)端直接傳給 SDK 發(fā)起請(qǐng)求。示例代碼如下:
NSString *appScheme = @"combaiduniubi";
// NOTE: 將簽名成功字符串格式化為訂單字符串,請(qǐng)嚴(yán)格按照該格式
NSString *orderString = [response stringWithKey:@"pay_apptrade"];
// NOTE: 調(diào)用支付結(jié)果開(kāi)始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
DLog(@"reslut = %@",resultDic);
NSInteger resultStatus = [[resultDic stringWithKey:@"resultStatus"] integerValue];
switch (resultStatus) {
case 9000:{//訂單支付成功
[MBProgressHUD showSuccess:XMFLI(@"支付成功") toView:[kApplication.windows lastObject]];
}
break;
case 8000:{//正在處理中,支付結(jié)果未知
[MBProgressHUD showError:XMFLI(@"正在處理中...") toView:[kApplication.windows lastObject]];
}
break;
case 4000:{//訂單支付失敗
[MBProgressHUD showError:XMFLI(@"支付失敗") toView:[kApplication.windows lastObject]];
}
break;
case 5000:{//重復(fù)請(qǐng)求
[MBProgressHUD showError:XMFLI(@"重復(fù)請(qǐng)求") toView:[kApplication.windows lastObject]];
}
break;
case 6001:{//用戶(hù)中途取消
[MBProgressHUD showError:XMFLI(@"中途取消") toView:[kApplication.windows lastObject]];
}
break;
case 6002:{//網(wǎng)絡(luò)連接出錯(cuò)
[MBProgressHUD showError:XMFLI(@"網(wǎng)絡(luò)連接出錯(cuò)") toView:[kApplication.windows lastObject]];
}
break;
case 6004:{//支付結(jié)果未知
[MBProgressHUD showError:XMFLI(@"支付結(jié)果未知") toView:[kApplication.windows lastObject]];
}
break;
default:{//其他支付錯(cuò)誤
[MBProgressHUD showError:XMFLI(@"支付出錯(cuò)了") toView:[kApplication.windows lastObject]];
}
break;
}
}];
注意:經(jīng)官方確認(rèn),實(shí)現(xiàn)這個(gè)方法喚起支付寶錢(qián)包app支付的時(shí)候,是不會(huì)走callback這個(gè)回調(diào)的,會(huì)走AppDelegate里面實(shí)現(xiàn)的回調(diào)方法。只有在調(diào)起h5網(wǎng)頁(yè)支付的時(shí)候,才會(huì)走callback這個(gè)回調(diào)方法。
6、回調(diào)處理
- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options
{
if ([url.host isEqualToString:@"safepay"]) { //支付寶支付的回調(diào)
//跳轉(zhuǎn)支付寶錢(qián)包進(jìn)行支付,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
QDLog(@"支付結(jié)果 = %@",resultDic);
NSIntegerresCode = [resultDic[@"resultStatus"]integerValue];
if(resCode ==9000) {//支付成功
//發(fā)送支付成功的通知
[[NSNotificationCenter defaultCenter] postNotificationName:NoticePaySuccess object:nil];
}elseif(resCode ==6001){//用戶(hù)中途取消
//發(fā)送支付取消的通知
[[NSNotificationCenter defaultCenter] postNotificationName:NoticePayCancel object:nil];
}else{
[[NSNotificationCenter defaultCenter] postNotificationName:NoticePayFailure object:nil];
}
}];
}
return YES;
}
到此為止,支付寶支付的集成和使用就算完成了。
最后也附上支付寶官方的開(kāi)放文檔地址:https://opendocs.alipay.com/open/204/105295
如果以上的方法幫助到你了,歡迎分享,歡迎私信和我交流。