在支付寶回調(diào)是分兩種情況
1手機(jī)沒有裝客戶端。
如果你看過支付寶的demo你會(huì)發(fā)現(xiàn)有這樣一個(gè)方法,程序運(yùn)行到這行代碼會(huì)跳轉(zhuǎn)到網(wǎng)頁支付寶。在支付過之后會(huì)返回自己的客戶端在callback這個(gè)block里面回調(diào)
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *responseObj)
NSLog(@"reslut======= = %@",responseObj);
}];
2手機(jī)裝了客戶端
程序還會(huì)運(yùn)行到payOrder這個(gè)方法,就會(huì)跳轉(zhuǎn)到支付寶客戶端,支付完成,返回我們自己的程序,回調(diào)不是直接回調(diào)callback
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *responseObj) {
NSLog(@"reslut======= = %@",responseObj);
}];
而是會(huì)運(yùn)行下面寫的appDelegate的一個(gè)系統(tǒng)回調(diào)方法。這里面有支付寶SDK的方法,緊接著會(huì)被運(yùn)行。這個(gè)支付寶SDK的方法一運(yùn)行可能不會(huì)回調(diào)standbyCallback這個(gè)block
而是回調(diào)上面說的那個(gè)方法的callback。
原因是,//【由于在跳轉(zhuǎn)支付寶客戶端支付的過程中,商戶app在后臺(tái)很可能被系統(tǒng)kill了,所以pay接口的callback就會(huì)失效,callback都失效自然callback不會(huì)回調(diào)。難道就不回調(diào)了?那standbyCallback是吃干飯的?所以當(dāng)callback失效standbyCallback才回調(diào)。
//ios 9
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
//如果極簡開發(fā)包不可用,會(huì)跳轉(zhuǎn)支付寶錢包進(jìn)行支付,需要將支付寶錢包的支付結(jié)果回傳給開發(fā)包
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳轉(zhuǎn)支付寶客戶端支付的過程中,商戶app在后臺(tái)很可能被系統(tǒng)kill了,所以pay接口的callback就會(huì)失效,請(qǐng)商戶對(duì)standbyCallback返回的回調(diào)結(jié)果進(jìn)行處理,就是在這個(gè)方法里面處理跟callback一樣的邏輯】
NSLog(@"result = %@",resultDic);
}];
}
if ([url.host isEqualToString:@"platformapi"]){//支付寶錢包快登授權(quán)返回authCode
[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳轉(zhuǎn)支付寶客戶端支付的過程中,商戶app在后臺(tái)很可能被系統(tǒng)kill了,所以pay接口的callback就會(huì)失效,請(qǐng)商戶對(duì)standbyCallback返回的回調(diào)結(jié)果進(jìn)行處理,就是在這個(gè)方法里面處理跟callback一樣的邏輯】
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
//ios8
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
//如果極簡開發(fā)包不可用,會(huì)跳轉(zhuǎn)支付寶錢包進(jìn)行支付,需要將支付寶錢包的支付結(jié)果回傳給開發(fā)包
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳轉(zhuǎn)支付寶客戶端支付的過程中,商戶app在后臺(tái)很可能被系統(tǒng)kill了,所以pay接口的callback就會(huì)失效,請(qǐng)商戶對(duì)standbyCallback返回的回調(diào)結(jié)果進(jìn)行處理,就是在這個(gè)方法里面處理跟callback一樣的邏輯】
NSLog(@"result = %@",resultDic);
}];
}
if ([url.host isEqualToString:@"platformapi"]){//支付寶錢包快登授權(quán)返回authCode
[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳轉(zhuǎn)支付寶客戶端支付的過程中,商戶app在后臺(tái)很可能被系統(tǒng)kill了,所以pay接口的callback就會(huì)失效,請(qǐng)商戶對(duì)standbyCallback返回的回調(diào)結(jié)果進(jìn)行處理,就是在這個(gè)方法里面處理跟callback一樣的邏輯】
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}