【iOS】程序內跳轉到支付寶轉帳(非SDK實現支付)及相關監聽

轉載請註明出處api

今天遇到了一個有意思的問題,就是支付調用支付寶,可是後臺返的連接相似這種(https://qr.alipay.com/bax05299bjty5xvbkjii8018)。這種連接直接打開在APP中是不行的,轉成二維碼能夠用支付寶掃碼支付。微信

那麼如何不生成二維碼,而後掃描在進行支付呢?這相似於支付寶轉帳。至關於程序跳轉到支付寶轉帳。app

附:經過半天的摸索,終於明白轉帳的套路:

1,生成收款用的二維碼。(支付寶上有)
2,用二維碼掃描工具掃描出對應URL。這個連接在 PC 端訪問,會跳到支付寶首頁,可是在 iPhone 上面訪問,這個網頁會作一次支付寶 app 的 scheme 跳轉。這個過程已經能夠接受了,在 app 內 openURL,會先跳到 Safari,而後 Safari 提示你去支付寶付款。eg:HTTPS://QR.ALIPAY.COM/*********
2,在 app 的代碼裏面,只要作一次 openURL,就會跳轉到支付寶裏面,直接打開第一步裏面那個付款對象,而且 title 是掃碼付款,這個現象和直接掃了第一步的二維碼是如出一轍的。 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"alipayqr://platformapi/startapp?saId=10000007&clientVersion=3.7.0.0718&qrcode=上邊對應的URL"]]; 3,搞定。

 so,咱們就能夠這樣作。工具

    // 首先拼接urlStr  前面至關於固定的  只要再後面拼上返回的連接
    NSString *url = @"alipayqr://platformapi/startapp?saId=10000007&qrcode=https://qr.alipay.com/bax05299bjty5xvbkjii8018";
    
    // 打開連接
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

可是有個問題就是,咱們不清楚是否支付成功,且沒有支付回調之類的來返回APP,並在APP中處理。url

第二個重點就來了,如何監聽回調呢?個人思路是這樣,在咱們的APP從新回到前臺時判斷,這也須要後臺的配合,咱們獲取不到支付寶的回調,可是後臺根據調取的相關SDK能獲取到。在回到前臺時咱們就能夠經過調用後臺接口來獲取狀態。而後進行相關處理。spa

方法一:在APPdelegate中處理code

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    
    NSLog(@"APP 回到前臺");
    
    // 判斷是否是須要處理的界面 若是是進行操做 不是不處理
    // 由於是支付,因此我寫了個方法 獲取最上層的ViewController,只要是點擊支付的界面,咱們就進行操做。根據不一樣的界面進行不一樣操做,可是比較繁瑣。
} 

方法二:在那個界面處理,比較簡單orm

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 監聽應用從新得到活躍 並處理
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(handleApplicationActive:)
                                                 name:UIApplicationDidBecomeActiveNotification object:nil];
}

//處理app後臺回來事件
-(void)handleApplicationActive:(NSNotification *)notification{
    NSLog(@"回到app2222");
}

 這兩個方法均可以實現這個監聽功能,能夠根據喜愛本身選擇。附上demoserver

最後附上支付寶和其餘開放平臺對應的schemes:對象

微信掃一掃weixin://scanqrcode(跳轉微信掃一掃)支付寶掃一掃alipayqr://platformapi/startapp?saId=10000007(跳轉支付寶掃一掃)支付寶付款alipay://platformapi/startapp?appId=20000056(跳轉支付寶轉帳向商家付款界面)支付寶記帳alipay://platformapi/startapp?appId=20000168(跳轉支付寶記帳界面)支付寶滴滴alipay://platformapi/startapp?appId=20000778支付寶螞蟻森林alipay://platformapi/startapp?appId=60000002支付寶轉帳alipayqr://platformapi/startapp?saId=20000116(跳轉支付寶轉帳界面)支付寶手機充值alipayqr://platformapi/startapp?saId=10000003(跳轉支付寶手機充值頁面)播放網易雲已下載的音樂orpheuswidget://download(跳轉進網易雲並自動播放已經下載的歌曲,需提早設置爲隨機播放,不然每次都是播放你下載的歌曲中的第一首)網易雲音樂聽歌識曲orpheuswidget://recognize(點擊一下自動進入網易雲聽歌識曲界面)

相關文章
相關標籤/搜索